Preguntas frecuentes

¿Es necesario incluir el operador st_envintersects al ejecutar una sentencia SQL con operadores relacionales espaciales adicionales en Oracle?

Last Published: January 13, 2021

Respuesta

Nota: El software de ArcSDE, incluido el servidor de aplicaciones, las herramientas de comando y el SDK con API de C y Java, quedó obsoleto en ArcGIS 10.2.2 y ya no se distribuye.

Cuando se crea una sentencia SQL con un operador relacional espacial como st_intersects, st_within, st_crosses, etc., no es necesario incluir el operador espacial adicional st_envintersects como filtro para identificar geometrías candidatas para el operador relacional espacial. Si el operador st_envintersects está incluido en la consulta, es redundante y agrega un coste informático innecesario a la consulta. Cuando se utiliza un índice espacial, los operadores relacionales espaciales primero filtran las formas candidatas aplicando el sobre de geometrías de entrada como el filtro principal, antes de realizar la comparación espacial relacional.

Los siguientes ejemplos de SQL muestran cómo se aplica el operador st_envintersects como filtro de predicado y en una subconsulta, pero no es necesario en ambos casos. El objetivo de la sentencia SQL es identificar todos los centroides de parcela en una vecindad.

El primer ejemplo agrega el operador st_envintersects como un filtro de predicado. El filtro de predicado es redundante al operador st_within porque el operador st_within utiliza el sobre de la forma de las vecindades de entrada para identificar todas las formas parcel_cent candidatas antes de realizar la comparación relacional.

Código: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1 5 AND sde.st_envintersects(a.shape,b.shape) = 1;

El segundo ejemplo aplica el filtro st_envintersects en una subconsulta para devolver un conjunto de geometrías candidatas y valores ObjectID como el filtro de la consulta principal que contiene el operador relacional espacial.

Código: SQL> SELECT owner, address 2 FROM parcel_cent 3 WHERE objectid IN 4 (SELECT objectid 5 FROM parcel_cent a, neighborhoods b 6 WHERE b.name = 'SOUTHGATE' 7 AND sde.st_envintersects(a.shape,b.shape) = 1);

Ambos ejemplos dan como resultado las consultas que consumen recursos informáticos adicionales sin aumentar el rendimiento de las consultas. La sintaxis de SQL adecuada para ejecutar una consulta de esta naturaleza es especificar el filtro de predicado y el operador relacional espacial.

Código: SQL> SELECT a.owner, a.address 2 FROM parcel_cent a, neighborhoods b 3 WHERE b.name = 'SOUTHGATE' 4 AND sde.st_within(a.shape,b.shape) = 1;

Id. de artículo:000010468

Obtener ayuda de expertos en ArcGIS

Contactar con soporte técnico

Descargar la aplicación de soporte de Esri

Ir a las opciones de descarga

Información relacionada

Descubrir más sobre este tema