Almacenamiento ST_Geometry en Oracle
El tipo de almacenamiento Esri ST_Geometry está disponible para las geodatabases en Oracle y bases de datos de Oracle que proporcionan acceso a la geodatabase a través de un lenguaje estructurado de consultas (SQL) de acuerdo con la Organización internacional para la estandarización (ISO) y el Consorcio geoespacial abierto, Inc. (OGC). Este almacenamiento brinda almacenamiento para objetos (puntos, líneas y polígonos) que representan entidades geográficas, lo que permite extender las capacidades de la base de datos de Oracle. Se diseñó para utilizar de modo eficiente los recursos de base de datos de Oracle, para que sea compatible con entidades de base de datos de Oracle como la replicación y la partición, y para brindar un acceso rápido a datos espaciales. Permite integrar datos espaciales con otros tipos de datos de negocios, de modo que la base de datos multiusuario obtiene la ventaja de agregar un componente geográfico a los análisis y productos de datos. Mantener sus datos espaciales junto con otros objetos comerciales también simplifica el acceso multiusuario, la administración y seguridad de sus datos, porque tendrá que administrar menos recursos de almacenamiento de datos.
Con ArcGIS 9.3 y versiones más nuevas, las nuevas geodatabases para Oracle utilizan el tipo espacial Esri ST_Geometry para el almacenamiento de geometría de forma predeterminada. Implementa la especificación SQL 3 de los tipos de datos definidos por usuario (UDT), lo que le permite crear columnas capaces de almacenar datos espaciales como la ubicación de un hito, una calle o una parcela de tierra. Para obtener una explicación del tipo espacial ST_Geometry, consulte la sección "Cómo ST_Geometry almacena datos espaciales" de este tema.
Para crear una geodatabase y utilizar el índice de dominio y el tipo ST_Geometry en el DBMS de Oracle, el usuario administrador de la geodatabase (sde) debe tener concedidos los privilegios del sistema adecuados para crear instancia de tipos, operadores y procedimientos almacenados. Consulte Permisos de usuario para geodatabases en Oracle para obtener información sobre los permisos necesarios. Para instalar el tipo ST_Geometry en una base de datos de Oracle, también debe haber un usuario sde presente y debe tener concedidos los privilegios para crear instancia de tipos, operadores y procedimientos almacenados. Para más información, vea Agregar el tipo ST_Geometry para una base de datos de Oracle.
Con el tipo espacial Esri ST_Geometry en una geodatabase en Oracle o una base de datos de Oracle, puede obtener acceso a los datos espaciales a través de funciones SQL que implementan el estándar SQL/MM Spatial de ISO y a Simple Feature Specification del OGC. Puede utilizar comandos SQL para almacenar, recuperar y manipular entidades espaciales al igual que cualquier otro tipo de datos. Puede utilizar una lista larga de funciones basadas en estándares con comandos SQL y procedimientos almacenados para recuperar y analizar datos espaciales. Al tener acceso SQL a los datos, es posible utilizar otras aplicaciones para obtener acceso a datos creados en una geodatabase de ArcSDE para Oracle.
El tipo ST_Geometry no es compatible con transacciones XA de Oracle.
Para utilizar SQL para obtener acceso a una geodatabase en Oracle que utiliza el tipo espacial, es necesario configurar Oracle Listener. Consulte Configurar Oracle Listener para utilizar SQL para obtener más detalles.
Con ArcGIS 9.3 y versiones más nuevas, las nuevas geodatabases para Oracle requieren que todas las funciones y los operadores ST estén calificados con el nombre de esquema sde. Por ejemplo, si se ejecuta una consulta que utiliza el operador ST_Union, el operador se debe escribir como "sde.ST_Union". Las geodatabases actualizadas de ArcSDE 9.2 o anteriores no requieren esto.
Para obtener acceso a entidades espaciales con SQL, las bibliotecas ST_Geometry deben instalarse en el mismo servidor que el sistema de administración de bases de datos de Oracle (DBMS). Si desea ejecutar el DBMS de Oracle en un servidor separado de ArcSDE, asegúrese de que el sistema operativo del servidor de Oracle también sea compatible con ArcSDE y que las bibliotecas ST_Geometry estén instaladas allí.
Cómo ST_Geometry almacena datos espaciales
A continuación hay una descripción de Oracle de ST_Geometry:
Nombre |
Tipo |
---|---|
ENTITY |
NÚMERO(38) |
NUMPTS |
NÚMERO(38) |
MINX |
FLOTANTE(64) |
MINY |
FLOTANTE(64) |
MAXX |
FLOTANTE(64) |
MAXY |
FLOTANTE(64) |
MINZ |
FLOTANTE(64) |
MAXZ |
FLOTANTE(64) |
MINM |
FLOTANTE(64) |
MAXM |
FLOTANTE(64) |
ÁREA |
FLOTANTE(64) |
LEN |
FLOTANTE(64) |
SRID |
NÚMERO(38) |
POINTS |
BLOB |
Los atributos del tipo espacial representan la siguiente información:
- Entity: el tipo de entidad geométrica almacenada en la columna espacial (cadena de texto de líneas, cadena de texto multilínea, multipunto, multipolígono, punto o polígono), el valor del cual es una máscara de bit derivada del procedimiento almacenado st_geom_util.
- Numpts: el número de puntos que definen la geometría; para las geometrías multiparte, esto incluye los separadores entre cada parte, un punto para cada separador.
- Minx, miny, maxx, maxy: el sobre espacial de la geometría
- Area: el área de la geometría
- Len: la longitud del perímetro de la geometría
- SRID: contiene el identificador de la geometría que la vincula al registro de referencias espaciales asociadas (sistema de coordenadas) en la tabla ST_Spatial_References.
- Points: contiene la transmisión de bytes de las coordenadas de punto que definen la geometría
Al igual que otros tipos de objeto, el tipo de datos ST_Geometry contiene un método de constructor y funciones. Un método de constructor es una función que devuelve una nueva instancia (objeto) del tipo de datos y establece los valores de sus atributos.
El nombre del constructor es el mismo que el tipo (ST_Geometry). Cuando crea una instancia de un objeto del tipo ST_Geometry, invoca el método de constructor. Por ejemplo:
CREATE TABLE hazardous_sites (name varchar2(128),
location st_geometry);
A continuación se presentan las funciones del descriptor de acceso ST_Geometry que toman un único ST_Geometry como entrada y devuelven el valor de propiedad solicitado como un número.
- La función miembro ST_Area devuelve el área de una geometría.
- ST_Len devuelve la longitud de una geometría.
- ST_Entity devuelve un número que contiene una máscara de bit que describe el tipo de entidad.
- ST_NumPoints devuelve la cantidad de puntos (vértices) que definen una geometría.
- ST_MinM, ST_MinX, ST_MinY, ST_MinZ devuelve la coordenada mínima deseada de una geometría.
- ST_MaxM, ST_MaxX, ST_MaxY, ST_MaxZ devuelve la coordenada máxima deseada de una geometría.
- ST_SRID devuelve el identificador de referencia espacial para una geometría.
- Get_release es una función miembro estática utilizada internamente para la administración de tipo espacial (es decir, actualizaciones y parches).
Por ejemplo, la siguiente consulta devuelve el nombre y área de los estados individuales en los Estados Unidos.
SELECT name, st_area(geometry)
FROM us_states
ORDER BY name;
ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point y ST_Polygon son todos subtipos (o subclases) de ST_Geometry. ST_Geometry y los subtipos comparten atributos y funciones comunes. La definición de constructor para ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point y ST_Polygon es la misma. El nombre de constructor es el mismo que el tipo que construye.
Dado que ST_Point es un objeto finito (un valor de punto único), también se puede crear con uno de los siguientes métodos.
Este método utiliza puntos de coordenadas y un SRID.
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
SRID NUMBER IN
SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 1) );
Este método permite al usuario especificar puntos de coordenadas y un valor de elevación para cada punto.
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
PT_Z NUMBER IN
SRID NUMBER IN
SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 1) );
Este último método para ST_Point permite además que se especifique un valor de medida como parte del objeto de punto creado.
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
PT_Z NUMBER IN
MEASURE NUMBER IN
SRID NUMBER IN
SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 401, 1) );
SP_GRID_INFO
SP_Grid_Info se utiliza como el tipo de datos para el campo GRID en la tabla ST_Geometry_Index. Contiene la información de nivel de cuadrícula para índices espaciales.
SQL> desc sp_grid_info
Name Null? Type
GRID1 NUMBER
GRID2 NUMBER
GRID3 NUMBER
Esquema de metadatos
El tipo ST_Geometry para Oracle y las tablas de metadatos pertenecen al esquema SDE. La definición de esquema es la descripción de la tabla base para tablas de metadatos utilizadas para definir y describir la columna/tabla de tipo, el índice espacial (el índice de dominio ST_Spatial_Index) y la información de referencias espaciales. Todas las tablas de metadatos, paquetes y definiciones de tipo de índice de dominio y de tipo se crean en el esquema SDE.
Dado que las definiciones para ST_Geometry pertenecen al usuario SDE, nunca elimine el usuario SDE de la base de datos si tiene tablas en la base de datos que contienen columnas ST_Geometry. Si lo hace, puede hacer que dichas tablas no estén accesibles.
Como se menciona en la Guía de desarrolladores de aplicaciones de Oracle, cuando un usuario se descarta de una base de datos, una de las instrucciones de eliminación es DROP TYPE con la opción FORCE. Esta instrucción quita todos los tipos que pertenecen a ese usuario, de modo que el usuario se puede quitar de la base de datos. DROP TYPE FORCE hace que se descarten los tipos incluso si tienen tablas o tipos dependientes asociados a estos. Una vez que eso ocurre, las tablas asociadas se marcan como no válidas, lo que hace que no se pueda obtener acceso a los datos en las tablas.
Consulte Tablas del sistema de una geodatabase almacenadas en Oracle para obtener una descripción de las siguientes tablas de metadatos ST_Geometry:
- ST_COORDINATE_SYSTEMS
- ST_GEOMETRY_COLUMNS
- ST_GEOMETRY_INDEX
- ST_SPATIAL_REFERENCES
Crear clases de entidad en Oracle con el almacenamiento ST_Geometry
El tipo de almacenamiento de geometría utilizado para una clase de entidad se determina con la configuración GEOMETRY_STORAGE en la palabra clave de configuración que especifica al crear la clase de entidad.
Configurar ST_Geometry para que sea el tipo de almacenamiento predeterminado para nuevas clases de entidad
A partir de ArcGIS 9.3, el ST_Geometry es el tipo de almacenamiento predeterminado para clases de entidad en una geodatabase en Oracle. Eso significa que el parámetro GEOMETRY_STORAGE de la palabra clave DEFAULTS en la tabla DBTUNE se establece en ST_GEOMETRY.
Si desea almacenar la mayoría de los datos de clase de entidad con el formato ST_Geometry, deje el parámetro GEOMETRY_STORAGE de la palabra clave DEFAULTS establecido en ST_GEOMETRY.
Si inicialmente creó la geodatabase antes de ArcGIS 9.3 y desea crear todas las nuevas clases de entidad utilizando el almacenamiento ST_Geometry por defecto, debe modificar el parámetro GEOMETRY_STORAGE en la palabra clave DEFAULTS en la tabla DBTUNE. Establezca el parámetro GEOMETRY_STORAGE en ST_GEOMETRY.
Utilice el comando de administración sdedbtune para modificar la configuración DBTUNE. Consulte Alterar el contenido de la tabla DBTUNE después que se crea y la Referencia de comandos de administración de ArcSDE proporcionada con el servidor de aplicaciones de ArcSDE para obtener detalles sobre el uso del comando sdedbtune.
Utilizar el almacenamiento ST_Geometry para algunas clases de entidad
ArcSDE para Oracle es compartible con una cantidad de esquemas de almacenamiento de geometría diferentes; estos esquemas diferentes se pueden utilizar todos juntos en la misma base de datos. Mientras que sólo puede haber un esquema de geometría predeterminado, las tablas individuales se pueden crear mediante diferentes esquemas de geometría.
Si desea almacenar sólo algunas clases de entidad con el almacenamiento de tipo espacial, puede establecer DEFAULTS GEOMETRY_STORAGE en un tipo de almacenamiento diferente y después especificar la palabra clave ST_GEOMETRY al crear algunas de las clases de entidad. Si hace esto, esa clase de entidad en particular se crea con una columna ST_Geometry. En el archivo dbtune, la palabra clave ST_GEOMETRY aparece de la siguiente forma:
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS ( # TABLESPACE <tablespace_name> ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
¿Qué objetos de base de datos se crean y dónde se almacenan?
Hay tres objetos de base de datos creados cuando utiliza ArcGIS para crear una clase de entidad que utiliza el almacenamiento ST_Geometry. Estos objetos y los parámetros DBTUNE utilizados para controlar el almacenamiento se enumeran en la siguiente tabla:
Objetos de base de datos | Parámetros de almacenamiento |
---|---|
Una tabla con una columna ST_Geometry | El parámetro B_STORAGE define el almacenamiento para la tabla. El parámetro ST_GEOM_LOB_STORAGE define el almacenamiento para los segmentos LOB en la tabla. |
Un índice espacial | El parámetro S_STORAGE define el almacenamiento de índice espacial. |
Un índice en la columna ObjectID | El parámetro B_INDEX_ROWID define el almacenamiento para este índice. |
Para obtener más información sobre los parámetros de configuración, consulte Parámetros de configuración DBTUNE de Oracle y la siguiente sección sobre el almacenamiento de LOB.
Configurar almacenamiento para el segmento LOB
Debe modificar el parámetro ST_GEOM_LOB_STORAGE en la lista de palabras clave DEFAULTS. Al agregarse a la palabra clave DEFAULTS, sin embargo, el nombre del segmento LOB no se debe incluir en la definición de este parámetro. Si se incluye, a menos que modifique el valor del nombre, al crear una segunda entidad se produce una falla debido a que cada nombre de segmento LOB debe ser único para un esquema determinado. El siguiente ejemplo de parámetro ST_GEOM_LOB_STORAGE no contiene ningún nombre de objeto y por lo tanto evita colisiones de nombre dentro del mismo esquema:
ST_GEOM_LOB_STORAGE " STORE AS ( ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"
Los ejemplos de valores válidos para el parámetro ST_GEOM_LOB_STORAGE incluyen los siguientes:
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS (TABLESPACE TERRA_NDX ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS (ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
Como se mencionó anteriormente en esta sección, si define los nombres de LOB y de espacio de tabla de índice de LOB, debe modificar estos valores antes de la creación de cada clase de entidad. Si no lo hace, las creaciones de clases de entidad subsiguientes fallan debido a que cada nombre de segmento debe ser único.