ST_Geometry en PostgreSQL

El tipo de datos espaciales ST_Geometry se puede usar en las bases de datos de PostgreSQL que contengan una geodatabase y en las que no lo hagan. Los tipos de datos ST_Geometry permiten integrar los datos espaciales con otros tipos de datos de negocios para que la base de datos multiusuario tenga la ventaja de agregar un componente geográfico a los productos de datos y análisis. Mantener los datos espaciales junto con otros objetos de negocios también simplifica el acceso multiusuario, la administración y la seguridad de los datos, porque tendrá que administrar menos recursos de almacenamiento de datos.

Para usar el tipo ST_Geometry en geodatabases en PostgreSQL, copie la biblioteca st_geometry en la instalación de PostgreSQL antes de crear una geodatabase. Para obtener instrucciones, consulte Crear una geodatabase en PostgreSQL en Windows o Crear una geodatabase en PostgreSQL en Linux. Si utiliza una base de datos de PostgreSQL que no contiene una geodatabase, puede instalar el tipo ST_Geometry para utilizarlo en tablas espaciales que cree en la base de datos.

Use estos vínculos para saber más acerca del tipo ST_Geometry en PostgreSQL:

Cómo ST_Geometry almacena datos espaciales

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

NombreTipoDescripción

size

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

El número de puntos que definen la geometría; en el caso de las 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)

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

área

LFLOAT

El área de la geometría

len

LFLOAT

La longitud del perímetro de la geometría

shape

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

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

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.

Definición de esquema de ST_Geometry

El tipo espacial de las vistas, las tablas y las funciones PostgreSQL se almacena en el esquema de sde. La definición de esquema es la descripción de la tabla base para las tablas de sistema que se utilizan para definir y describir la columna y la tabla del tipo, el índice espacial y la información de las referencias espaciales.

Las tablas son sde_geometry_columns y sde_coordinate_systems. Las vistas son st_geometry_columns y st_spatial_references, y se basan en estas tablas.

Explorar:

Además de las tablas, las vistas y las funciones del sistema, se usan los siguientes objetos de bases de datos para mantener la información de ST_Geometry:

  • Un rol de inicio de sesión de sde
  • Un esquema sde en la base de datos
  • Un desencadenador ST_Geometry: sde_coord_sys_def_insert_tg
  • Dominios de ST_Geometry:
    • st_geomcollection
    • st_linestring
    • st_multilinestring
    • st_multipoint
    • st_multipolygon
    • st_point
    • st_polygon

Usar ArcGIS para crear clases de entidad con almacenamiento ST_Geometry

Usted elige qué tipo de almacenamiento se debe utilizar al crear clases de entidad a través de ArcGIS.

Cuando se crea en ArcGIS una clase de entidad que utiliza el almacenamiento ST_Geometry, se crea la tabla de negocios de la clase de entidad con una columna del tipo ST_Geometry en la que se almacenan los datos espaciales de la clase de entidad.

En una base de datos

De forma predeterminada, el tipo espacial ST_Geometry se utiliza para las clases de entidad que crea en una base de datos de PostgreSQL. Para usar un tipo espacial de PostGIS, debe especificar una palabra clave diferente al crear la clase de entidad mediante un cliente de ArcGIS. Consulte Crear una clase de entidad para obtener más información.

En una geodatabase

La información de almacenamiento de clase de entidad se controla a través de los ajustes de palabra clave de configuración de una tabla de sistema. Al crear una clase de entidad en ArcGIS, se especifica una clave de configuración. La palabra clave de configuración DEFAULTS tiene el parámetro GEOMETRY_STORAGE definido como ST_Geometry (si creó la geodatabase para usar ST_Geometry) o como PG_Geometry (si creó la geodatabase para utilizar tipos espaciales de PostGIS).

Si el parámetro DEFAULTS GEOMETRY_STORAGE se ha configurado para usar el tipo de datos de geometría o geografía de PostGIS pero los usuarios necesitan crear algunas clases de entidad utilizando el tipo de datos ST_Geometry, el administrador de la geodatabase debe crear una palabra clave de configuración para el almacenamiento ST_Geometry. Utilice la herramienta de geoprocesamiento Exportar palabras clave de configuración de geodatabase para exportar el contenido de la tabla de sistema a un archivo de texto, agregue una palabra clave que tenga GEOMETRY_STORAGE definido como ST_GEOMETRY y utilice la herramienta de geoprocesamiento Importar palabras clave de configuración de geodatabase para importar los cambios. Por ejemplo, puede exportar el contenido de la tabla de sistema a un archivo de texto y agregar 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

Para obtener más información, consulte Modificar las palabras clave de configuración.

Una vez agregada la palabra clave, cualquiera puede especificarla al crear una clase de entidad en ArcGIS.

Usar ArcGIS para acceder a las tablas de PostgreSQL con columnas ST_Geometry

Si utiliza SQL para crear una tabla con una columna de ST_Geometry, puede acceder a los datos a través de SQL, de aplicaciones de terceros personalizadas y de ArcGIS. Al conectarse a la base de datos desde ArcGIS, puede ver, realizar análisis o cargar datos a tablas que contengan una columna ST_Geometry. Para hacerlo, debe cumplir con los siguientes criterios:

  • La tabla debe tener una sola columna ST_Geometry.
  • La tabla no debe tener otras columnas de tipo definido por el usuario.
  • Si la tabla almacena varios tipos de geometría (puntos, líneas y polígonos), debe especificar qué tipos de geometría desea ver. En ArcGIS, los tipos se deben visualizar de uno en uno.
  • Todos los registros en la tabla deben utilizar la misma referencia espacial.

Si creó la tabla en una geodatabase por medio de SQL, puede registrarla con la geodatabase si desea utilizar la funcionalidad de geodatabases (tales como replicación, redes, clases de relación y topología) o desea editarla en ArcGIS. Para registrarla en la geodatabase, se deben cumplir los siguientes criterios:

  • La tabla debe ser propiedad del usuario que la está registrando.
  • Debe tener una sola columna ST_Geometry.
  • No debe tener otras columnas de un tipo definido por usuario.
  • Debe tener un único tipo de geometría (puntos, líneas o polígonos).
  • Todos los registros en la tabla deben utilizar la misma referencia espacial.
  • También debe tener una columna única de enteros que no sea NULA y se pueda utilizar como Id. de objeto.

Registrar la columna ST_Geometry

Si utiliza SQL para crear una tabla que contiene una columna de ST_Geometry, puede registrar la columna de utilizar una referencia espacial específica y dimensionalidad. De esa manera, al insertar registros a través SQL, no se pueden insertar accidentalmente registros que utilicen una referencia espacial diferente. Para ello, utilice la función sde.st_register_spatial_column. La sintaxis para utilizar esta función es la siguiente:

SELECT st_register_spatial_column('<database_name>', '<schema_name>', 
'<table_name>', '<spatial_column_name>', <srid>, <coordinate_dimension>)

El SRID que especifique debe existir en la tabla public.sde_spatial_references. La dimensión de coordenadas indica si los datos solo tienen coordenadas x, y (2), coordenadas x, y, z (3), coordenadas x, y, z, m (4), coordenadas x, y, m (5). Por defecto, si no se especifica una dimensión de coordenadas, los datos se registran como que tienen solo dimensiones x, y.

En el siguiente ejemplo, la columna de forma de la tabla de bloques del esquema sasha de la base de datos mycitydb está registrada para utilizar un SRID de 4236 y almacenar solo coordenadas tridimensionales:

SELECT st_register_spatial_column(
'mycitydb', 'sasha', 'blocks', 'shape', 4236, 3);

Este agrega un registro para la columna espacial a la tabla public.sde_geometry_columns en la geodatabase o base de datos.

Si la columna espacial está vacía y la registra con un SRID y una dimensionalidad particulares, puede anular el registro para cambiar el SRID o la dimensionalidad y, a continuación, volver a registrarla con valores diferentes. Puede dar de baja una columna espacial ejecutando la función st_unregister_spatial_column(). Esta función elimina la columna espacial de la tabla del sistema public.sde_geometry_columns, de manera que esa columna espacial ya no está asociada con ningún sistema de referencia espacial. La sintaxis para utilizar esta función es la siguiente:

SELECT st_unregister_spatial_column(
'<database_name>', '<schema_name>',
 '<table_name>', '<column_name>')

Puede verificar si se registró una columna espacial ejecutando la función st_isregistered_spatial_column. La sintaxis para utilizar esta función es la siguiente:

SELECT st_isregistered_spatial_column(
'<database_name>', '<schema_name>',
 '<table_name>', '<column_name>', <srid>)

Si la columna espacial está registrada con el SRID especificado, se devuelve 1; 0 se devuelve si no se ha registrado.

Para descubrir con qué dimensionalidad se registró la tabla, utilice la función st_get_coord_dimension. La sintaxis para la función st_get_coord_dimension es la siguiente:

SELECT st_get_coord_dimension(
'<schema_name>', '<table_name>', '<column_name>', <srid>)

En este ejemplo, st_get_coord_dimension devuelve xyz porque la tabla de bloques está registrada como tridimensional:

SELECT st_get_coord_dimension(
'sasha', 'blocks', 'shape', 4236);

st_get_coord_dimension
---------------------------
xyz