Saltar a contenido

El subprograma de extracción de metadatos

Info

Esta documentación está destinada a los equipos responsables de las infraestructuras técnicas y de su seguridad. No dude en ponerse en contacto directamente con el personal de Isogeo para obtener más información.

Presentación

Info

Todos los procesos que se describen a continuación sólo tienen fines de consulta, y no se realiza ninguna operación de edición de los datos de nuestros clientes.

El servicio Windows Isogeo aquí descrito incluye un subprograma utilizado para realizar diversos procesos en los datos a los que se dirige Scan Isogeo. Existen 4 tipos de procesamiento:

  • verificación de la versión del software ArcGIS Pro y activación de la licencia de ESRI

  • listado se puede utilizar para listar los datos accesibles en :

    • una base de datos Oracle, PostgreSQL o Microsoft SQL Server
    • una geodatabase empresarial de ESRI
    • un archivo ESRI de Geodatabase
  • la firma se utiliza para calcular un hash a partir del contenido de un dato

  • lookup extrae y calcula los metadatos que describen un dato:

    • nombre
    • ubicación
    • sistema de coordenadas
    • coordenadas de la envolvente convexa en GeoJSON
    • nombre, alias y tipo de campo
    • número de entidades
    • tipo de geometría
    • número de bandas
    • número de columnas
    • número de líneas
    • nOMBRE DE LA BANDA
    • coordenadas del cuadro delimitador
Estructura de JSON de una búsqueda
[
    {
        "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": "..."
                }
            }
        }
    }
]

Este subprograma, ubicado en el directorio de instalación del servicio Isogeo, consta de :

  • un archivo de aplicación .exe
  • una carpeta _internal que contiene las DLL necesarias para ejecutar la aplicación

Como se indica aquí, la ejecución de la aplicación no debe estar bloqueada en la máquina que aloja el servicio Isogeo para que Scan Isogeo funcione.

Descripción

La aplicación y su _internal se derivan de :

  • empaquetado con PyInstaller 6,
  • en un entorno Windows,
  • un programa escrito en Python 3.

Las principales dependencias del programa son las siguientes y se actualizan periódicamente:

Escribir

Los archivos .json y .log son editados por el subprograma en una carpeta %programdata%\Isogeo\tmp y borrados regularmente por el servicio Isogeo.

Archivo .log

Estos archivos de registro se utilizan para acciones de apoyo en caso de fallo de procesamiento.

Archivos .json

El subprograma escribe los resultados del procesamiento en estos archivos, que son leídos por el servicio Isogeo.

Flujos de red y acceso a los datos

El subprograma no inicia ninguna conexión saliente a Internet ni se pone en contacto con ningún servicio externo perteneciente al editor.

No abre ningún puerto de escucha ni expone ningún servicio de red.

Las únicas comunicaciones de red que probablemente se lleven a cabo son las necesarias para acceder a los datos a los que se dirige explícitamente el usuario de Scan Isogeo.

Dependiendo de la configuración del cliente, esto puede incluir:

  • Conexión a una base de datos relacional (Oracle, PostgreSQL, SQL Server) ;
  • Acceso a una base de datos geográfica empresarial de ESRI ;
  • Acceso a recursos compartidos de red (SMB) que contienen archivos de datos.

Estas conexiones se realizan :

  • a hosts definidos por el administrador ;
  • en los puertos estándar de los servicios en cuestión (por ejemplo, 1521 para Oracle, 5432 para PostgreSQL, 1433 para SQL Server, 445 para SMB), a menos que el cliente lo configure específicamente;
  • en el contexto de seguridad de la cuenta que ejecuta el Servicio Windows Isogeo.

El subprograma no realiza escaneos de red, descubrimiento automático de hosts ni comunicaciones a destinos no configurados.

Comportamientos que pueden requerir una validación de seguridad

Creación de procesos hijo

Para procesar datos procedentes de Geodatabases empresariales o de Geodatabases de archivos ESRI, el subprograma necesitaexplotar las capacidades del software ArcGIS Pro, que debe estar instalado y tener licencia en la misma máquina que el Servicio Windows. Para ello, desencadena la ejecución de scripts mediante el intérprete Python instalado con el software ArcGIS Pro.

Info

Aquí se documenta la recuperación de la ubicación del intérprete de Python instalado con el software ArcGIS Pro.

Los scripts Python ejecutados se encuentran en la carpeta _internal. La biblioteca pywin se utiliza para evitar que estos procesos hijos queden huérfanos si se detiene el proceso padre.

Restablecer el directorio de búsqueda de DLL

Paraevitar conflictos de DLL entre la subrutina y el intérprete de Python de ArcGIS Pro que utiliza, se han añadido las siguientes líneas al código fuente:

if sys.platform == "win32":
    import ctypes
    ctypes.windll.kernel32.SetDllDirectoryW(None)

Este código restaura el comportamiento por defecto de Windows para la búsqueda de DLLs. Esta es la forma más segura de garantizar que el intérprete de ArcGIS Pro Python acceda a sus propias DLL.