4 votos

Cómo automatizar la unión de tablas de bases de datos no espaciales de SQL Server a archivos shapefile de ArcGIS

Tengo docenas de tablas de bases de datos no espaciales de SQL Server. Son tablas comunes, los tipos de columna son: nvarchar, int y float.

Intento utilizar Arcpy para automatizar la unión de estas tablas de base de datos a shapefiles. Primero hay que registrar las tablas en ArcGIS. El ArcMap que utilizo es 10.3.1. Desafortunadamente, ArcMap 10.3 ya no soporta "sdetable -o register -t"? Lo intenté un rato y no pude hacerlo funcionar.

Entonces, ¿hay otras opciones para automatizar la unión de las tablas?

3voto

M. B. Altaie Puntos 11

Usted no está buscando la automatización de la tabla se unen tanto como registro de mesas automatización.

No es necesario utilizar sdetable para registrar tablas con ArcSDE porque ArcGIS soporta una operación completa de "Registro con Geodatabase" (que hace mucho más de lo que hacía la utilidad de línea de comandos).

Por ejemplo, aquí tenemos una conexión abierta:

Catalog

Un clic con el botón derecho del ratón y la navegación a través de "Gestionar" lleva a "Registrar con Geodatabase"

Register

(Tenga en cuenta que sólo puede registrarse como propietario de la mesa)

El registro requiere una nueva columna objectid, por lo que puede haber un aviso:

Confirm

aunque si ya tiene una columna "ObjectID" ( INTEGER NOT NULL ), que es la mejor opción para evitar la fragmentación de la tabla, puede que aparezca un mensaje de confirmación:

use existing

Y luego se registra la mesa:

field list

La única limitación efectiva al registro de geodatabases se destaca en la documentación --

Nota: Dado que ArcGIS no puede añadir un campo ObjectID a una vista o actualizar los valores de un campo ObjectID existente en una vista, no puede registrar una vista con la geodatabase.

y es posible utilizar sdelayer -o register al menos registrar las vistas espaciales en ArcSDE, lo que las eleva a la categoría de "clase de característica simple" (sin necesidad de Query Layer).

También es importante tener en cuenta que una vez que una tabla está registrada en ArcGIS, tiene una columna rowid establecida por SDE, que afecta a la capacidad de insertar filas fuera de ArcGIS, y no debe ser alterada o eliminada con herramientas SQL (a riesgo de corrupción de los metadatos de la geodatabase).

Este proceso también puede realizarse a través de ArcPy mediante Registro en Geodatabase como se describe al final del página de migración de línea de comandos :

""" Register third-party tables with the geodatabase """

import arcpy
import sys

def RegisterThirdPartyTables(in_tables):
    """
    Register third-party tables with the geodatabase

    in_tables -- semi-colon delimited string of tables
    """
    try:
        tables = in_tables.split(';')
        for table in tables:
            arcpy.RegisterWithGeodatabase_management(table)
    except arcpy.ExecuteError:
        print(arcpy.GetMessages(2))

if __name__ == "__main__":
    RegisterThirdPartyTables(sys.argv[1])

Ahora esto: Hace veinte años, los shapefiles eran una maravilla, pero ya han pasado. Las capacidades de las geodatabases de archivos superan a las de los shapefiles en casi todos los aspectos. Las uniones entre fuentes de geometría basadas en archivos (.shp o .gdb) y bases de datos son muy ineficaces y deben evitarse en la medida de lo posible. A veces se necesita un poco de pensamiento poco convencional para trabajar dentro de los límites de los tipos nativos de Geometría/Geografía, pero normalmente hay una manera de obtener un rendimiento adecuado (y a menudo superior) en una unión a una base de datos (y con una geodatabase empresarial, siempre existe la posibilidad de recurrir al almacenamiento SDEBINARIO).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X