Oracle Spatial de la A a la Z - Unidad 9

10

Click here to load reader

description

by Jorge Ulises Gonzalez Medina

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

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

9Utilizando SDO_WITHIN_DISTANCE, SDO_NN, y el operador SDO_JOIN

OBJETIVOS•Conocer como el operador SDO_WITHIN_DISTANCE para resolver las consultas relacionadas con la distancia•Comprender como el operador SDO_NN para realizar la consulta del vecino más cercano•Poner en práctica SDO_JOIN para obtener un cruce espacio-producto

Algunos ejemplos de las consultas típicas de los datos espaciales:

Encuentre todas las ciudades dentro de una distancia de una carretera interestatal.Encuentra cinco ciudades más cercanas a la carretera interestatal I170.Encuentra toda las ciudades y los pares de condados que tiene la interacción.Buscar todas las ciudades dentro de 10 millas de todas las autopistas interestatales.

1 EJEMPLOS DE CONSULTAS ESPACIALES

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

2 OPERADORES ESPACIALES

Operadores espaciales que pueden ser utilizados para resolver la distancia o la proximidad de consultas relacionadas con:

SDO_WITHIN_DISTANCESDO_NNEl SDO_JOIN operador espacial:

Puede ser utilizado para comparar todas las geometrías de una capa a todas las geometrías en otra capaEs útil comparando la mayor parte de una capa con todo o la mayor parte de otra capa

3 OPERADOR SDO_WITHIN_DISTANCE

SDO_WITHIN_DISTANCE ( <geometry-1>, <geometry-2>, 'DISTANCE=<n>, [parameters]' ) = 'TRUE'

SDO_WITHIN_DISTANCE: se utiliza para determinar el conjunto de objetos en una tabla que están dentro de las unidades de distancia n de un objeto de referencia (ventana de consulta)<geometry1>: ¿Es la búsqueda de la columna<geometry2>: Es la ventana de consulta<DISTANCE=n>: Se expresa en las unidades utilizadas para el sistema de coordenadas<unit>: Es la unidad de medida para asociarse con el parámetro <DISTANCE>

4 OPERADOR: SDO_NN

SDO_NN ( <geometry-1>, <geometry-2> [,'parameters'][,tag] ) = 'TRUE'

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

SDO_NN:Utiliza el índice espacial para identificar a los vecinos más cercanos para una geometríaPuede especificar el número de vecinos más próximos a ser devueltosNo devuelve los resultados en orden de distanciaTiene un operador auxiliar, SDO_NN_DISTANCE, que devuelve la distancia asociada a un vecino más cercano

<geometry1>: Es la columna espacial que se busca<geometry2>: Es la geometría cuya vecinos más cercanos está buscando.

Argumentos opcionales: SDO_NN

DISTANCIA: es la máxima distancia opcional para considerar en la búsqueda de los vecinos más cercanos

SDO_NUM_RES: Define el número de vecinos más próximos a regresar. Esto toma sólo la proximidad en consideración.

SDO_BATCH_SIZE: Especifica el número de filas que se procesan en un momento en el que la evaluación de otras limitaciones de la cláusula WHERE. De forma predeterminada, el valor 0, en cuyo caso Espacial decide el tamaño del lote óptimo.Usar la rownum pseudocolumn para limitar el número de geometrías devueltas.Especificar SDO_BATCH_SIZE o SDO_NUM_RES, pero nunca ambos.Si no se especifica ninguno, el valor predeterminado es SDO_BATCH_SIZE = 0.

UNIT (opcional con SDO_NN_DISTANCE)Se aplica a SDO_NN_DISTANCEEs la unidad de medida asociado con la distancia

TAG (requerido con SDO_NN_DISTANCE)Debe coincidir con la etiqueta entero especificado en SDO_NN_DISTANCEAsociados a un operador auxiliar con una instancia específica de SDO_NN

5 OPERADOR AUXILIAR: SDO_NN_DISTANCE

Esto devuelve la distancia asociados con los vecinos más cercanos devuelto por SDO_NN.Esto es válido sólo dentro de una llamada al operador SDO_NN.La distancia se ajusta a los parámetros de UNIT en el operador de SDO_NN.Si la UNIT no se ha especificado, empleamos SDO_NN_DISTANCE :

Medidores de datos geodésicosLa unidad de sistema para coordinar los datos proyectados

TAG es un número que asocia al operador auxiliar con una llamada a SDO_NN.

Encuentra las cinco ciudades más cercanas a la carretera interestatal I170, ordenados por distancia:

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

SELECT /*+ ordered */ c.city, c.state_abrv, sdo_nn_distance (1) distance_in_milesFROM geod_interstates i, geod_cities c WHERE i.highway = 'I170' AND sdo_nn(c.location, i.geom, 'sdo_num_res=5 unit=mile', 1) = 'TRUE'ORDER by distance_in_miles;

Resultado de utilizar SDO_NN_DISTANCE con el operador auxiliar DO_NUM_RES.

La consulta en la diapositiva anterior devuelve las cinco ciudades más cercanas a la carretera interestatal I170, ordenados por distancia:

CITY ST DISTANCE_IN_MILES

----- ---- -------------------

St Louis MO 5.36297295

Springfield IL 78.7997464

Peoria IL 141.478022

Evansville IN 158.22422

Springfield MO 188.508631

6 UTILIZANDO SDO_NN CON SDO_BATCH_SIZE

Encuentra las cinco ciudades más cercanas a la carretera interestatal I170 que tienen la población mayor de 300.000, ordenados por distancia.

Si usted pone SDO_BATCH_SIZE=0, SDO_NN escoge SDO_BATCH_SIZE óptimo

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

SELECT /*+ ordered */ c.city, c.state_abrv, pop90, sdo_nn_distance (1) distance_in_milesFROM geod_interstates i, geod_cities c WHERE i.highway = 'I170' AND sdo_nn(c.location, i.geom, 'sdo_batch_size=10 unit=mile', 1) = 'TRUE' AND c.pop90 > 300000 AND rownum < 6ORDER BY distance_in_miles;

La consulta en la diapositiva anterior devuelve las cinco ciudades más cercanas a la carretera interestatal I170 que tienen la población mayor de 300.000, ordenados por distancia:

CITY ST POP90 DISTANCE_IN_MILES

----------- -- ---------- -----------------

St Louis MO 396685 5.36297295

Kansas City MO 435146 227.404883

Indianapolis IN 741952 234.708666

Memphis TN 610337 244.202072

Chicago IL 2783726 253.547961

Este debe tener un índice en GEOD_INTERSTATES.SDO_NN filas de vueltas en la distancia ordenan en la cláusula WHERE.Cuando se utiliza SDO_BATCH_SIZE:

Como excepción, es aceptable para tener la condición rownum seguida de una operación ORDER BYDesactivar todos los índices no espacial en las columnas que vienen de la misma tabla que la columna de búsqueda SDO_NN

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

7 USO DE LA SUGERENCIA DEL OPTIMIZADOR NO_INDEX

Para deshabilitar un índice no espacial, utiliza la sugerencia de optimizador no_index.

SELECT /*+ ordered no_index(c pop90_idx) */ c.city, pop90, sdo_nn_distance (1) distance_in_milesFROM geod_interstates i, geod_cities c WHERE i.highway = 'I170' AND sdo_nn(c.location, i.geom, 'sdo_batch_size=0 unit=mile', 1) = 'TRUE' AND c.pop90 > 300000 AND rownum < 6ORDER BY distance_in_miles;

8 UTILIZANDO SDO_NN CON DISTANCE

Encuentra las cinco ciudades más cercanas a la carretera interestatal I170 que tienen la población mayor de 300.000, y una distancia máxima de 240 millas de la carretera interestatal I170:

SELECT /*+ ordered no_index(c pop90_idx) */ c.city, pop90, sdo_nn_distance (1) distance_in_milesFROM geod_interstates i, geod_cities c WHERE i.highway = 'I170' AND sdo_nn(c.location, i.geom, 'sdo_batch_size=0 distance=240 unit=mile',

1) = 'TRUE' AND c.pop90 > 300000 AND rownum < 6ORDER BY distance_in_miles;

Encuentra las cinco ciudades más cercanas a la carretera interestatal I170 que tienen la población mayor de 300.000, y una distancia máxima de 240 millas de la carretera interestatal I170:

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

CITY ST POP90 DISTANCE_IN_MILES

----------- -- ---------- -----------------

St Louis MO 396685 5.36297295

Kansas City MO 435146 227.404883

Indianapolis IN 741952 234.708666

9 Enlace espacial: operador SDO_JOINEsto se utiliza para comparar todas las geometrías de una capa con todas las geometrías de otra capa.

Esto también es útil cuando se comparan más de una capa con toda o con la mayor parte de otra capa.

El enlace espacial puede ser usado para responder a preguntas como: ¿Qué carreteras cruzan los parques nacionales?La geometría de las capas que se comparan:

Debe estar en el mismo sistema de coordenadasTienen la misma dimensionalidad

Ambas tablas deben ser espacialmente indexadas.

<table_name-n>: tablas que contienen las columnas SDO_GEOMETRY<column_name-n>: columnas SDO_GEOMETRY indexadas ‘parámetros’: Elija una de dos:

MÁSCARA: define las relaciones topológicas a buscar, por ejemplo, ANYINTERACT, INSIDE, OVERLAPS, , y así sucesivamente.Distancia y la UNIT opcional

Nota: Si los parámetros no se especifican, esto es análogo a SDO_FILTER.

Esto devuelve un objeto del tipo SDO_ROWIDSET, es decir, un par de ROWIDs que coinciden con las dos capas espaciales.

SDO_JOIN( <table_name-1>, <column_name-1>, <table_name-2>, <column_name-2> [,'parameters'])RETURN SDO_ROWIDSET

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

DESCRIBE SDO_ROWIDSET

ROWID1 se refiere a ROWID de table_name-1, y ROWID2 se refiere a ROWID de table_name-2.

SDO_ROWIDSET TABLE OF MDSYS.SDO_ROWIDPAIR

Name Null? Type

-------------- -------- -----------

ROWID1 VARCHAR2(24)

ROWID2 VARCHAR2(24)

10 Enlace espacial: utilizando el parámetro MASK

Encuentra toda la ciudad y los pares de condado que tiene la interacción:

SELECT /*+ ordered use_nl(a,b) use_nl(a,c)*/ b.city, c.county

FROM TABLE(SDO_JOIN( 'GEOD_COUNTIES', 'GEOM', 'GEOD_CITIES', 'LOCATION', 'MASK=ANYINTERACT')) a, geod_cities b, geod_counties cWHERE a.rowid1 = c.rowid AND a.rowid2 = b.rowid ORDER BY a.city;

11 Enlace espacial: utilizando DISTANCE y el parámetro UNIT

Buscar todas las ciudades dentro de 10 millas de todas las autopistas interestatales:

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

SELECT /*+ ordered use_nl(a,b) use_nl(a,c)*/ b.city, c.highway

FROM TABLE(SDO_JOIN( 'GEOD_INTERSTATES', 'GEOM', 'GEOD_CITIES', 'LOCATION', 'DISTANCE=10 UNIT=MILE')) a, geod_cities b, geod_interstates c WHERE a.rowid1 = c.rowid AND a.rowid2 = b.rowid ORDER BY a.city;

12 PUNTOS IMPORTANTES ACERCA DE LOS OPERADORES ESPACIALES DE ORACLE

Hay tres puntos importantes para recordar que la ayuda para garantizar un rendimiento óptimo cuando se utilizan los operadores de Oracle Spatial son:

•Siempre use = 'true', y nunca <> 'false' o = 'true'.•Utilice la sugerencia /*+ ORDERED */ cuando la ventana de consulta proviene de una tabla.•Cuando se utiliza SDO_NN con el parámetro SDO_BATCH_SIZE, deshabilitar todos los índices no espacial en las columnas que vienen de la misma tabla que la columna de búsqueda SDO_NN.

• Esto se puede hacer con una sugerencia de Optimizador no_index.

13 EN PARALELO CON OPERADORES ESPACIALES Y CREATE TABLE AS SELECT

En general, los operadores espaciales no hacen el paralelismo de apalancamiento.Pero usted puede aprovechar el paralelismo con los operadores espaciales con CREATE TABLE AS SELECT.

El paralelismo con los operadores espaciales y CREATE TABLE AS SELECT se produce cuando la ventana de consulta alimentan el segundo argumento del operador espacial, por ejemplo:

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

ALTER SESSION ENABLE PARALLEL QUERY;

CREATE TABLE results NOLOGGING PARALLEL 4 AS SELECT /*+ ordered */ a.state, b.countyFROM geod_states a, geod_counties bWHERE sdo_relate (b.geom, a.geom, 'mask=touch')='TRUE';