Almacenamiento de ST_Geometry en PostgreSQL

ArcSDE para PostgreSQL admite tipos de almacenamiento de geometría 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 Open Geospatial Consortium, Inc. (OGC). Estos tipos de almacenamiento comprenden geometría de ST_Geometry y de PostGIS. Extienden las capacidades de la base de datos de PostgreSQL proporcionando almacenamiento para objetos (puntos, líneas y polígonos) que representan entidades geográficas. Permiten integrar datos espaciales con otros tipos de datos de negocios, para que la base de datos de usuarios múltiples gane la ventaja de agregar un componente geográfico a los productos de datos y análisis. 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.

Por defecto, una geodatabase de ArcSDE en PostgreSQL utiliza el tipo espacial de ST_Geometry. 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 ver una explicación del tipo espacial ST_Geometry, consulte ¿Qué es el tipo de almacenamiento de ST_Geometry?.

Utilizando el tipo espacial de ST_Geometry en la geodatabase en PostgreSQL, puede acceder a los datos espaciales a través de las funciones de SQL que implementan el estándar espacial SQL/MM de ISO y la especificación de entidad simple 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 que pueda utilizar otras aplicaciones para acceder a los datos que se crearon en una geodatabase en PostgreSQL.

Este tema describe

Para obtener información sobre cómo trabajar con tablas que utilizan almacenamiento de ST_Geometry con SQL, consulte los siguientes temas:

Para obtener información sobre el tipo de geometría de PostGIS, consulte ¿Qué es el tipo de geometría de PostGIS?.

Cómo ST_Geometry almacena datos espaciales

A continuación se incluye la descripción de ST_Geometry en PostgreSQL:

Nombre

Tipo

Descripción

tamaño

LONG INTEGER

La longitud total de la estructura de ST_Geometry con la zona de influencia de forma

srid

LONG INTEGER

Contiene el identificador para la geometría que la vincula con el registro de la referencia espacial asociada (sistema de coordenadas) en la tabla sde_spatial_references.

numpts

LONG INTEGER

La cantidad de puntos que define la geometría, para geometrías multiparte, incluye los separadores entre cada parte, un punto para cada separador.

entidad

SHORT INTEGER

El tipo de entidad geométrica almacenada en la columna espacial (cadena de línea, cadena de líneas múltiples, multipunto, polígono múltiple, punto o polígono) cuyo valor es una máscara de bit derivada del procedimiento almacenado st_geom_util.

sqltype

SHORT INTEGER

El tipo de SQL para la forma, por ejemplo, POINT_TYPE, POINTM_TYPE, o MULTIPOLYGONZM_TYPE

minx

LFLOAT

Junto con miny, maxx y maxy, define el sobre espacial de la geometría

miny

LFLOAT

Junto con minx, maxx y maxy, define el sobre espacial de la geometría

maxx

LFLOAT

Junto con minx, miny y maxy, define el sobre espacial de la geometría

maxy

LFLOAT

Junto con minx, miny y maxx, define el sobre espacial de la geometría

minz

LFLOAT

El valor z mínimo

maxz

LFLOAT

El valor z máximo

minm

LFLOAT

El valor de medición mínimo

maxm

LFLOAT

El valor de medición máximo

area

LFLOAT

El área de la geometría

len

LFLOAT

La longitud del perímetro de la geometría

forma

BYTEA

La forma comprimida de ESRI

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). Al crear instancia de un objeto del tipo ST_Geometry, se invoca al método de constructor, como se muestra en el siguiente ejemplo:

CREATE TABLE hazardous_sites (name        varchar(128),                               location    st_geometry);

A continuación se incluyen las funciones de descriptor de acceso de ST_Geometry que toman un solo ST_Geometry como entrada y devuelven el valor de la propiedad requerida como un número:

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 del constructor para ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point, y ST_Polygon es la misma. El nombre del constructor es el mismo que el del tipo que construye.

Esquema de metadatos

El tipo espacial para las tablas de metadatos y tipos de PostgreSQL se almacenan en el esquema de 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/tabla de tipo, el índice espacial y la información de referencias espaciales.

Para obtener una descripción de cada tabla, consulte las tablas enumeradas en Tablas del sistema de una geodatabase almacenada en PostgreSQL. Las tablas son st_coordinate_systems, st_units_of_measure, sde_geometry_columns, sde_spatial_references y sde_coordinate_system.

Crear clases de entidad con almacenamiento de ST_Geometry utilizando ArcGIS

Cuando instala por primera vez ArcSDE para PostgreSQL, ST_Geometry es el tipo de almacenamiento de geometría predeterminado al crear clases de entidad a través de ArcGIS Desktop o del comando sdelayer. La configuración predeterminada para el almacenamiento de ArcSDE se define en la tabla sde_dbtune a través del parámetro GEOMETRY_STORAGE de la palabra clave de configuración DEFAULTS. Si no cambia el valor de parámetro GEOMETRY_STORAGE de la palabra clave DEFAULTS, todas las clases de entidad se crearán con el almacenamiento de ST_Geometry a menos que especifique una palabra clave de configuración distinta que tenga GEOMETRY_STORAGE configurado como PG_GEOMETRY al crear la clase de entidad.

Si decide cambiar el parámetro DEFAULTS GEOMETRY_STORAGE a PG_GEOMETRY, que indica los tipos espaciales que utiliza PostGIS, podría crear una nueva palabra clave de configuración para el almacenamiento de ST_Geometry. Por ejemplo, puede crear una palabra clave de configuración de la siguiente manera:

##ST_GEOMETRY GEOMETRY_STORAGE    "ST_GEOMETRY" UI_TEXT   "User-interface for ST_GEOMETRY keyword"  END

Utilice el comando sdedbtune para cambiar o agregar valores a la tabla sde_dbtune. Para obtener instrucciones, consulte Alterar el contenido de la tabla DBTUNE después que se crea.

El tipo de almacenamiento de PostGIS y el tipo de almacenamiento de ST_Geometry se pueden utilizar 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. Por lo tanto, si cambia el valor predeterminado GEOMETRY_STORAGE por PG_GEOMETRY, podrá seguir creando algunas clases de entidad con el tipo de almacenamiento de ST_GEOMETRY si especifica una palabra clave similar a la que aparece arriba.

Cuando crea una clase de entidad que utiliza GEOMETRY_STORAGE de ST_GEOMETRY, se crea la tabla de negocios de la clase de entidad con una columna del tipo ST_Geometry en la cual se almacenan los datos espaciales para la clase de entidad.

Usar tablas de PostgreSQL existentes con columnas de ST_Geometry

Si utiliza SQL para crear una tabla con una columna de ST_Geometry, puede registrar la tabla con ArcSDE, siempre y cuando se cumplan los siguientes criterios:

También debe tener una columna no NULA, única, de número entero que se pueda utilizar como un Id. de fila. Esta columna se puede agregar a la tabla antes de registrarla con ArcSDE, o se puede agregar durante el registro.

Además, la tabla debe tener un índice espacial. Se puede agregar con SQL antes o después de registrar la tabla con ArcSDE.

Cree una tabla con una columna de ST_Geometry

En el siguiente ejemplo, se creó una tabla, bloqueos, con una columna de ST_Geometry, de forma, utilizando SQL.

CREATE TABLE sasha.blocks  (objectid integer NOT NULL, block varchar(4), res smallint, shape st_geometry) WITHOUT OIDS;

Cree un índice espacial en la tabla

ArcSDE para PostgreSQL utiliza un índice de Jerarquía de búsqueda generalizada (GiST). Utilice una declaración de CREAR ÍNDICE con el método de acceso gist y la clase de operador de st_geometry_ops para crear un índice en la columna ST_Geometry de una tabla. Por ejemplo:

CREATE INDEX blockssp_idx ON blocks USING gist(zone st_geometry_ops);

Registre la tabla con ArcSDE

Una vez que existe la tabla con la columna de ST_Geometry y tiene un índice espacial, utilice el comando de registro sdelayer –o para registrar la tabla con ArcSDE. Cuando registra una tabla con ArcSDE, se agrega un registro para la tabla en las tablas del sistema sde_layers, sde_table_registry y sde_geometry_columns. También se agregan registros a la tabla de sistema sde_column_registry para cada columna en la tabla.

sdelayer –o register –l blocks,shape  –e a –C objectid,SDE –R 5 –t ST_GEOMETRY – s myserver –i sde:postgresql:myserver –D mycitydb –u sasha –p super1

Para las tablas que contienen una gran cantidad de registros, el proceso de registro puede llevar menos tiempo si registra la columna Id. de fila como mantenida por usuario.

sdelayer –o register –l blocks,shape  –e a –C objectid,USER –t ST_GEOMETRY –s myserver  –i sde:postgresql:myserver –D mycitydb –u sasha –p super1

Sin embargo, si registra una columna de identificador de entidad como mantenida por usuario y posteriormente registra la clase de entidad con la geodatabase, ArcGIS agregará una columna de identificador de entidad adicional, object_ID. ArcGIS mantendrá los valores de esta columna. Si la tabla contiene una gran cantidad de registros, agregar esta columna adicional object_ID puede llevar un tiempo.

Si registró la columna espacial y especificó un Id. de referencia espacial (SRID) para la tabla utilizando la función st_register_spatial_column, no necesita especificar un SRID con el comando sdelayer. Sin embargo, si todavía no asignó un SRID a la tabla, debe especificar un SRID válido con la opción –R, como se muestra en el siguiente ejemplo:

sdelayer –o register –l infestations,site  –e p+ –C siteid,SDE –s myserver –t ST_GEOMETRY –R 3  –i sde:postgresql:myserver –D meddb –u blorca –p it.s.me

Como se mencionó antes en este tema, si la referencia espacial que necesita no existe en la tabla sde_spatial_references, cree una clase de entidad de plantilla en ArcCatalog que utilice la referencia espacial que desea, después consulte la tabla sde_spatial_references para ver qué SRID se le asignó. Ese es el número que utiliza cuando registra otras tablas espaciales en el mismo sistema de referencia de coordenadas.

Si no registró la columna espacial con un SRID utilizando la función st_register_spatial_column, y no especificó una con la opción –R al registrar la tabla con ArcSDE, se utilizará el SRID del primer registro. Si no registró la columna espacial con un SRID utilizando la función st_register_spatial_column y la tabla está vacía, se utilizará un SRID de 0. El SRID de 0 existe con fines de documentación y muestra únicamente y no debe utilizarlo para datos de producción. Las especificaciones para este SRID son las siguientes:

falsex

- 400

falsey

- 400

xyunits

1000000000

falsez

- 100000

zunits

10000

falsem

- 100000

munits

10000

xycluster_tol

0.000000008983153

zcluster_tol

.001

mcluster_tol

.001

srtext

GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]], PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]

cs_id

4326

organización

EPSG

Para obtener una sintaxis y una descripción completas del comando sdelayer, consulte la Referencia sobre el comando de administración de ArcSDE que se proporciona con ArcGIS Server Enterprise.

El comando sdelayer solo agrega la tabla a las tablas del sistema de ArcSDE. Para poder utilizar las funcionalidades de la geodatabase de ArcGIS Desktop, como topología, versionado y redes, también debe registrar la tabla con la geodatabase. Consulte Registrar una tabla con la geodatabase y Registrar una tabla de terceros que contenga una columna espacial para obtener más información.

Consejos

  • Puede registrar la columna espacial en una tabla que tiene una columna de ST_Geometry ejecutando la función sde.st_register_spatial_column. Esto asigna el SRID para la tabla y, por lo tanto, evita que los usuarios especifiquen otros SRID cuando introducen datos a través de SQL.
    SELECT st_register_spatial_column( '<database_name>',  '<schema_name>', '<table_name>', '<spatial_column_name>', <srid>)
    Para registrar la columna de forma de la tabla de bloqueos y asignar un SRID, ejecute la siguiente declaración:
    SELECT st_register_spatial_column( 'mycitydb', 'sasha', 'blocks', 'shape', 4)
    De este modo se agrega la columna espacial a la tabla sde_geometry_columns en la geodatabase. El SRID que especifica (4 en el ejemplo anterior) debe existir en la tabla sde_spatial_references. Si la referencia espacial que desea no se encuentra en la tabla sde_spatial_references, puede abrir ArcCatalog, conectarse a la geodatabase y crear una clase de entidad nueva que utilice el sistema de referencia espacial que desea y el almacenamiento de ST_Geometry. Como resultado, la tabla sde_spatial_references se completa con la referencia espacial que necesita, y ArcCatalog calcula las unidades y los desplazamientos de x, y, z, y m y la extensión de capa por usted. También es posible utilizar SQL para introducir una referencia espacial, pero debe asegurarse de calcular las unidades y los desplazamientos correctos de x, y, z y m usted mismo. Tenga en cuenta, sin embargo, que para registrar la tabla con ArcSDE utilizando el comando sdelayer, debe anular el registro de la columna ST_Geometry. Por ejemplo, puede crear una tabla, en donde otros usuarios realizarán inserciones mediante SQL. Para aplicar el uso de un único SRID, puede registrar la columna de ST_Geometry con el SRID que desee. Después, cuando decida registrar la tabla con ArcSDE, ejecute la función st_unregister_spatial_column. (Lea el siguiente consejo).
  • Puede anular el registro de una columna espacial ejecutando la función st_unregister_spatial_column(). Con esta función se anula el registro de la columna espacial quitando la columna espacial de la tabla del sistema sde_geometry_columns, de manera que la columna espacial ya no está asociada con ningún sistema de referencia espacial.
    SELECT st_unregister_spatial_column( '<database_name>', '<schema_name>',  '<table_name>', '<column_name>')
    Puede hacer esto antes de registrar la tabla con ArcSDE, o puede hacerlo si desea registrar una columna espacial vacía con un SRID distinto; podría anular el registro, y después volver a registrarla con un SRID distinto utilizando la función st_register_spatial_column.
  • Puede verificar si se registró una columna espacial ejecutando la función st_isregistered_spatial_column.
    SELECT st_isregistered_spatial_column( '<database_name>', '<schema_name>',  '<table_name>', '<column_name>', <srid>) 
    Se obtiene el número 1 si se registró la columna espacial y 0 si no se registró.

Registros en la tabla sde_coordinate_systems

La tabla sde_coordinate_systems en el esquema de SDE almacena el Id. y la descripción de los sistemas de coordenadas que utiliza la base de datos. Se completa con los sistemas de coordenadas cuando se crea la geodatabase.

Puede utilizar los sistemas de coordenadas en esta tabla para las clases de entidad que crea a través de ArcGIS Desktop o SQL.

Además de asignar un sistema de coordenadas, debe crear una referencia espacial. ArcGIS Desktop hace esto como parte de la creación de la clase de entidad. Para crear una referencia espacial para las tablas utilizando SQL, consulte Crear índices espaciales en tablas con una columna ST_Geometry.

Dónde encontrar documentación de PostgreSQL

Puede encontrar documentación de PostgreSQL en el sitio Web de PostgreSQL en http://www.postgresql.org/docs/. Esta documentación incluye información sobre la instalación y administración de PostgreSQL, la programación y los comandos de SQL, y tutoriales acerca del uso de PostgreSQL.


3/6/2012