SDO_GEOMETRY y ArcGIS

Al crear una clase de entidad con el almacenamiento SDO_GEOMETRY en una geodatabase, ocurre lo siguiente:

Se crea una tabla con una columna SDO_GEOMETRY.

Si especifica una palabra clave de configuración de DBTUNE que tenga el parámetro GEOMETRY_STORAGE definido en SDO_GEOMETRY al crear una clase de entidad en una geodatabase de Oracle, ArcGIS usa una columna SDO_GEOMETRY para el campo de forma.

La siguiente clase de entidad de ejemplo tiene un campo identificador único (ObjectID), atributos de población y nombre y una columna de forma SDO_GEOMETRY.

NombreTipo de datos¿Nulo?

NOMBRE

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

Id. de objeto

NUMBER(38)

NOT NULL

Nota:

*Se usa NVARCHAR2(32) en lugar de VARCHAR2(32) si utiliza cadenas Unicode.

Se crea un índice espacial en la columna SDO_GEOMETRY.

De forma predeterminada, ArcGIS crea un índice espacial de árbol R en la columna SDO_GEOMETRY de una clase de entidad. ArcGIS utiliza la función SDO_FILTER de Oracle para realizar consultas espaciales en la clase de entidad; por tanto, se requiere un índice espacial para consultas espaciales.

ArcGIS descarta y vuelve a crear automáticamente índices de Oracle Spatial creados por ArcGIS cada vez que la clase de entidad se alterna entre los modos LOAD_ONLY_IO y NORMAL_IO. Los índices espaciales definidos por la aplicación Oracle Spatial Index Advisor o creados mediante SQL no se descartan cuando ArcGIS cambia la clase de entidad al modo LOAD_ONLY_IO.

Se agrega un registro a la vista de metadatos de Oracle Spatial.

Cuando ArcGIS crea la clase de entidad que contiene una columna SDO_GEOMETRY, agrega el registro de metadatos de Oracle Spatial requerido a la vista USER_SDO_GEOM_METADATA. Estos metadatos incluyen la información del nombre de tabla, del nombre de la columna SDO_GEOMETRY, del ID de referencia espacial y de la dimensión de coordenadas.

Cuando se usa ArcGIS para eliminar la clase de entidad, también se eliminan los metadatos de Oracle Spatial.

Se especifica una dimensión de coordenadas.

Puede crear una geometría de ArcGIS como 2D (x,y), 2D con medidas (x,y,m), 3D (x,y,z) o 3D con medidas (x,y,z,m). Al crear nuevas clases de entidad con una columna SDO_GEOMETRY, ArcGIS coloca la información de dimensión de Oracle Spatial en la columna DIMINFO de la vista de metadatos.

  • La coordenada x es la primera dimensión.
  • La coordenada y es la segunda dimensión.
  • La coordenada z es la tercera dimensión si la clase de entidad se define con elevaciones.
  • La coordenada m es la última dimensión (tercera o cuarta, según la presencia o ausencia de una coordenada z) si la clase de entidad se define con medidas.

Se rellena la columna SDO_GEOMETRY.

Al almacenar geometría en la geodatabase, ArcGIS rellena el valor SDO_GEOMETRY de un objeto de API denominado SE_SHAPE. El objeto SE_SHAPE puede contener geometría simple o compleja que puede incluir elevaciones, medidas, datos CAD, anotación y parches de superficie. El tipo de datos SDO_GEOMETRY admite un subconjunto de estas propiedades geométricas. Dado que no hay ninguna asignación uno a uno de los componentes en SDO_GEOMETRY y en el objeto SE_SHAPE, ArcGIS sigue un conjunto de reglas al almacenar datos tablas de Oracle Spatial:

  • Crear SDO_GTYPE de cuatro dígitos basado en el tipo de entidad de la geometría.
  • Defina el tipo SDO_SRID.
  • Escribir valores de coordenadas en el sistema de referencia de coordenadas adecuado.
  • Escribir coordenadas en el orden x, y, z y m, definiendo coordenadas de elevación y medida sólo si están presentes en el objeto SE_SHAPE fuente.
  • Si las coordenadas de elevaciones o medidas están presentes en el objeto SE_SHAPE fuente, almacenar todas las coordenadas con una coordenada de elevación o medida.
  • Establecer las coordenadas de elevaciones y medidas en NaN ("no es un número") si hay coordenadas específicas en la geometría que contienen valores de elevación o medidas no definidos.
  • Permitir medidas en cualquier tipo de geometría, no sólo cadenas de texto de líneas. No es necesario que las primeras y últimas coordenadas contengan valores de medida.
  • No restringir valores de medida en orden ascendente o descendente.
  • Escribir curvas circulares en el tipo SDO_GEOMETRY.
  • Convertir arcos no circulares (como un spline cúbico o Bézier) en cadenas de líneas de bordes rectos y almacenar la representación curvada en SE_ANNO_CAD_DATA.
  • Validar todas las entidades antes de escribirlas en la base de datos.
  • Utilizar SDO_POINT para almacenar un punto x,y,z o x,y de una sola parte en el objeto SDO_GEOMETRY. Para otros tipos de clases de entidad de punto, almacenar los vértices de punto en SDO_ORDINATE_ARRAY.
Nota:

ArcGIS no admite una colección de geometría heterogénea en el objeto SDO_GEOMETRY y ArcGIS no codifica elementos SDO_ETYPE 0 en el objeto SDO_GEOMETRY. Los elementos SDO_ETYPE 0 son elementos específicos de aplicación.

Se agrega una columna adicional a la tabla de negocios para almacenar propiedades de CAD y anotación.

El tipo SDO_GEOMETRY no puede almacenar todos los tipos de elementos geométricos que el almacenamiento de ArcGIS debe admitir. Cuando ArcGIS crea o registra una clase de entidad, agrega una columna llamada SE_ANNO_CAD_DATA a la tabla de negocios. Con el ejemplo de clase de entidad de la primera sección de este tema, la tabla de negocios contiene las siguientes columnas:

NombreTipo de datos¿Nulo?

NOMBRE

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

SE_ANNO_CAD_DATA

BLOB

Id. de objeto

NUMBER(38)

NOT NULL

Nota:

*Se usa NVARCHAR2(32) en lugar de VARCHAR2(32) si utiliza cadenas Unicode.

Cada vez que ArcGIS detecta que la fuente de datos tiene datos CAD, ArcGIS escribe una representación geométrica simple de los datos CAD en el valor SDO_GEOMETRY y escribe los datos CAD no modificados en el valor SE_ANNO_CAD_DATA. La propiedad SE_ANNO_CAD_DATA contiene datos de una gran cantidad de componentes de ArcGIS:

  • Objetos paramétricos como splines cúbicos y curvas Bézier de ArcMap
  • Parches de superficie de Extensión ArcGIS Spatial Analyst

Las consultas espaciales en la clase de entidad se realizan con las funciones de filtro de Oracle Spatial.

ArcGIS utiliza la función SDO_FILTER de Oracle Spatial para realizar la primera consulta espacial. ArcGIS realiza el filtrado secundario de SDO_GEOMETRY según la relación espacial solicitada por la aplicación.

Las aplicaciones también pueden incluir funciones de filtro primarias y secundarias de Oracle Spatial en la cláusula WHERE de SQL suministrada a ArcGIS. Con los filtros espaciales de la cláusula WHERE, las aplicaciones pueden distribuir la consulta espacial al servidor de base de datos y la aplicación misma.