El tipo ST_Geometry proporciona la validación de geometría por medio de las bibliotecas st_shapelib (Oracle) y st_geometry en PostgreSQL, IBM DB2 e Informix. Una vez que se crea la tabla, los datos se validan cuando se insertan o actualizan los registros.
Hay dos maneras principales de insertar datos en tablas espaciales:
- Utilizar funciones constructoras y aplicaciones construidas por medio de estas funciones
- Utilizar las API de ArcGIS y las aplicaciones creadas mediante estas API
Las funciones constructoras se definen para cada implementación de tipo espacial y pueden usar diferentes métodos para validar los datos de geometría. Las funciones constructoras ST_Geometry de Esri y e IBM utilizan la biblioteca de formas de Esri para validar los datos de geometría al crear la entidad. Otros tipos espaciales, como SDO_Geometry, la geometría o geometría de PostGIS, y la geometría o geografía de Microsoft SQL Server, tienen sus propias funciones constructoras y utilizan sus propias reglas de verificación de formas. Por lo tanto, es necesario consultar las reglas de verificación que se aplican al insertar o actualizar entidades en estos tipos fuera de ArcGIS en la documentación de Oracle, PostGIS o SQL Server respectivamente.
ArcGIS también valida la geometría al leer los datos. Las geometrías que no sean válidas no se pueden representar en ArcGIS.
Las reglas siguientes de validación de geometrías se aplican a la API de Esri, las funciones constructoras de ST_Geometry y cuando ArcGIS lee geometrías:
Reglas de validación para formas de puntos
El área y la longitud de los puntos valen 0.0.
Un solo sobre de punto es igual a los valores x,y del punto.
- La envolvente de una forma de punto multiparte es la caja de límite mínima.
Reglas de validación para líneas o cadenas de líneas
- Los puntos duplicados secuenciales se eliminan.
- Cada parte debe tener al menos dos puntos distintos.
- Cada parte puede no intersecarse a sí misma. Los puntos de inicio y fin pueden ser los mismos, pero el anillo resultante no se trata como una forma de área.
- Las partes pueden tocarse entre sí en los extremos.
- La longitud es la suma de todas las partes.
Reglas de validación para líneas o cadenas tipo "espagueti"
- Las líneas pueden intersecarse a sí mismas.
- Cada parte debe tener al menos dos puntos distintos.
- Los puntos duplicados secuenciales se eliminan.
- La longitud es la suma de todas las partes.
Reglas de validación y operaciones para formas de área
- Las incidencias secuenciales duplicadas del punto de una coordenada se eliminan.
- Los nodos colgados se eliminan.
- Se verifica que los segmentos de línea estén cerrados (las coordenadas z en los puntos de inicio y fin deben ser las mismos) y que no se crucen.
- Para formas de área con agujeros, éstos deben estar completamente dentro del límite exterior. ArcGIS elimina todos los agujeros que haya fuera del límite exterior.
- Un agujero que toca un límite exterior en un punto común único se convierte en una inversión de la forma de área.
- Varios agujeros que se tocan en puntos comunes se combinan en un solo agujero.
- Múltiples formas de área no se pueden superponer. Sin embargo, dos partes se pueden tocar en un punto.
- Las formas de área multiparte no pueden compartir un límite común. Los límites comunes se disuelven.
- Si dos anillos tienen un límite común, se fusionan en un solo anillo.
- El perímetro total de la geometría, incluidos los límites de todos los agujeros en polígonos donut, se calcula y almacena como la longitud de la geometría.
- Se calcula el área.
- Se calcula el sobre.
- Los puntos de una forma de área se almacenan en sentido contrario a las agujas del reloj, aunque los clientes de ArcGIS puedan devolver puntos en cualquier dirección. Si genera una forma de área que contenga coordenadas en el sentido de las agujas del reloj, ArcGIS cambia la rotación para asegurar que la lista de coordenadas siga una dirección antihoraria.
En este ejemplo, el punto de inicio es a y la descripción de la coordenada correcta es a,b,c,d,a.
- Una forma de área puede tener inversiones, que son espacios vacíos dentro de la forma de área que tocan el límite exterior.
- Las formas de área tienen un anillo interior que toca el límite exterior. Éstos no se consideran polígonos donut.
- Cuando una forma de área tiene un agujero de donut, el límite exterior se enumera primero. Los puntos de los agujeros se almacenan en dirección opuesta al límite exterior.
En la figura siguiente, el límite exterior se describe como a,b,c,d,a y el agujero se describe como e,f,g,h,e. En la lista de coordenadas, la forma de área se almacena como a,b,c,d,a,e,f,g,h,e.
- Si dos agujeros se tocan en un punto, se los trata como un solo agujero, no dos.
En este ejemplo, las dos áreas interiores son un agujero único porque comparten un punto común, g.
- La combinación de formas de áreas y formas de áreas con agujeros puede volverse bastante compleja, como se muestra en el gráfico siguiente. El límite exterior es un lago con una isla. Hay un lago pequeño en la isla.
Es posible representar estas entidades como una, dos o tres formas. Usted podría almacenar cada entidad de manera separada. El lago más grande es un polígono donut. El límite del lago grande es el límite exterior, mientras que la isla es el límite de un agujero donut único. La isla más grande es también un polígono donut. El límite de la isla es el límite exterior, mientras que el lago pequeño es el agujero. El lago pequeño es una forma de área única.
Si los lagos son las entidades importantes, una forma con un agujero representa el lago grande, mientras que una segunda forma representa el lago pequeño. También podría usar una forma de área multiparte para representar la entidad. La primera parte de la forma es el lago grande con un agujero donut que representa la isla. La segunda parte es el lago pequeño.
- Las formas nulas actúan como marcadores de posición; una manera de tener una fila de atributo sin la geometría correspondiente. Un ejemplo que podría resultar en una forma nula es una solicitud para la intersección de dos áreas no intersecantes.
Dado que las áreas A y B no se tocan, el resultado de una consulta de intersección produce una geometría vacía.
- Las formas tienen dimensiones. Una forma que sólo cuenta con coordenadas x,y se considera bidimensional. Una forma que tiene mediciones o coordenadas z es tridimensional. Una forma también puede tener una medición nula.
Id. de referencia espacial
Para clases de entidades que utilicen el tipo ST_Geometry, si se intenta insertar un valor con coordenadas que estén fuera de los límites del Id. de referencia espacial (SRID) provisto y con el cual se creó la tabla, la declaración INSERT emite un mensaje de error similar a los que aparecen en la lista siguiente:
DBMS | Mensaje de error |
---|---|
Oracle 11g | ERROR at line 1: ORA-20004: Error generating shape from text (-112) ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 42 ORA-06512: at "SDE.ST_POLYGON", line 69 ORA-06512: at line 1 |
PostgreSQL | ERROR: ESRI: error generating shape [-112]: |
Informix | SQL Error (-937): Coordinates out of bounds in ST_PolyFromText. |
DB2 | GSE3416N Coordinate out of bounds |
SQLite | Error: ST_Geometry failed with SDE error -139: 'The specified coordinate exceeds the valid coordinate range':[4] |