Funciones de relación espacial para ST_Geometry
Las implementaciones de ST_Geometry realizadas por Esri e IBM emplean predicados para determinar si existe una relación específica entre un par de geometrías. Los predicados son funciones que devuelven 1 ó t de TRUE si se pasa una prueba, y 0 ó f de FALSE si no se pasa.
Como se observó en el tema Diferencias de implementación de SQL para el tipo ST_Geometry, el módulo Informix Spatial DataBlade de IBM y PostgreSQL devuelven valores booleanos para estas funciones (t de TRUE, f de FALSE). Para el tipo ST_Geometry en Oracle y el extensor espacial de IBM DB2, los valores de retorno son 1 (uno) y 0 (cero) para TRUE y FALSE.
Otras funciones devuelven un valor como resultado de una relación espacial. Por ejemplo, el resultado que devuelve la función ST_Distance es un número de doble precisión que representa el espacio que separa dos geometrías. De manera alternativa, las funciones tales como ST_Intersection devuelven una geometría como resultado de la combinación de dos geometrías.
Este tema discute las formas en las que puede probar diferentes tipos de relaciones espaciales. Las pruebas logran esto al comparar las relaciones entre:
- Los exteriores (E) de las geometrías, que es todo el espacio que no ocupa la geometría
- El interior (I) de las geometrías, que es el espacio que ocupa la geometría
- El límite (B) de las geometrías, que es la interfaz entre el interior y el exterior de una geometría
Los predicados se utilizan para hacer estas comparaciones.
Los predicados prueban relaciones. Devuelven 1 ó t (TRUE) si una comparación coincide con los criterios de la función; de otro modo, devuelven 0 ó f (FALSE). Los predicados que prueban una relación espacial comparan pares de geometrías que pueden ser de diferente tipo o dimensión.
Los predicados comparan las coordenadas x e y de las geometrías analizadas. Las coordenadas z y los valores de medición, si existen, se ignoran. Las geometrías que tienen coordenadas z o mediciones se pueden comparar con aquellas que no las tienen.
El Modelo de intersección 9 dimensionalmente ampliado (DE-9IM) desarrollado por Clementi y otros amplía de manera dimensional el Modelo de intersección 9 de Egenhofer y Herring. El DE-9IM es un enfoque matemático que define la relación espacial de pares entre geometrías de diferentes tipos y dimensiones. Este modelo expresa relaciones espaciales entre todos los tipos de geometría como intersecciones de pares de su interior, límite y exterior con consideración para la dimensión de las intersecciones resultantes.
Dadas las geometrías a y b, I(a), B(a), y E(a) representan el interior, el límite y el exterior de a; I(b), B(b), y E(b) representan el interior, el límite y el exterior de b. Las intersecciones de I(a), B(a), y E(a) con I(b), B(b), y E(b) producen una matriz de tres por tres. Cada intersección puede resultar en geometrías de diferentes dimensiones. Por ejemplo, la intersección de los límites de dos polígonos podría consistir de un punto y una cadena de líneas, en cuyo caso la función dim (dimensión) devolvería la dimensión máxima de 1.
La función dim devuelve un valor de -1, 0, 1, ó 2. El -1 corresponde al conjunto nulo que se devuelve cuando no hay ninguna intersección o dim(Ø).
Interior |
Límite |
Exterior | |
---|---|---|---|
Interior |
dim(I(a) intersects I(b)) |
dim(I(a) intersects B(b)) |
dim(I(a) intersects E(b)) |
Límite |
dim(B(a) intersects I(b)) |
dim(B(a) intersects B(b)) |
dim(B(a) intersects E(b)) |
Exterior |
dim(E(a) intersects I(b)) |
dim(E(a) intersects B(b)) |
dim(E(a) intersects E(b)) |
Los resultados de los predicados de relación espacial se pueden entender o verificar al comparar los resultados del predicado con una matriz de patrón que representa los valores aceptables para el DE-9IM.
La matriz de patrón contiene los valores aceptables para cada una de las celdas de la matriz de intersección. Los posibles valores de patrón son los siguientes:
T: debe existir una intersección; dim = 0, 1, ó 2
F: no debe existir una intersección; dim = -1
*: no importa si hay una intersección o no; dim = -1, 0, 1, ó 2
0: debe existir una intersección y su dimensión máxima debe ser 0; dim = 0
1: debe existir una intersección y su dimensión máxima debe ser 1; dim = 1
2: debe existir una intersección y su dimensión máxima debe ser 2; dim = 2
Cada predicado tiene al menos una matriz de patrón, pero algunos requieren más de una para describir las relaciones de varias combinaciones de tipo de geometría.
La matriz de patrón del predicado ST_Within para las combinaciones de geometría tiene la forma siguiente:
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
* |
F |
|
un/a |
Límite |
* |
* |
F |
Exterior |
* |
* |
* |
Explicado de manera simple, el predicado ST_Within devuelve TRUE cuando los interiores de ambas geometrías se intersecan, y el interior y el límite de a no se intersecan con el exterior de b. Todas las demás condiciones no tienen importancia.
La sección siguiente describe los diferentes predicados utilizados para relaciones espaciales. En los diagramas de estas secciones, la primera geometría de entrada que se enumera se muestra en negro y la segunda se muestra en naranja.
ST_Contains
ST_Contains devuelve 1 ó t (TRUE) si la segunda geometría está completamente incluida en la primera geometría. El predicado de ST_Contains devuelve el resultado exactamente opuesto al del predicado de ST_Within.
La matriz de patrón de un predicado de ST_Contains establece que los interiores de ambas geometrías se deben intersecar, y que el interior y el límite de la secundaria (geometría b) no debe intersecar el exterior de la primaria (geometría a).
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
* |
* |
|
un/a |
Límite |
* |
* |
* |
Exterior |
F |
F |
* |
Utilizar ST_Within o ST_Contains identifica solamente las geometrías que están completamente dentro de otra geometría. Esto ayuda a eliminar de la selección las entidades que podrían distorsionar sus resultados. En el ejemplo que se presenta abajo, un vendedor ambulante de helado quiere determinar qué vecindades contienen el mayor número de niños (clientes potenciales) para asegurarse de restringir su ruta a esas áreas. Compara polígonos de vecindades designados con distritos censales, que poseen un atributo del número total de niños menores de 16 años.
A menos que los niños del distrito censal 1 y el distrito censal 3 vivan en el falso polígono del territorio dentro de Westside, incluir estos distritos en la selección podría elevar de manera errónea el conteo de niños en la vecindad de Westside. Al especificar que sólo se incluyan los distritos censales que están incluidos completamente en las vecindades (ST_Within = 1), el vendedor de helados evita una potencial pérdida de tiempo en esas porciones de Westside y, consecuentemente, evita perder dinero.
Consulte ST_Contains para obtener información sobre la sintaxis y ver un ejemplo.
ST_Crosses
ST_Crosses devuelve 1 ó t (TRUE) si la intersección resulta en una geometría que tiene una dimensión que es un número menor que la dimensión máxima de las dos geometrías fuente y el conjunto de intersección es interior a ambas geometrías fuente. ST_Crosses devuelve 1 ó t (TRUE) únicamente para las comparaciones ST_MultiPoint/ST_Polygon, ST_MultiPoint/ST_LineString, ST_Linestring/ST_LineString, ST_LineString/ST_Polygon y ST_LineString/ST_MultiPolygon.
Esta matriz de patrón de predicado ST_Crosses se aplica a ST_MultiPoint/ST_LineString, ST_MultiPoint/ST_MultiLineString, ST_MultiPoint/ST_Polygon, ST_MultiPoint/ST_MultiPolygon, ST_LineString/ST_Polygon y ST_LineString/ST_MultiPolygon. La matriz establece que los interiores se deben intersecar y que al menos el interior de la primaria (geometría a) se debe intersecar con el exterior de la secundaria (geometría b).
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
* |
T |
|
un/a |
Límite |
* |
* |
* |
Exterior |
* |
* |
* |
Esta matriz de predicado ST_Crosses se aplica a ST_LineString/ST_LineString, ST_LineString/ST_MultiLineString y ST_MultiLineString/ST_MultiLineString. La matriz establece que la dimensión de la intersección de los interiores debe ser 0 (intersección en un punto). Si la dimensión de esta intersección fuera 1 (intersección en una cadena de líneas), el predicado de ST_Crosses devolvería FALSE, pero el predicado de ST_Crosses devolvería TRUE.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
0 |
* |
* |
|
un/a |
Límite |
* |
* |
* |
Exterior |
* |
* |
* |
Consulte ST_Crosses para obtener información sobre la sintaxis y ver un ejemplo.
ST_Disjoint
Disjoint devuelve 1 ó t (TRUE) si la intersección de las dos geometrías es un conjunto vacío. En otras palabras, las geometrías son inconexas si no se intersecan.
La matriz del patrón del predicado de ST_Disjoint simplemente establece que ni los interiores ni los límites de ninguna de las dos geometrías se intersecan.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
F |
F |
* |
|
un/a |
Límite |
F |
F |
* |
Exterior |
* |
* |
* |
Consulte ST_Disjoint para obtener información sobre la sintaxis y ver un ejemplo.
ST_Equals
ST_Equals devuelve 1 ó t (TRUE) si dos geometrías del mismo tipo tienen valores de coordenadas x,y idénticos. Los primeros y segundos pisos de un edificio de oficinas podrían tener coordenadas x,y idénticas y, por lo tanto, ser iguales. ST_Equals también puede identificar si dos entidades se ubicaron de manera errónea una encima de la otra.
La matriz de patrón DE-9IM para igualdad asegura que los interiores se intersecan y que ninguna parte del interior o el límite de las dos geometrías interseca el exterior de la otra.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
* |
F |
|
un/a |
Límite |
* |
* |
F |
Exterior |
F |
F |
* |
Consulte ST_Equals para obtener información sobre la sintaxis y ver un ejemplo.
ST_Intersects
ST_Intersects devuelve 1 ó t (TRUE) si la intersección no resulta en un conjunto vacío. ST_Intersects devuelve el resultado exactamente opuesto de ST_Disjoint.
El predicado de ST_Intersects devolverá TRUE si las condiciones de cualquiera de las siguientes matrices de patrón devuelven TRUE.
El predicado de ST_Intersects devuelve TRUE si los interiores de ambas geometrías se intersecan.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
* |
* |
|
un/a |
Límite |
* |
* |
* |
Exterior |
* |
* |
* |
El predicado de ST_Intersects devuelve TRUE si el interior de la primera geometría interseca el límite de la segunda geometría.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
* |
T |
* |
|
un/a |
Límite |
* |
* |
* |
Exterior |
* |
* |
* |
El predicado de ST_Intersects devuelve TRUE si el límite de la primera geometría interseca el interior de la segunda.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
* |
* |
* |
|
un/a |
Límite |
T |
* |
* |
Exterior |
* |
* |
* |
El predicado de ST_Intersects devuelve TRUE si los límites de cualquiera de las dos geometrías se intersecan.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
* |
* |
* |
|
un/a |
Límite |
* |
T |
* |
Exterior |
* |
* |
* |
Consulte ST_Intersects para obtener información sobre la sintaxis y ver un ejemplo.
ST_Overlaps
ST_Overlaps compara dos geometrías de la misma dimensión y devuelve 1 ó t (TRUE) si su conjunto de intersección resulta en una geometría diferente de ambas pero de la misma dimensión.
ST_Overlaps devuelve 1 ó t (TRUE) solamente para geometrías de la misma dimensión y únicamente cuando su conjunto de intersección resulta en una geometría de la misma dimensión. En otras palabras, si la intersección de dos ST_Polygons resulta en un ST_Polygon, la superposición devuelve 1 ó t (TRUE).
Esta matriz de patrón se aplica a superposiciones ST_Polygon/ST_Polygon, ST_MultiPoint/ST_MultiPoint y ST_MultiPolygon/ST_MultiPolygon. Para estas combinaciones, el predicado de la superposición devuelve TRUE si el interior de ambas geometrías interseca el interior y el exterior de la otra.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
* |
T |
|
un/a |
Límite |
* |
* |
* |
Exterior |
T |
* |
* |
La siguiente matriz de patrón se aplica a las superposiciones de ST_LineString/ST_LineString y ST_MultiLineString/ST_MultiLineString. En este caso, la intersección de las geometrías debe resultar en una geometría que tenga una dimensión de 1 (otra ST_LineString o ST_MultiLineString). Si la dimensión de la intersección de los interiores resultara en 0 (un punto), el predicado de ST_Overlaps devolvería FALSE; sin embargo, el predicado de ST_Crosses devolvería TRUE.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
1 |
* |
T |
|
un/a |
Límite |
* |
* |
* |
Exterior |
T |
* |
* |
Consulte ST_Overlaps para obtener información sobre la sintaxis y ver un ejemplo.
ST_Relate
ST_Relate devuelve un valor de 1 ó t (TRUE) si la relación espacial especificada por la matriz de patrón es válida. Un valor de 1 ó t (TRUE) indica que existe algún tipo de relación espacial entre las geometrías.
Si los interiores o los límites de las geometrías a y b están relacionados de alguna manera, ST_Relate es verdadera. No importa que los exteriores de una geometría se intersequen con el interior o el límite de la otra o no.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
T |
* |
|
un/a |
Límite |
T |
T |
* |
Exterior |
* |
* |
* |
Consulte ST_Relate para obtener información sobre la sintaxis y ver un ejemplo.
ST_Touches
ST_Touches devuelve 1 ó t (TRUE) si ninguno de los puntos comunes a ambas geometrías se intersecan con los interiores de ambas geometrías. Al menos una geometría debe ser ST_LineString, ST_Polygon, ST_MultiLineString o ST_MultiPolygon.
Las matrices de patrón muestran que el predicado de ST_Touches devuelve TRUE cuando los interiores de las geometrías no se intersecan y el límite de cualquiera de las dos geometrías interseca el interior o el límite de la otra.
El predicado de ST_Touches devuelve TRUE si el límite de la geometría b interseca el interior de a pero los interiores no se intersecan.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
F |
T |
* |
|
un/a |
Límite |
* |
* |
* |
Exterior |
* |
* |
* |
El predicado de ST_Touches devuelve TRUE si el límite de la geometría a interseca el interior de b, pero los interiores no se intersecan.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
F |
* |
* |
|
un/a |
Límite |
T |
* |
* |
Exterior |
* |
* |
* |
El predicado de ST_Touches devuelve TRUE si los límites de ambas geometrías se intersecan, pero los interiores no.
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
F |
* |
* |
|
un/a |
Límite |
* |
T |
* |
Exterior |
* |
* |
* |
Consulte ST_Touches para obtener información sobre la sintaxis y ver un ejemplo.
ST_Within
ST_Within devuelve 1 ó t (TRUE) si la primera geometría está completamente incluida en la segunda. ST_Within prueba el resultado exactamente opuesto que ST_Contains.
La matriz de patrón de un predicado de ST_Within establece que los interiores de ambas geometrías se deben intersecar y que el interior y el límite de la primaria (geometría a) no debe intersecar el exterior de la secundaria (geometría b).
b |
||||
Interior |
Límite |
Exterior |
||
Interior |
T |
* |
F |
|
un/a |
Límite |
* |
* |
F |
Exterior |
* |
* |
* |
Consulte ST_Within para obtener información sobre la sintaxis y ver un ejemplo.