ST_Geometry en Oracle

El tipo de datos espaciales ST_Geometry de Esri se puede usar en las bases de datos de Oracle que contengan una geodatabase y en las que no lo hagan. 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.

El tipo de datos espaciales ST_Geometry de Esri es el tipo de almacenamiento de geometría predeterminado para las geodatabases de Oracle. También puede instalar el tipo ST_Geometry en bases de datos de Oracle con la herramienta de geoprocesamiento Crear tipo espacial.

Nota:

El tipo ST_Geometry no es compatible con transacciones XA de Oracle.

Para crear una geodatabase y utilizar el índice de dominio y el tipo ST_Geometry en el sistema de administración de bases de datos de Oracle, el usuario administrador de la geodatabase (sde) debe tener concedidos los privilegios del sistema adecuados para crear instancias de tipos, operadores y procedimientos almacenados. Consulte Privilegios para geodatabases de 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 instancias de tipos, operadores y procedimientos almacenados. Consulte Agregar el tipo ST_Geometry a una base de datos de Oracle para obtener más información.

Con el tipo espacial ST_Geometry de Esri en una geodatabase de Oracle o una base de datos de Oracle, puede acceder a los datos espaciales a través de funciones SQL que implementan el estándar SQL/MM Espacial de ISO y la especificación Simple Feature 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. El acceso de SQL a los datos permite utilizar otras aplicaciones para acceder a los datos que se crearon en Oracle.

Las bibliotecas ST_Geometry se deben instalar en el mismo servidor que la instancia de Oracle para obtener acceso a entidades espaciales con SQL. Asegúrese de que el sistema operativo de su servidor de Oracle sea compatible con las bibliotecas ST_Geometry.

Asimismo, debe configurar el extproc de Oracle para usar SQL y así acceder a tablas que contengan el tipo espacial ST_Geometry.

Vea elReferencia de las funciones SQL ST_Geometrypara obtener información sobre el uso de SQL con el tipo espacial ST_Geometry en Oracle.

Cómo ST_Geometry almacena datos espaciales

A continuación, se ofrece una descripción de ST_Geometry en Oracle:

NombreTipo

ENTITY

NUMBER(38)

NUMPTS

NUMBER(38)

MINX

FLOAT(64)

MINY

FLOAT(64)

MAXX

FLOAT(64)

MAXY

FLOAT(64)

MINZ

FLOAT(64)

MAXZ

FLOAT(64)

MINM

FLOAT(64)

MAXM

FLOAT(64)

ÁREA

FLOAT(64)

LEN

FLOAT(64)

SRID

NUMBER(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);

Las siguientes funciones del descriptor de acceso ST_Geometry aceptan 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_Length 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, y ST_MinZ devuelven la coordenada mínima deseada de una geometría.
  • ST_MaxM, ST_MaxX, ST_MaxY, y ST_MaxZ devuelven 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, sde.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 del constructor para ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point, y ST_Polygon es la misma. El nombre de constructor coincide con 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 (sde.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 (sde.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 (sde.ST_Point (10, 20, 5, 401, 1) );

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 las tablas de metadatos que se utilizan para definir y describir la columna y la tabla del tipo, el índice espacial (el índice de dominio ST_Spatial_Index) y la información de las 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 elimina de la base de datos, una de las instrucciones de eliminación que ejecuta 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. Cuando 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.

Explorar:

Además, se crean los siguientes objetos de bases de datos para mantener los metadatos de ST_Geometry:

  • Un usuario de base de datos SDE
  • Un espacio de tabla predeterminado para el usuario SDE
  • Funciones ST_Geometry
  • Vistas ST_Geometry
    • ALL_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOM_INDEX_V
  • Desencadenadores ST_Geometry
    • DB_EV_DROP_ST_METADATA
    • DB_EV_ALTER_ST_METADATA
    • DB_EV_RENAME_ST_METADATA
    • TG_ST_SPATIAL_REF_SRID
    • TG_ST_CREF_SYS
    • TG_GCOL_NAME
    • TG_ST_GEOMINDEX_NAME
  • Un paquete y un cuerpo de paquete SPX_UTIL
  • Un operador SDEXMLTOTEXT
  • Tipos ST_Geometry
    • BLOB_ARRAY_TAB
    • INT_ARRAY_TAB
    • FLT_ARRAY_TAB
    • BND_ROWID_TAB
    • 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.

Crear clases de entidad en Oracle con el almacenamiento ST_Geometry

En las bases de datos que tienen instalado el tipo de datos espaciales ST_Geometry, ST_Geometry se especifica como tipo de almacenamiento cuando se crea una clase de entidad.

En las geodatabases, el tipo de almacenamiento de geometría utilizado para una clase de entidad se determina con el ajuste GEOMETRY_STORAGE en la palabra clave de configuración que se especifica al crear la clase de entidad.

Establecer ST_Geometry para que sea el tipo de almacenamiento predeterminado para las nuevas clases de entidad de geodatabase

ST_Geometry es el tipo de almacenamiento predeterminado para clases de entidad en una nueva geodatabase de Oracle. Eso significa que el parámetro GEOMETRY_STORAGE de la palabra clave de configuración DEFAULTS se establece en ST_GEOMETRY.

Si creó la geodatabase antes de ArcGIS 9.3, ha estado actualizándola sin cambiar el valor del parámetro GEOMETRY_STORAGE de la palabra clave DEFAULTS y desea crear todas las nuevas clases de entidad utilizando el almacenamiento ST_Geometry de forma predeterminada, debe establecer el parámetro GEOMETRY_STORAGE de la palabra clave DEFAULTS en ST_GEOMETRY. Consulte Modificar las palabras clave de configuración para obtener instrucciones.

Nota:

ArcGIS Pro 3.2 y ArcGIS Enterprise 11.2 son las últimas versiones en admitir los siguientes valores de GEOMETRY_STORAGE:

  • SDEBINARY
  • SDELOB
  • WKB_GEOMETRY

Utilizar el almacenamiento ST_Geometry para algunas clases de entidad de la geodatabase

Las geodatabases de Oracle son compatibles con diferentes tipos de almacenamiento de geometría; dichos tipos diferentes se pueden utilizar todos juntos en la misma base de datos. Si bien únicamente puede haber un tipo de almacenamiento de geometría predeterminado, se pueden crear tablas individuales con diferentes tipos de almacenamiento de geometría.

Si desea que solo algunas clases de entidad usen el almacenamiento de tipo espacial ST_Geometry, puede establecer DEFAULTS GEOMETRY_STORAGE en un tipo de almacenamiento diferente y crear una palabra clave independiente para el almacenamiento ST_Geometry. Podría, por ejemplo, agregar una palabra clave de configuración similar a la siguiente a su geodatabase:

##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

Una vez que se haya agregado la palabra clave, puede usarla cuando cree clases de entidad con las que desee utilizar el almacenamiento de tipo de datos ST_Geometry. Por ejemplo, si tiene un pequeño subconjunto de datos a los que se debe acceder usando SQL, puede crear tan solo ese subconjunto de clases de entidad para usar el tipo de datos espaciales ST_Geometry para el almacenamiento de geometría.

Objetos de database creados para clases de entidad

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 de configuración utilizados para controlar el almacenamiento se enumeran en la siguiente tabla:

Objeto de databasePará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.

Establecer 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.