Le sous-programme d'extraction de métadonnées¶
Info
Cette documentation s'adresse aux équipes chargées des infrastructures techniques et de leur sécurité. N'hésitez pas à contacter directement le staff Isogeo pour obtenir des informations complémentaires.
Présentation¶
Info
Tous les traitements présentés ci-dessous relèvent uniquement de la consultation, aucune opération d'édition n'est effectuée sur les données de nos clients.
Le service Windows Isogeo dont l'installation est décrite ici comporte un sous-programme utilisé pour effectuer différents traitements sur les données ciblées par le
-
la vérification de la version du logiciel ArcGIS Pro et de l'activation de la licence ESRI
-
le listing permet d'inventorier les données accessibles dans :
- une base de données SQL Oracle, PostgreSQL ou Microsoft SQL Server
- une Géodatabase d'entreprise ESRI
- une Géodatabase fichier ESRI
-
la signature sert à calculer un hash à partir du contenu d'une donnée
-
le lookup extrait et calcule les métadonnées décrivant une donnée :
- nom
- emplacement
- système de coordonnées
- coordonnées de l'enveloppe convexe en GeoJSON
- nom, alias et type des champs
- nombre d'entités
- type de géométrie
- nombre de bandes
- nombre de colonnes
- nombre de lignes
- nom des bandes
- coordonnées de la boîte englobante
Structure des JSON issus d'un lookup
[
{
"dataset": {
"name": "...",
"formatShort": "...",
"formatLong": "...",
"path": "...",
"numberOfFeatures": 0,
"coordsys": { // null si SRS inconnu
"EPSG": "...",
"name": "..."
},
"type": "...", // POINT | LINESTRING | POLYGON | MULTIPOINT | FEATURECOLLECTION | ...
"envelope": "...", // GeoJSON stringifié de l'enveloppe convexe, ou null
"attributes": [
{
"name": "...",
"type": "...",
"alias": "...",
"length": 0, // optionnel
"precision": 0, // optionnel
"scale": 0, // optionnel
"isNullable": true, // optionnel
"editable": true, // optionnel
"required": true, // optionnel
"domain": "...", // optionnel
"defaultValue": "..." // optionnel
}
],
"esriVersion": "...", // ESRI uniquement
"geometryStorage": "...", // ESRI uniquement
"warnings": { // optionnel, si SRS non résolu
"coordsys": {
"EPSG": "...",
"name": "...",
"wkt": "..."
}
}
}
}
]
[
{
"dataset": {
"name": "...",
"formatShort": "...",
"formatLong": "...", // absent en FME si non renseigné
"path": "...",
"coordsys": { // null si SRS inconnu
"EPSG": "...",
"name": "..."
},
"envelope": "...", // GeoJSON stringifié, null, ou "" si pas de géoréférencement
"bands_count": 0,
"cols_count": 0,
"rows_count": 0,
"bands": [
{
"name": "...",
"interpretation": "...",
"profondeur": "..."
}
],
"bbox": [xmin, ymin, xmax, ymax],
"esriVersion": "...", // ESRI uniquement
"warnings": { // optionnel, si SRS non résolu
"coordsys": {
"wkt": "..."
}
}
}
}
]
[
{
"dataset": {
"name": "...",
"formatShort": "...",
"formatLong": "...",
"path": "...",
"numberOfFeatures": 0,
"type": "...", // no_geom
"attributes": [
{
"name": "...",
"type": "...",
"alias": "...",
"length": 0, // optionnel
"precision": 0, // optionnel
"scale": 0, // optionnel
"isNullable": true, // optionnel
"editable": true, // optionnel
"required": true, // optionnel
"domain": "...", // optionnel
"defaultValue": "..." // optionnel
}
],
"esriVersion": "...", // ESRI uniquement
"warnings": { // optionnel, si SRS non résolu
"coordsys": {
"EPSG": "...",
"name": "...",
"wkt": "..."
}
}
}
}
]
Ce sous-programme, situé dans le répertoire d'installation du service Isogeo, est constitué :
- d'un fichier d'application
.exe - d'un dossier
_internalcontenant les DLL nécessaires au fonctionnement de l'application
Comme indiqué ici, l'exécution de l'application ne doit pas être bloquée sur la machine hébergeant le service Isogeo pour permettre le fonctionnement du Scan Isogeo.
Description¶
L'application et son _internal sont issus :
- du packaging avec PyInstaller 6,
- dans un environnement Windows,
- d'un programme rédigé en Python 3.
Les principales dépendances du programme sont les suivantes et sont mises à jour régulièrement :
Écriture¶
Des fichiers .json et .log sont édités par le sous-programme dans un dossier %programdata%\Isogeo\tmp et supprimés régulièrement par le service Isogeo.
Fichier .log¶
Ces fichiers de journalisation sont utilisés dans le cadre d'actions de support en cas d'échec d'un traitement.
Fichiers .json¶
Le sous-programme inscrit le résultat des traitements dans ces fichiers qui sont lus par le service Isogeo.
Flux réseau et accès aux données¶
Le sous-programme n’initie aucune connexion sortante vers Internet et ne contacte aucun service externe appartenant à l’éditeur.
Il n’ouvre aucun port en écoute et n’expose aucun service réseau.
Les seules communications réseau susceptibles d’être effectuées sont celles nécessaires à l’accès aux données explicitement ciblées par l’utilisateur du Scan Isogeo.
Selon la configuration du client, cela peut inclure :
- Connexion à une base de données relationnelle (Oracle, PostgreSQL, SQL Server) ;
- Accès à une Géodatabase d’entreprise ESRI ;
- Accès à des partages réseau (SMB) contenant des fichiers de données.
Ces connexions sont réalisées :
- vers des hôtes définis par l’administrateur ;
- sur les ports standards des services concernés (ex. 1521 pour Oracle, 5432 pour PostgreSQL, 1433 pour SQL Server, 445 pour SMB), sauf configuration spécifique du client ;
- dans le contexte de sécurité du compte exécutant le Service Windows Isogeo.
Le sous-programme ne réalise aucun scan réseau, aucune découverte automatique d’hôtes et aucune communication vers des destinations non configurées.
Comportements pouvant nécessiter une validation sécurité¶
Création de processus enfants¶
Afin de traiter les données issues de Géodatabases d'entreprise ou de Géodatabases fichier ESRI, le sous-programme a besoin d'exploiter les possibilités du logiciel ArcGIS Pro qui doit être installé et licencié sur la même machine que le Service Windows. Pour ce faire, il déclenche l'exécution de scripts par l'interpréteur Python installé avec le logiciel ArcGIS Pro.
Info
La récupération de l'emplacement de l'interpréteur Python installé avec le logiciel ArcGIS Pro est documentée ici.
Les scripts Python exécutés se trouvent dans le dossier _internal. La bibliothèque pywin est utilisée afin d'éviter que ces processus enfants ne se retrouvent orphelins en cas d'arrêt du processus parent.
Réinitialisation du répertoire de recherche de DLL¶
Afin d'éviter les conflits de DLL entre le sous-programme et l'interpréteur Python d'ArcGIS Pro auquel elle fait appel, les lignes suivantes ont été ajoutées au code source :
if sys.platform == "win32":
import ctypes
ctypes.windll.kernel32.SetDllDirectoryW(None)
Ce code permet de restaurer le comportement Windows par défaut en matière de recherche de DLL. C'est la manière la plus sûre de garantir que l'interpréteur Python d'ArcGIS Pro accède à ses propres DLL.