Oracle Spatial de la A a la Z - Unidad 8

13
8 Consulta de Datos Espaciales OBJETIVOS Explicar el modelo de consulta de Oracle Spatial Describir y comparar los operadores espaciales y funciones Describir las relaciones topológicas utilizadas por los operadores espaciales y funciones Utilizar SDO_FILTER, SDO_RELATE, y EL operador SDO_ <RELATIONSHIP> Diferenciar entre el operador SDO_RELATE y la función SDO_GEOM.RELATE Algunos ejemplos de las consultas típicas de los datos espaciales: ¿Cuál de los millones de caminos en los EE.UU. tienen cierta relación con el estado de Texas? ¿Que condados están dentro del estado de New Hampshire? ¿Cuál es el total de la población en una zona rectangular de interés? ¿Qué interestatales interactúan con el Condado de Passaic? ¿Qué tipo de relaciones topológica tiene el estado de Nueva Jersey con sus condados? 1 EJEMPLOS DE CONSULTAS ESPACIALES

description

by Jorge Ulises Gonzalez Medina

Transcript of Oracle Spatial de la A a la Z - Unidad 8

Page 1: Oracle Spatial de la A a la Z - Unidad 8

8 Consulta de Datos Espaciales

OBJETIVOS•Explicar el modelo de consulta de Oracle Spatial•Describir y comparar los operadores espaciales y funciones•Describir las relaciones topológicas utilizadas por los operadores espaciales y funciones•Utilizar SDO_FILTER, SDO_RELATE, y EL operador SDO_ <RELATIONSHIP> •Diferenciar entre el operador SDO_RELATE y la función SDO_GEOM.RELATE

Algunos ejemplos de las consultas típicas de los datos espaciales:¿Cuál de los millones de caminos en los EE.UU. tienen cierta relación con el estado de Texas?¿Que condados están dentro del estado de New Hampshire?¿Cuál es el total de la población en una zona rectangular de interés?¿Qué interestatales interactúan con el Condado de Passaic?¿Qué tipo de relaciones topológica tiene el estado de Nueva Jersey con sus condados?

1 EJEMPLOS DE CONSULTAS ESPACIALES

Page 2: Oracle Spatial de la A a la Z - Unidad 8

2 FILTROS PRIMARIOS Y SECUNDARIOS

El filtro primario compara aproximaciones de geometrías, por lo que el resultado no es exacto.Las optimizaciones del Interior, se aplican a los candidatos que se pone.Las comparaciones de geometría son hechas sólo cuando sea necesario.

3 MODELO DE CONSULTA OPTIMIZADA

Page 3: Oracle Spatial de la A a la Z - Unidad 8

4 OPERADORES ESPACIALES

Usar un índice espacial para ofrecer un rendimiento óptimoRequieren un índice espacial la primera geometría especificada en el operador Debe ser utilizado en la cláusula WHERE de una consultaIncluye:

SDO_FILTER:Realiza sólo un filtro primario SDO_RELATE y SDO_ <RELATIONSHIP>Realiza un filtro primario y secundario

5 PLANTILLA DE SINTAXIS DE OPERADORES ESPACIALES

SDO_<operator_name>( <geometry-1>,<geometry-2> ) = 'TRUE'

Los operadores espaciales siguen una plantilla para su sintaxis.<geometry-1> es la columna del tipo de SDO_GEOMETRY que se busca. La columna debe ser espacialmente indexada.<geometry-2> es la ventana de consulta.Con los operadores espaciales, especifique siempre TRUE en mayúsculas. No especifique <> 'false' o = 'true'.

6 FUNCIONES Y PROCEDIMIENTOS ESPACIALES

•No utilice los índices espaciales•Puede ser utilizado en pequeñas tablas que espacialmente no son indexadas. •Puede ser utilizado en la lista SELECT o la cláusula WHERE•Debe estar en el mismo sistema de coordenadas si se requieren dos geometrías•Puede ser aplicado en el conjunto de resultados de un operador espacial •Función espacial discutido en esta lección:SDO_GEOM.RELATE: Para determinar la relación entre dos geometrías sin necesidad de utilizar un índice espacial

7 OPERADOR SDO_FILTER

SDO_FILTER ( <geometry-1>,<geometry-2> ) = 'TRUE'

Page 4: Oracle Spatial de la A a la Z - Unidad 8

SDO_FILTER:•Sólo lleva a cabo la operación filtro primario•Utiliza el índice espacial para identificar el conjunto de objetos espaciales potencialmente interactúan con una ventana de consulta•Debe ser utilizado como una expresión en la cláusula WHEREEvalúa como True para los pares de aproximación de geometría que actúan recíprocamente <geometry-1>: Es la búsqueda de la columna<geometry-2>: Es la ventana de consulta

Buscar todos los condados que interactúan con una zona rectangular. El resultado es aproximado.

Conocer todos los municipios cuya aproximaciones interactúan con un área rectangular:

SELECT c.county, c.totpop FROM proj_counties cWHERE sdo_filter ( c.geom, sdo_geometry (2003, 32775, null, sdo_elem_info_array (1,1003,3), sdo_ordinate_array (1720300,1805461, 1820000, 2210000)) ) = 'TRUE';

Nota: Todos los operadores espaciales retornar true o false. Al escribir las consultas espaciales, siempre prueba con = 'TRUE' nunca, el uso <> 'FALSE' o = 'true'.

Page 5: Oracle Spatial de la A a la Z - Unidad 8

8 RELACIONES ESPACIALES CON FILTROS SECUNDARIOS

Para determinar la relación espacial entre dos geometrías, aplicar un filtro secundario.Las relaciones espaciales se basan principalmente en la topología y la distancia.Cada objeto espacial tiene un límite, un exterior y un interior.

9 RELACIONES TOPOLÓGICAS ESPACIALES

Page 6: Oracle Spatial de la A a la Z - Unidad 8

ANYINTERACT:Devuelve TRUE si las geometrías no son disjuntasEs una máscara óptima, ya que no tiene que determinar la relación entre geometríasSólo determina que las geometrías no son disjuntas

10 OPERADOR SDO_RELATE

SDO_RELATE ( <geometry-1>, <geometry-2>, 'MASK=<mask>' ) = 'TRUE'

•Realiza tanto filtros primarios como secundarios procesando una consulta•Utiliza el filtro secundario para garantizar que que sólo los objetos de candidato que interactúan recíprocamente son seleccionados•Evalúa como True para las geometrías que tienen la relación topológica especificada por <mask>

<geometry-1> es la capa que desea buscar.Debe ser una columna de una tablaDebe ser del tipo SDO_GEOMETRYDeben ser indexados

<geometry-2> es la ventana de consulta.Es una variable o columna de una tablaDebe ser del tipo SDO_GEOMETRY

<mask> identifica la relación espacial de la prueba.Algunos valores de palabra clave de máscara válidos son: CONTAINS, COVERS, ANYINTERACT, ON, TOUCH Múltiples máscaras son combinadas así: 'INSIDE+COVEREDBY'

Encontrar todos los condados que INSIDE+COVEREDBY del estado de New Hampshire

Page 7: Oracle Spatial de la A a la Z - Unidad 8

SELECT c.county, c.state_abrvFROM geod_counties c, geod_states sWHERE s.state = 'New Hampshire' AND sdo_relate (c.geom, s.geom, 'mask=INSIDE+COVEREDBY') ='TRUE';

Nota: Para un rendimiento óptimo, crear un índice no espacial en GEOD_STATES (estado).

Encontrar todos los condados vecinos al condado de Passaic en Nueva Jersey

SELECT c1.county, c1.state_abrvFROM geod_counties c1, geod_counties c2WHERE c2.state = 'New Jersey' AND c2.county = 'Passaic' AND sdo_relate (c1.geom, c2.geom, 'mask=TOUCH')='TRUE';

Page 8: Oracle Spatial de la A a la Z - Unidad 8

Ejemplo ANYINTERACT de: SDO_RELATE

Buscar todas las ciudades en una zona rectangular:

SELECT c.city, c.pop90 FROM geod_cities cWHERE sdo_relate ( c.location, sdo_geometry (2003, 8307, null, sdo_elem_info_array (1,1003,3), sdo_ordinate_array (-109,37,-102,40)), 'mask=ANYINTERACT') ='TRUE';

Para las consultas de punto-en-polígono, use la máscara ANYINTERACT si no le importa devolver los puntos que caen en la frontera; ANYINTERACT es una operación SDO_RELATE muy rápida.Debido a GEOD_CITIES contiene sólo datos de puntos, para el funcionamiento óptimo, el índice debería haber sido creado con LAYER_GTYPE = PUNTO.

11 RECTÁNGULO OPTIMIZADO GEODÉSICO

•Rectángulos optimizados geodésicos pueden ser representados internamente como un MultiPolygon.

•El rectángulo R está dentro del primer polígono, no está dentro del segundo MultiPolygon.

Page 9: Oracle Spatial de la A a la Z - Unidad 8

12 USO DE SDO_RELATE CON PL/SQL

Encuentre el total de la población en una zona rectangular:

set serveroutput on;DECLARE rectangle sdo_geometry; total_population number;BEGIN rectangle := sdo_geometry (2003, 8307, null, sdo_elem_info_array (1,1003,3), sdo_ordinate_array (-109,37,-102,40)); SELECT sum(c.totpop) into total_population FROM geod_counties c WHERE sdo_relate (c.geom, rectangle, 'mask=ANYINTERACT') = 'TRUE';dbms_output.put_line('Population = '|| total_population||'.');END;/

13 USO DEL OPTIMIZADOR DE PISTA ORDERED

•Para un rendimiento óptimo, cuando la ventana de consulta proviene de una tabla, utilice el /* +ordered */ sugerencia de optimizador.•La pista ORDERED instruye al optimizador para usar índices en tablas en el orden que se enumeran en la cláusula FROM.•Lista de la tabla de la primera ventana de la consulta en la cláusula FROM.•Esto permite a Oracle Optimizer para encontrar la ventana de consulta, y luego buscar la capa espacial.

Buscar todas las carreteras interestatales que interactúan con un condado:

Page 10: Oracle Spatial de la A a la Z - Unidad 8

14 OPERADORES DE RELACIÓN SIMPLIFICADA

Cada valor de máscara de SDO_RELATE tiene su correspondiente operador de relación simplificada.El nombre de operador es de la forma SDO _ <la RELACIÓN> donde <la RELACIÓN> puede ser ANYINTERACT, DENTRO, CUBIERTAS, SE SUPERPONE, SOBRE, COVEREDBY, etcétera.

<geometry1>: columna de búsqueda<geometry2>: ventana de consulta

Buscar todos los Condados al rededor del condado Passaic en New Jersey:

Anteriormente:

15 CONSULTA PARA OBTENER GEOMETRÍAS DISJUNTAS

SDO_<RELATIONSHIP> (<geometry1>, <geometry2>) = 'TRUE'

SELECT /*+ ordered */ a.countyFROM geod_counties b, geod_counties aWHERE b.county = 'Passaic' AND b.state = 'New Jersey' AND SDO_TOUCH(a.geom,b.geom) = 'TRUE';

. . .AND SDO_RELATE(a.geom,b.geom, 'MASK=TOUCH') = 'TRUE';

•No hay un operador independiente o relación de máscara para obtener geometrías disjuntas.•Para obtener geometrías disjuntas, utiliza la lógica de la siguiente consulta: •De todas las geometrías, menos las geometrías que tiene interacción.•Geometrías que no interactúan o son disjuntas se devuelven.

Page 11: Oracle Spatial de la A a la Z - Unidad 8

SELECT city, state_abrvFROM geod_cities MINUSSELECT /*+ ordered */ c.city, c.state_abrvFROM geod_states s, geod_cities cWHERE sdo_anyinteract(c.location,s.geom) = 'TRUE' AND s.state_abrv='CA';

16 TRANSFORMACIONES DE SISTEMA DE COORDENADA IMPLÍCITAS

En un operador espacial, la geometría de la ventana de consulta puede ser diferente del sistema de coordenadas de la capa de la geometría que se busca.La ventana de consulta, se transforma automáticamente al sistema de coordenadas de la capa Buscar todos los condados en el estado de New Hampshire.El estado de New Hampshire es proyectada en un sistema de coordenadas.Los condados están en un sistema de coordenadas geodésicas.

s.geom implícitamente transformado al sistema de coordenadas de la capa de c.geom.

SELECT /*+ ordered */ c.county, c.state_abrvFROM proj_state s, geod_counties cWHERE s.state = 'New Hampshire' AND sdo_inside (c.geom,s.geom)='TRUE';

17 Función SDO_GEOM.RELATE

SDO_GEOM.RELATE ( <geometry-1>, '<mask>', <geometry-2>, <tolerance> ) = '<relationship>'

Se examinan dos objetos de la geometría para determinar su relación espacialRealiza una consulta exacta (filtro secundario)Devuelve verdadero o falso para una máscara de ANYINTERACTDevuelve la relación de igualdad si se utiliza cualquier otra máscara, devuelve FALSE si la relación especificada en la máscara no existe entre la geometría

Page 12: Oracle Spatial de la A a la Z - Unidad 8

Determinar la relación del estado de Nueva Jersey a sus condados:

La consulta devuelve:

SELECT c.county, sdo_geom.relate (s.geom,'determine',c.geom, 0.5)

relationship FROM geod_states s, geod_counties cWHERE s.state = 'New Jersey' AND s.state = c.state;

COUNTY RELATIONSHIP------------------------------- --------------Atlantic COVERSCape May COVERSCumberland COVERSEssex CONTAINS

Buscar todos los condados alrededor de Nueva Jersey:.

La función no aprovecha un índice espacial.Utilice SDO_RELATE (o cualquiera de los operadores SDO_ <RELATIONSHIP>) en su lugar.

SELECT c.county, c.stateFROM geod_states s, geod_counties cWHERE s.state = 'New Jersey' AND sdo_geom.relate(c.geom,'touch',s.geom, 0.5) ='TOUCH';

18 ¿SDO_RELATE o SDO_GEOM.RELATE?Utilice SDO_RELATE:En la mayoría de los casos, ya que un índice espacial es más selectivo que cualquier otro índiceUtilice SDO_GEOM.RELATE:Cuando un índice no espacial es más selectivo que el índice espacialComparando solamente una geometría

Page 13: Oracle Spatial de la A a la Z - Unidad 8

Considere el siguiente ejemplo:Datos: La tabla de US_IMAGERY tiene 10 millones de imágenes de satélite.

El índice no espacial sobre el porcentaje CLOUD_COVERÍndice de la longitud de onda no espacialÍndice espacial en GEOM, que es la medida de cada imagen

Consulta: Encuentre todas las imágenes en los Estados Unidos con el porcentaje CLOUD_COVER = 0 (el día muy claro) y la WAVELENGTH = 400.

¿Qué pasa si la combinación de CLOUD_COVER y predicados WAVELENGTH son mucho más selectivas que los predicado espaciales?El predicado espacial devuelve solo cinco millones filas.Predicados no espacial sola devuelven 15 filas.Respuesta: Utilice SDO_GEOM.RELATE.

SELECT i.image_idFROM us_areas a, us_images iWHERE i.cloud_cover = 0 AND i.wavelength = 400 AND a.area = 'Eastern US' AND sdo_geom.relate(i.geom, 'anyinteract', a.geom, 0.5) ='TRUE';