Almacenamiento de ST_Geometry en PostgreSQL
Puede utilizar dos tipos de almacenaje espacial diferentes en PostgreSQL: Geometría de PostGIS y de ST_Geometry. Estos tipos de datos le permiten integrar datos espaciales con otros tipos de datos de negocios, de modo que la base de datos de multiusuario obtiene 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.
De forma predeterminada, una geodatabase en PostgreSQL utiliza el tipo espacial de ST_Geometry. También puede instalar el tipo ST_Geometry en su base de datos de PostgreSQL. Consulte Agregar tipo de ST_Geometry para una base de datos de PostgreSQL para obtener información sobre cómo instalar el tipo ST_Geometry en una base de datos de PostgreSQL.
Para ayudarle a entender cómo se utiliza el tipo ST_Geometry en PostgreSQL, este tema describe
- La arquitectura de tipo espacial en PostgreSQL
- Cómo almacenar clases de entidad con el almacenamiento de ST_Geometry
- Usar tablas de PostgreSQL existentes con columnas de ST_Geometry
- Cómo registrar una columna ST_Geometry para restringir la referencia espacial que se puede utilizar
- Dónde encontrar documentación relacionada
Para obtener información sobre cómo trabajar con tablas que utilizan almacenamiento de ST_Geometry con SQL, consulte los siguientes temas:
- Crear tablas con una columna de ST_Geometry
- Insertar entidades a una tabla con una columna de ST_Geometry
- Consultar tablas con una columna de ST_Geometry
- Actualizar valores en una columna espacial de ST_Geometry con SQL
- Usar vistas espaciales en tablas con una columna de ST_Geometry
Para obtener información sobre el tipo de geometría de PostGIS, consulte ¿Cuál 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) |
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 |
forma |
BYTEA |
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 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 auxiliares 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.
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
Selecciona qué tipo de almacenamiento utilizar al crear clases de entidades a través de ArcGIS for Desktop.
Cuando crea una clase de entidad en ArcGIS 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 cual se almacenan los datos espaciales para la clase de entidad.
Si se conecta a una base de datos, elija ST_Geometry al crear una tabla espacial si ese es el tipo de columna espacial que desea utilizar. Para obtener información sobre la creación de tablas en una base de datos, consulte Creación de una tabla de base de datos espacial en ArcGIS.
Si se conecta a una geodatabase, especifique el almacenaje al elegir la palabra clave de configuración a utilizar. Las configuraciones de almacenaje predeterminadas se definen en la tabla sde_dbtune a través del parámetro GEOMETRY_STORAGE de la palabra clave de configuración DEFAULTS. Si no modifica 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 al crear la clase de entidad.
Si cambia el parámetro DEFAULTS GEOMETRY_STORAGE para utilizar la geometría de PostGIS, todavía podría crear clases de entidad que utilizan almacenaje de ST_Geometry. Para hacerlo, cree una nueva palabra clave de configuración para el almacenamiento de ST_Geometry en la tabla sde_dbtune. 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
Luego, al crear la clase de entidad en ArcGIS, elija esa palabra clave y su nueva clase de entidad utilizará el almacenamiento de ST_Geometry.
Utilice el comando sdedbtune para cambiar o agregar valores a la tabla sde_dbtune. Consulte Alterar el contenido de la tabla DBTUNE para obtener instrucciones.
Obtener acceso a las tablas de PostgreSQL con columnas de 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 o aplicaciones de tercera parte personalizadas y puede obtener acceso a la tabla en 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: solo se puede ver un tipo en ArcGIS a la vez.
- 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, puede registrar la tabla con la geodatabase proporcionada si se cumplen 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 NULL y se pueda utilizar como adecuada como Id. de fila.
Registro de columnas espaciales
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, los usuarios que agregan registros a través SQL no pueden agregar registros accidentalmente que utilicen una referencia espacial diferente o con diferentes dimensiones. 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 en el esquema sasha de mycitydb de la base de datos 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 registrar con un SRID particular y dimensionalidad, puede anular el registro para cambiar el SRID o la dimensionalidad y, a continuación, vuelva a registrarla con valores diferentes. Puede anular el registro de 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ás registrada con el SRID especificado, se devuelve 1; 0 se devuelve si no se registró.
Para descubrir con qué dimensionalidad se registró la tabla, utilice la función st_get_coord_dimension. La sintaxis de la función st_get_coord_dimension es de la siguiente manera:
SELECT st_get_coord_dimension( '<schema_name>', '<table_name>', '<column_name>', <srid>)
En este ejemplo, st_get_coord_dimension devolverá xyz ya que la tabla de bloques se registra como tridimensional:
SELECT st_get_coord_dimension( 'sasha', 'blocks', 'shape', 4236); st_get_coord_dimension --------------------------- xyz