¿Qué ocurre cuando se crean clases de entidad con el almacenamiento de geometría SDO_GEOMETRY?
Al crear una clase de entidad con el almacenamiento SDO_GEOMETRY, ocurre lo siguiente:
Se agrega una columna SDO_GEOMETRY a la tabla de negocios de la clase de entidad.
ArcSDE crea una clase de entidad al agregar una columna de geometría a la tabla de negocios especificada. Cuando el parámetro GEOMETRY_STORAGE se establece en SDO_GEOMETRY, ArcSDE agrega una columna SDO_GEOMETRY a la tabla de negocios.
En el siguiente ejemplo, la tabla de negocios tiene propiedades de nombre y población. Después de agregar una columna de geometría, también tiene una columna SDO_GEOMETRY denominada Bordes. Si es necesario, se agrega y completa una columna de identificador de entidad único (OBJECTID en este ejemplo).
Nombre |
Tipo de datos |
¿Nulo? |
---|---|---|
NOMBRE |
VARCHAR2(32)* |
|
POPULATION |
NUMBER(11) |
|
BORDERS |
MDSYS.SDO_GEOMETRY |
|
OBJECTID |
NUMBER(38) |
NOT NULL |
*Se usa NVARCHAR2(32) en lugar de VARCHAR2(32) si utiliza cadenas Unicode.
Se puede agregar una columna de geometría a la tabla de negocios mediante ArcCatalog, la utilidad de administración sdelayer o las API de ArcSDE C y Java.
Se crea un índice espacial en la columna SDO_GEOMETRY.
Cuando se agrega una columna SDO_GEOMETRY a una tabla de negocios, en general se crea un índice espacial en esa columna de geometría. Por defecto, ArcSDE crea un índice de árbol R en una columna SDO_GEOMETRY.
De modo alternativo, ArcSDE puede crear clases de entidad sin ningún índice espacial; sin embargo, las consultas espaciales no se pueden admitir hasta tanto se cree un índice espacial. La función SDO_FILTER de Oracle, utilizada por ArcSDE, requiere la presencia de un índice espacial.
Puede crear un índice espacial de diversas formas: en ArcCatalog, con la utilidad de administración sdelayer, con Oracle Spatial Index Advisor, con SQL o programáticamente con las API de ArcSDE C y Java.
ArcSDE descarta y vuelve a crear automáticamente índices de Oracle Spatial creados por ArcSDE 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 ArcSDE cambia la clase de entidad al modo LOAD_ONLY_IO.
Se agrega un registro a la vista de metadatos de Oracle Spatial.
Cuando ArcSDE agrega una columna SDO_GEOMETRY a una tabla de negocios, también 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.
Si se utiliza una aplicación de terceros o SQL para crear la tabla, la columna espacial y los metadatos, y la tabla se registra después con ArcSDE, ArcSDE no elimina los metadatos cuando se elimina el registro de la tabla con ArcSDE. Sin embargo, ArcSDE siempre elimina los metadatos cuando se elimina la tabla, como lo hace con el comando sdetable -o delete.
Se especifica una dimensión de coordenadas.
Puede crear una geometría de ArcSDE como 2D (x,y), 2D con medidas, 3D (x,y,z) o 3D con medidas. Al crear nuevas clases de entidad o al agregar una columna SDO_GEOMETRY a una tabla existente, ArcSDE 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.
El SRID de cada valor SDO_GEOMETRY se establece de acuerdo con la referencia de coordenada.
Oracle Spatial proporciona referencias de coordenadas predefinidas en la tabla MDSYS.CS_SRS. Al utilizar ArcSDE para crear una nueva clase de entidad para configurar un SRID específico para la columna SDO_GEOMETRY, identifique la descripción de referencia de coordenadas de Oracle Spatial adecuada; a continuación, configure el parámetro de almacenamiento SDO_SRID DBTUNE de la clase de entidad en ese valor.
Por ejemplo:
#MY_SDO_KEYWORD GEOMETRY_STORAGE SDO_GEOMETRY SDO_SRID 8307 UI_TEXT "MY_SDO_KEYWORD" END
Si el parámetro de almacenamiento SDO_SRID no se configura, ArcSDE establece el SRID de cada valor SDO_GEOMETRY en NULL, así como también el SRID en el registro de metadatos correspondiente.
ArcSDE no requiere el SRID de Oracle Spatial. ArcSDE mantiene la información de referencia de coordenadas para cada clase de entidad en la tabla SPATIAL_REFERENCES propia independientemente de Oracle Spatial. Consulte la Referencia y guía del usuario de Oracle Spatial para obtener información sobre las referencias de coordenadas admitidas.
Se completa la columna SDO_GEOMETRY.
Al almacenar geometría en la base de datos, ArcSDE completa el valor SDO_GEOMETRY de un objeto de API de ArcSDE 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, ArcSDE sigue un conjunto de reglas al almacenar datos de ArcSDE en tablas de Oracle Spatial:
- Crear SDO_GTYPE de cuatro dígitos basado en el tipo de entidad de la geometría.
- Establecer el SDO_SRID en NULL si no se suministra ninguna referencia de coordenadas de Oracle Spatial en un parámetro DBTUNE.
- 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 cuando la clase de entidad se registra con la máscara de entidad CAD (c); de lo contrario, convertir las curvas a cadenas de texto de líneas de bordes rectos densificadas.
- Convertir arcos no circulares (como un spline cúbico o Bézier) en cadenas de texto de líneas de bordes rectos. Cuando se registra la clase de entidad con la máscara de entidad CAD (C), almacenar también la representación curvada en SE_ANNO_CAD_DATA.
- Validar todas las entidades antes de escribirlas en la base de datos. Las reglas de validación se describen en la ayuda del desarrollador de ArcSDE.
- 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.
ArcSDE no admite una colección de geometría heterogénea en el objeto SDO_GEOMETRY y ArcSDE 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 si se almacenan propiedades de CAD y anotación.
El tipo SDO_GEOMETRY no puede almacenar todos los tipos de elementos geométricos que el almacenamiento de ArcSDE debe admitir. Cuando se requiere el almacenamiento de estos elementos (como se determina en los marcadores de tipo de geometría especificados cuando se crea la clase de entidad), ArcSDE agrega una columna denominada SE_ANNO_CAD_DATA a la tabla de negocios. Con el ejemplo de clase de entidad de la primera sección en este tema, la tabla de negocios contiene lo siguiente:
Nombre |
Tipo de datos |
¿Nulo? |
---|---|---|
NOMBRE |
VARCHAR2(32)* |
|
POPULATION |
NUMBER(11) |
|
BORDERS |
MDSYS.SDO_GEOMETRY |
|
SE_ANNO_CAD_DATA |
BLOB |
|
OBJECTID |
NUMBER(38) |
NOT NULL |
*Se usa NVARCHAR2(32) en lugar de VARCHAR2(32) si utiliza cadenas Unicode.
Cada vez que ArcSDE detecta que la fuente de datos tiene datos CAD, ArcSDE 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. Si la fuente de datos no tiene datos CAD, ArcSDE establece el valor SE_ANNO_CAD_DATA en NULL. La propiedad SE_ANNO_CAD_DATA contiene datos de una gran cantidad de componentes de ArcGIS:
- Datos de AutoCAD o MicroStation del cliente CAD de ArcSDE
- Objetos paramétricos como splines cúbicos y curvas Bézier de ArcMap
- Parches de superficie de ArcMap Spatial Analyst
- Anotación de ArcInfo Workstation (antes ArcGIS 8)
Las consultas espaciales en la clase de entidad se realizan con las funciones de filtro de Oracle Spatial.
ArcSDE utiliza la función SDO_FILTER de Oracle Spatial para realizar la primera consulta espacial. ArcSDE 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 ArcSDE. Con los filtros espaciales en la cláusula WHERE, las aplicaciones pueden distribuir la consulta espacial al servidor de base de datos, el servidor de aplicación de ArcSDE y la aplicación misma.