Validación de geometría en tablas que contienen columnas de ST_Geometry
El tipo ST_Geometry proporciona la validación de geometría por medio de las bibliotecas st_shapelib (Oracle) y st_geometry. 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 las funciones del descriptor de acceso y las aplicaciones construidas por medio de estas funciones
- Utilizar las API de ArcGIS y las aplicaciones creadas mediante estas API
Las funciones del descriptor de acceso están definidas por cada implementación de tipo espacial y puede usar diferentes métodos para validar los datos de geometría. Las funciones del descriptor de acceso Esri ST_Geometry y las API de ArcGIS utilizan la biblioteca de formas de Esri para validar los datos de geometría. Los tipos espaciales de terceros tienen sus propias funciones de descriptor de acceso y usan sus propias reglas de verificación de formas. Por lo tanto, para conocer las reglas de verificación de formas de tipos espaciales, tales como SDO_Geometry, la geometría de PostGIS, y la geometría o la geografía de Microsoft SQL Server, lea la documentación de Oracle, PostGIS, o SQL Server respectivamente.
Las reglas siguientes se aplican a la biblioteca de formas de Esri y consecuentemente a las funciones del descriptor de acceso de las API de Esri y de ST_Geometry.
Reglas de validación para formas de puntos
-
El área y la longitud de los puntos se fijan en 0,0.
-
Un solo sobre de punto es igual a los valores x,y del punto.
- El sobre de una forma de punto multiparte se fija como el cuadro de delimitación mínimo.
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. ArcSDE elimina todo agujero que esté 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 el software de ArcSDE pueda devolver puntos en cualquier dirección. Si genera una forma de área que contenga coordenadas en el sentido de las agujas del reloj, ArcSDE 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
Si intenta insertar un valor que tiene 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 | 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 |