Un recorrido rápido por el uso de SQL con ST_Geometry

Puede utilizar Lenguaje estructurado de consultas (SQL), tipos de datos y formatos de tablas del sistema de administración de bases de datos (DBMS) para trabajar con la información almacenada en una geodatabase o en una base de datos en la que el ST_Geometry esté instalado. SQL es un lenguaje de base de datos que es compatible con los comandos de definición y manipulación de datos.

Cuando se accede a los datos a través de SQL, las aplicaciones externas pueden trabajar con los datos tabulares administrados por la geodatabase o por la base de datos. Estas aplicaciones externas pueden ser aplicaciones de bases de datos no espaciales o aplicaciones espaciales personalizadas desarrolladas en un entorno diferente a ArcObjects.

Cuando inserte o edite datos en una geodatabase o en una base de datos por medio de SQL, emita una declaración COMMIT o ROLLBACK después de que se haya ejecutado la declaración SQL para asegurarse de que los cambios se confirman en la base de datos o se deshacen. De esta forma, se evita que se mantengan bloqueos en las filas, las páginas o las tablas que se están editando.

Insertar datos ST_Geometry con SQL

Puede usar SQL para insertar datos espaciales en una tabla de geodatabase o de base de datos que tenga una columna ST_Geometry. Puede usar las funciones del constructor de ST_Geometry para insertar tipos de geometría concretos. También puede especificar que la salida de ciertas funciones de operaciones espaciales se transfiera a una tabla existente.

Cuando inserte geometría en una tabla usando SQL, tenga en cuenta lo siguiente:

Id. de referencia espacial

El SRID que se especifica cuando se inserta una geometría en una tabla de Oracle que usa el tipo espacial ST_Geometry debe estar en la tabla ST_SPATIAL_REFERENCES y tener un registro coincidente en la tabla SDE.SPATIAL_REFERENCES. El SRID que se especifica cuando se inserta una geometría en una tabla de PostgreSQL que usa el tipo espacial ST_Geometry debe estar en la tabla public.sde_spatial_references. A partir de ArcGIS 10.1, estas tablas se llenan de antemano con referencias espaciales y SRID.

El SRID que se especifica cuando se inserta una geometría en una tabla de SQLite que usa el tipo espacial ST_Geometry (geometryblob) debe estar en la tabla st_spatial_reference_systems.

Si necesita utilizar una referencia espacial personalizada que no está en la tabla, la forma más sencilla de hacerlo es usar ArcGIS for Desktop para cargar o crear una clase de entidad que tenga los valores de referencia espacial deseados. Asegúrese de que la clase de entidad creada usa el almacenamiento ST_Geometry. Esto crea un registro en las tablas SDE.SPATIAL_REFERENCES y ST_SPATIAL_REFERENCES en Oracle, un registro en la tabla public.sde_spatial_references en PostgreSQL o un registro en la tabla st_aux_spatial_reference_systems_table en SQLite.

En las geodatabases, puede consultar la tabla LAYERS (Oracle) o sde_layers (PostgreSQL) para averiguar el SRID asignado a la tabla espacial. Luego, puede usar el SRID cuando cree tablas espaciales e inserte datos con SQL.

Si lo prefiere, puede agregar una referencia espacial a la tabla ST_SPATIAL_REFERENCES o sde_spatial_references con SQL. Consulte Crear referencias espaciales con SQL para obtener más información.

Si desea obtener una explicación sobre los SRID y los sistemas de referencia espaciales, consulte ¿Qué es un SRID? y Referencias espaciales.

ObjectIDs

Para que ArcGIS consulte los datos, es necesario que la tabla contenga un campo de identificador único.

Las clases de entidad creadas con ArcGIS siempre tienen un campo ObjectID que se usa como campo de identificador. Cuando se insertan registros en la clase de entidad usando ArcGIS, siempre se inserta un valor único en el campo ObjectID. ArcGIS mantiene el campo ObjectID en una tabla de geodatabase. El DBMS mantiene el campo ObjectID de una tabla de base de datos creada en ArcGIS.

Cuando se insertan registros en una tabla de geodatabase con SQL, se debe usar la función Next_RowID para obtener e insertar un valor válido de ObjectID. Cuando se usa SQL para insertar registros en una tabla de base de datos creada en ArcGIS, el DBMS llena el campo ObjectID con un valor.

Las tablas de base de datos que se crean fuera de ArcGIS deben tener un campo (o un conjunto de campos) que ArcGIS pueda usar como ObjectID. Si se usa el tipo de datos nativo de incremento automático de la base de datos para el campo de Id. de la tabla, el DBMS llenará este campo cuando se inserte un registro a través de SQL. Si desea mantener manualmente los valores del campo de identificador único, asegúrese de proporcionar un valor único para el Id. cuando edite la tabla en SQL.

NotaNota:

No se pueden publicar datos de tablas que tienen un campo de identificador único mantenido por el usuario.

Consulte ¿Qué es un ObjectID? para obtener más información.

Editar datos ST_Geometry con SQL

Las ediciones de los registros existentes realizadas en SQL afectan con frecuencia a los atributos no espaciales almacenados en la tabla. Sin embargo, puede editar los datos en la columna ST_Geometry con la ayuda de las funciones del constructor contenidas en las declaraciones SQL UPDATE.

Si los datos están almacenados en una geodatabase, hay algunas directrices adicionales que se deben seguir al editar con SQL:

PrecauciónPrecaución:

El uso de SQL para acceder a la geodatabase inhabilita funciones de la geodatabase como las versiones, la topología, las redes, los terrenos, la anotación vinculada a entidad u otras extensiones de espacio de trabajo o de clase. Podría ser posible usar las entidades del DBMS como desencadenadores y los procedimientos almacenados para mantener las relaciones entre las tablas que son necesarias para ciertas funcionalidades de geodatabase. Sin embargo, al ejecutar comandos SQL en la geodatabase sin tener en cuenta esta funcionalidad adicional (p. ej., al emitir declaraciones INSERT para agregar registros a una tabla de negocios versionada o agregar una columna a una clase de entidad existente), se ignorará la funcionalidad de la geodatabase y, probablemente, se dañarán las relaciones entre los datos contenidos en ella.

Temas relacionados

5/10/2014