Oracle Spatial de la A a la Z - Unidad 3

27
3 Creación de tablas espaciales. OBJETIVOS Describir el esquema asociado con todas las capas espaciales, tipos, funciones y procedimientos Explicar cómo los datos espaciales se almacenan utilizando el modelo de objetos de Oracle Spatial Crear una tabla con una capa espacial Cargar una vista de metadatos asociada con una capa espacial 1 PASOS TÍPICOS PARA LA GESTIÓN DE DATOS ESPACIALES 1. Creación de una tabla para almacenar datos espaciales. 2. Introducir (almacenar) los datos espaciales 3. Actualización de los metadatos espaciales. 4. Validación y depuración de geometrías (si es necesario). 5. Creación de índices espaciales. 6. Ejecución de consultas espaciales. Los pasos mencionados en el diagrama son las tareas básicas que suelen realizar para empezar a trabajar con cualquier tipo de datos espaciales. Como primer paso se debe definir una tabla con una o más columnas SDO_GEOMETRY para almacenar los datos geométricos. Esta tabla debe tener algunos atributos no espaciales.

description

by Jorge Ulises Gonzalez Medina

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

3 Creación de tablas espaciales.

OBJETIVOS•Describir el esquema asociado con todas las capas espaciales, tipos, funciones y procedimientos•Explicar cómo los datos espaciales se almacenan utilizando el modelo de objetos de Oracle Spatial•Crear una tabla con una capa espacial•Cargar una vista de metadatos asociada con una capa espacial

1 PASOS TÍPICOS PARA LA GESTIÓN DE DATOS ESPACIALES

1. Creación de una tabla para almacenar datos espaciales.

2. Introducir (almacenar) los datos espaciales3. Actualización de los metadatos espaciales.4. Validación y depuración de geometrías (si

es necesario).5. Creación de índices espaciales.6. Ejecución de consultas espaciales.

Los pasos mencionados en el diagrama son las tareas básicas que suelen realizar para empezar a trabajar con cualquier tipo de datos espaciales. Como primer paso se debe definir una tabla con una o más columnas SDO_GEOMETRY para almacenar los datos geométricos. Esta tabla debe tener algunos atributos no espaciales.

Posteriormente se procede a insertar filas en esta tabla mediante la instrucción INSERT. Hay también maneras de carga masiva de datos espaciales en tablas de Oracle (SQL * LOADER). También es esencial el llevar a cabo una validación de la geometría antes de usarla en las consultas espaciales. Oracle Spatial proporciona la validación y diferentes funciones de depuración que pueden ayudar a eliminar las geometrías no válidas, así como fijar algunas discrepancias. También se deben de actualizar las vistas de metadatos. Posteriormente se procede a crear índices espaciales para mejorar el rendimiento de las consultas espaciales. Por último, se pueden ejecutar una gran variedad de consultas espaciales.

2 ESQUEMA MDSYS

•Cuando se instala Oracle Spatial u Oracle Locator, se crea el usuario MDSYS. El usuario MDSYS es:•El propietario de los tipos espaciales, paquetes, funciones, procedimientos, y los metadatos•Similar al usuario SYS•Un usuario con privilegios With ADMIN option•Esta cuenta está bloqueada por defecto.•Se debe de tener cuidado con esta cuenta de administrador.•Nunca debe de existir la necesidad de iniciar la sesión como el usuario MDSYS.•Nunca se deben de crear datos como el usuario MDSYS.

3 OBJETO SDO_GEOMETRY

La base de datos Oracle8i introdujo un nuevo tipo de datos nativos llamados SDO_GEOMETRY. Se pueden crear tablas con las columnas del tipo de SDO_GEOMETRY de la misma manera que se crean tablas con otros tipos de datos de Oracle. No hay una tabla espacial como tal, sólo una tabla con una o más columnas espaciales del tipo SDO_GEOMETRY. Las tablas espaciales tienen las mismas características que las tablas ordinarias de Oracle, con las cláusulas de almacenamiento (storage) normales; la diferencia radica en que contienen una o más columnas SDO_GEOMETRY. El objeto SDO_GEOMETRY contiene una geometría entera que puede ser asociada a una columna de una tabla de Oracle.Si sabes cómo utilizar la base de datos Oracle, y nunca habías oído hablar de Oracle Spatial, de antemano sabes cómo utilizar gran parte de las características que posee Oracle Spatial. El presente texto te dará la nueva información asociada a cómo cargar, indexar y consultar una columna SDO_GEOMETRY. La columna de SDO_GEOMETRY se accede a través de comandos SQL, y trabaja con todos los servicios de Oracle: SQL * Loader; así como las herramientas de import y export.

El objeto SDO_GEOMETRY tiene cinco campos. Cada campo se describe en detalle en las próximas páginas. Dos de los campos son del tipo numérico y los tres campos restantes son del tipo objeto.

Objeto SDO_GEOMETRY:

Ejemplo :

SQL> CREATE TABLE states ( 2 state VARCHAR2(30), 3 totpop NUMBER(9), 4 geom SDO_GEOMETRY);

SDO_GTYPE NUMBERSDO_SRID NUMBERSDO_POINT SDO_POINT_TYPESDO_ELEM_INFO SDO_ELEM_INFO_ARRAYSDO_ORDINATES SDO_ORDINATE_ARRAY

La ilustración anterior es un ejemplo simple de la creación de una tabla con una columna del tipo SDO_GEOMETRY.Nota: Al crear una columna del tipo SDO_GEOMETRY en versiones anteriores a Oracle Spatial 10g, el tipo debe ser especificado como MDSYS.SDO_GEOMETRY.

El objeto SDO_POINT_TYPE es un campo en el objeto SDO_GEOMETRY. Se utiliza para almacenar un único punto que podrá tener como máximo tres dimensiones. El objeto SDO_POINT_TYPE no debe ser utilizado fuera del objeto SDO_GEOMETRY (es decir, no crear tablas con una columna de tipo SDO_POINT_TYPE).SDO_ELEM_INFO_ARRAY es un campo en el objeto SDO_GEOMETRY. En él se describen los elementos almacenados en esta geometría. Este campo es discutido a detalle más adelante..SDO_ORDINATE_ARRAY es un campo en el objeto SDO_GEOMETRY. Contiene todas las coordenadas de todos los elementos que componen la geometría. Esto se describe con más detalle en las siguientes páginas.

SDO_POINT_TYPE:

x NUMBERy NUMBERz NUMBER

SDO_ELEM_INFO_ARRAY:

VARRAY (1048576) OF NUMBER

SDO_ELEM_INFO_ARRAY:

VARRAY (1048576) OF NUMBER

4 SDO_GTYPEEste es el primero de los cinco campos en el objeto SDO_GEOMETRY. Como se indicó anteriormente, una geometría puede estar compuesta de uno o más elementos. Se puede pensar en SDO_GTYPE como la "visión global". Define qué tipo de geometría se almacena en el objeto SDO_GEOMETRY.

Se debe asociar al SDO_GTYPE más apropiado con la geometría que deseemos representar. Por ejemplo, un único elemento de tipo polígono puede ser representado como un SDO_GTYPE 7, pero de manera óptima, es representado como un SDO_GTYPE 3. Se debe de tener en cuenta que SDO_GTYPE 4 (heterogéneo) sólo debe usarse si es un requisito que la geometría almacene tipos de elementos diferentes. HETEROGENEOUS COLLECTION (Colecciones heterogéneas) no son parte del estándar Open Geospatial Consortium (OGC), y puede no ser soportado por todas las aplicaciones.

GTYPE Descripción

1 POINT La geometría contiene un punto

2 LINESTRING La geometría contiene un “line string”

3 POLYGON La geometría contiene un polígono

4 HETEROGENEOUS

COLLECTION

La geometría es una colección de distintos elementos: puntos, lineas y poligonos.

5 MULTIPOINT La geometría tiene multiples puntos

6 MULTILINESTRING La geometría tiene multiples “line strings”.

7 MULTIPOLYGON La geometría tiene multiples polígonos.

SDO_GTYPE. Define el tipo de geometría almacenada en el objeto. Se especifica en el formato DLTT donde:D identifica el número de dimensionesL identifica el LRSTT identifica el tipo de geometría

El SDO_GTYPE se especifica en el formato DLTT. El valor de la componente “D” puede ser de 2, 3, o 4, lo que representa el número de coordenadas que se utilizan para definir un vértice. El valor de “L” se utiliza para indicar el sistema de referencia lineal (LRS) el cual se explica a detalle más adelante. Los valores van desde 01 hasta 07 en “TT”, el cual es usado para indicar el tipo de geometría. Por ejemplo, un valor de 02 indica una LineString que puede contener líneas rectas o arcos.

Un valor de SDO_GTYPE de 2003 indica que la geometría es un polígono de dos dimensiones sin ningún tipo de referencias lineales.

Nota: Los valores de TT de 08 y 09 se utilizan para representar los sólidos y multisolidos, que no están cubiertos en este texto.

5 SISTEMA DE REFERENCIA LINEAL (Linear Referencing System) LRS

•Es un mecanismo asociado al valor de una medida con un punto 2D o 3D a lo largo de un LineString o un polígono.•El valor de la medida es típicamente proporcional a la distancia registrada desde el inicio de la geometría.•Es comúnmente usado en muchas aplicaciones de SIG, tales como transporte y servicios públicos.

Desde Oracle 9i, la posición de la medida en una geometría LRS está codificada en el segundo dígito de izquierda a derecha en SDO_GTYPE.Si la geometría no es una geometría LRS, entonces no hay ningún cambio en SDO_GTYPE (es decir, 2000-2007, 3000-3007 y 4000-4007).

La posición LRS debe ser coherente en todas las geometrías en la columna.

Las posiciones de medida se almacena en la geometría por la misma razón que la dimensionalidad se almacena en la geometría. Almacenar esta información en la geometría elimina una búsqueda en el diccionario para encontrar la posición de medida, que es especialmente difícil si la geometría viene de una visión compleja (como se discutió previamente).

Una geometría 2D con una medida:Geometrías 2D con una medida debe tener el valor de medida en la tercera posición de cada vértice.

Geometrías 3D (es decir los valores, x, y, z) con una medida:Geometrías 3D con una medida debe almacenar el valor de medida en la cuarta posición de cada vértice.

6 MÉTODOS CON SDO_GTYPE

GET_GTYPE() devuelve el tipo de geometría, utilizando dos dígitos

Las tablas deben ser renombradas cuando accedemos a los atributos o métodos en las columnas que tienen un tipo de dato objeto.En el ejemplo anterior, GEOD_STATES tiene un alias, que es g . Esto permite el acceso a GET_GTYPE () del objeto SDO_GEOMETRY.

SQL> SELECT g.geom.get_gtype() state_gtype FROM geod_states g WHERE g.state = 'Delaware';STATE_GTYPE----------- 3

GET_DIMS() devuelve el número de dimensiones:

GET_LRS_DIM() devuelve la dimensión LRS:

SQL> SELECT s.geom.get_dims() state_dims FROM geod_states s WHERE s.state = 'Delaware';STATE_DIMS---------- 2

GET_LRS_DIM() devuelve la dimensión LRS:

SQL> SELECT s.geom.get_lrs_dim() state_lrs_dim FROM geod_states s Where s.state = 'Delaware';STATE_LRS_DIM------------- 0

Hasta ahora, sólo el primero de los cinco campos en el objeto SDO_GEOMETRY ha sido discutido. Los siguientes dos campos que analizaremos serán

Campo SDO_SRID: Este es el segundo campo en el objeto SDO_GEOMETRY. Es utilizado para asociar los datos espaciales con un sistema de coordenadas. Oracle Spatial tiene una tabla de diccionario llamado MDSYS.CS_SRS, que enumera todos los sistemas de coordenadas. El valor establecido en el ámbito de SDO_SRID debe coincidir con un valor en el ID de referencia espacial (SRID) de la tabla MDSYS.CS_SRS, o en su caso ser NULL. Todas las geometrías en una columna deben tener el mismo SDO_SRID. Más detalles acerca de los sistemas de coordenadas están cubiertos en las lecciones titulado "Sistemas de coordenadas: Información general" y "Conceptos Avanzados Sistemas de coordenadas".

Campo SDO_POINT: Este es el tercer campo en el objeto SDO_GEOMETRY. Esta es una forma optimizada para almacenar un único punto en el objeto SDO_GEOMETRY. El campo SDO_POINT debe utilizarse en el contexto del objeto SDO_GEOMETRY (Oracle Spatial no funciona con una columna definida como SDO_POINT_TYPE). Si solo se requiere almacenar un único punto (2D o 3D) se sugiere sea colocado en el campo de SDO_POINT del objeto SDO_GEOMETRY. El campo SDO_POINT proporciona almacenamiento y rendimiento óptimos. El valor almacenado en el campo SDO_POINT se ignora si el SDO_ELEM_INFO y campos SDO_ORDINATES son not NULL.

Campo SDO_ELEM_INFO: Este es el cuarto campo en el objeto SDO_GEOMETRY. Una geometría contiene uno o más elementos. Si el único elemento que se va a almacenar es un punto, se sugiere sea almacenado en el campo SDO_POINT, una descripción de cada elemento que compone la geometría se almacena en el campo SDO_ELEM_INFO.El campo de SDO_ELEM_INFO es un VARRAY (varying-sized array) de tipo numérico. Los valores que se coloquen en el campo SDO_ELEM_INFO deben ser considerados en grupos de tres números. Los valores representan el triplete:

Desplazamiento de coordenada: Este es un desplazamiento en el campo SDO_ORDINATES (descrito más adelante). Una geometría puede estar compuesta de uno o más elementos. El primer elemento de una geometría comienza siempre en la posición 1.

Tipo de elemento: Este es el tipo de elemento (punto, línea, polígono, …). El tipo de elemento es también llamado “eType”. Todos los valores posibles para el tipo de elemento se discuten en la parte restante de esta unidad.

Interpretación: Posee un significado diferente dependiendo del valor del tipo de elemento. Puede significar que todos los puntos que integran un elemento están conectados con líneas rectas, arcos circulares, o podría significar que es el header (encabezado) de un elemento compuesto.

Campo SDO_ORDINATES: Este es el quinto campo en el objeto SDO_GEOMETRY. Este campo es una VARRAY de tipo numérico. Contiene todas las coordenadas que forman los elementos descritos por el campo SDO_ELEM_INFO.

Nota: Tanto el SDO_ORDINATES y SDO_ELEM_INFO se definen como VARRAY, cuya longitud máxima es de 1,048,576.

En el caso de SDO_ELEM_INFO, el número máximo de elementos simples que cualquier geometría puede tener es de 349,525 (1,048,576 / 3).

En el caso de SDO_ORDINATES, si la geometría tiene coordenadas de dos dimensiones, puede llegar a tener hasta 524,288. Si la geometría es de tres dimensiones (o de dos dimensiones con una medida de LRS), el número máximo de coordenadas es 349,525. Si hay coordenadas de cuatro dimensiones en la geometría, el número máximo de coordenadas será de 262,144.

7 POINT

Este es un ejemplo de almacenamiento de un único punto en el campo de SDO_POINT. El campo SDO_POINT optimiza el almacenamiento de un solo punto. Para generar un índice espacial en el campo SDO_POINT, el SDO_ELEM_INFO y campos SDO_ORDINATES deben ser nulos. El campo SDO_POINT es ignorado por Oracle Spatial si el SDO_ELEM_INFO y campos SDO_ORDINATES son NOT NULL.

El ejemplo muestra el uso de un constructor de SDO_GEOMETRY (resaltado), que es la sintaxis específica para los tipos de objetos.

Nota: Si se desea almacenar un punto 2D en el campo SDO_POINT, se debe establecer el valor de z como NULL, por ejemplo:

INSERT INTO TELEPHONE_POLES VALUES (attribute_1, attribute_n, MDSYS.SDO_GEOMETRY (2001, null, MDSYS.SDO_POINT_TYPE(-75.2,43.7,NULL), null, null));

SQL> INSERT INTO TELEPHONE_POLES 2> VALUES (attribute_1, …, attribute_n, 3> SDO_GEOMETRY ( 4> 3001, null, 5> SDO_POINT_TYPE (-75.2,43.7,200), 6> null, null) 7> );

Hasta el momento, sólo se ha visto la forma de almacenar datos en el campo de SDO_POINT del objeto SDO_GEOMETRY. Ahora se empieza a observar el almacenamiento de elementos en los campos de VARRAY del objeto SDO_GEOMETRY. El cuadro que se presenta resume la forma de representar un elemento en el campo de SDO_ELEM_INFO.

Como se dijo anteriormente, una geometría puede estar compuesta de uno o más elementos. Si la geometría no es un único punto almacenado en el campo SDO_POINT, entonces cada elemento tendrá una entrada de valor triple en el varray SDO_ELEM_INFO (coordenada de desplazamiento, tipo de elemento, interpretación).

Este cuadro NO muestra el desplazamiento de coordenadas. Este cuadro sólo describe las otras dos partes del valor del triplete (tipo de elemento, interpretación).

No se debe confundir con los tipos de elementos SDO_GTYPEs, ya que éstos representan el tipo de geometría que se almacena.

8 RESUMEN DE TIPOS DE ELEMENTOS

Elemento de tipo 0: Se utiliza para el modelo de un elemento que no está actualmente soportado por Oracle Spatial.

Elemento de tipo 1: Para almacenar puntos o multipuntos. El campo de interpretación describe cuántos puntos son almacenados.

Elemento de tipo 2: Para almacenar LineStrings

Interpretación 1 representa una LineString convencional conectada con líneas rectas. Interpretación 2 representa una LineString compuesta de uno o más arcos circulares.

Elemento de tipo 3: En un formato de 4 dígitos, 1003 representa un polígono de tipo anillo exterior y 2003 representa un anillo interno:

Interpretación 1: polígono convencional conectada con las líneas rectasInterpretación 2: Arc polygon (polígono arco) , conectado con arcos circularesInterpretación 3: Rectángulo optimizado , sólo requiere de representar los puntos de la parte inferior izquierda y superior derecha del rectánguloInterpretación 4: círculo optimizado (no es realmente un polígono, pero es clasificado como polígono porque tiene área)

Elemento de tipo 4: LineString compuesta, tiene elementos contiguos que contiene líneas rectas y arcos circulares. El campo de interpretación determina cuántos subelementos (es decir, los valores del triplete en el ámbito SDO_ELEM_INFO) componen la LineString.

Elemento de tipo 5: Un valor 1005 representa un polígono compuesto de tipo anillo exterior (un elemento contiguo que contiene líneas rectas y arcos circulares). 2005 representa un polígono compuesto que es un anillo interior . El campo de interpretación determina cuántos subelementos (es decir, los valores del triplete en el campo de SDO_ELEM_INFO) componen este polígono compuesto.

9 LINESTRING

(x1,y1)

(x2,y2)

(x3,y3) (x4,y4)

En la tabla mostrada en la figura podemos apreciar el valor del triplete (desplazamiento de coordenada, tipo de elemento, interpretación) que se almacena en el campo de SDO_ELEM_INFO. La mayoría de los desplazamientos de coordenadas que se ve en los ejemplos siguientes comenzará con el número 1, porque los ejemplos que muestran tienen geometrías con un solo elemento. Hay algunos ejemplos con geometrías que tienen más de un elemento y en esos casos, se pueden observar los valores correspondientes al desplazamiento de coordenadas.

El tipo de elemento 2 corresponde a un elemento LineString. Un elemento LineString se compone de uno o más segmentos contiguos.

La interpretación de un tipo de elemento 2 define cómo conectar los segmentos que componen al LineString. En este ejemplo, la interpretación es 1 y corresponde a una LineString cuyos segmentos están conectados con líneas rectas ( LineString convencional).

LineString que forman un anillo no tienen ninguna área implicada.Los segmentos de línea pueden cruzar entre sí.

Nota: SDO_GTYPE para esta geometría es 2002 (un solo elemento LineString). Se debe de tener en cuenta que SDO_GTYPE es el primer campo del objeto SDO_GEOMETRY y describe toda la geometría.

10 ARC STRING

En la tabla mostrada se puede observar el valor del triplete (desplazamiento de coordenda, tipo de elemento, interpretación) que se almacenará en el campo de SDO_ELEM_INFO.

El tipo de elemento 2 corresponde a un elemento de tipo LineString. Un elemento LineString se compone de uno o más segmentos contiguos.

La interpretación define cómo se han de conectar los segmentos que componen el LineString. En este ejemplo, la interpretación es 2, y corresponde a una LineString cuyos segmentos están conectados con arcos circulares. Un arco está definido por tres puntos distintos de la circunferencia de un círculo: el primer punto, el último punto, y cualquier punto distinto en medio de estos dos. El último punto de un arco es el primer punto del arco siguiente.

Arcos que cierran y formar un anillo no tienen ninguna área implicada.

Los arcos pueden cruzar entre sí.

Nota: SDO_GTYPE para esta geometría es 2002 (un solo elemento de tipo LineString).

(x5,y5) (x7,y7)(x1,y1)

(x3,y3)

(x4,y4)(x2,y2)

(x6,y6)

11 POLYGON

En general, el tipo de elemento 3 corresponde a un polígono. En lugar de especificar un tipo de elemento 3, se recomienda determinar claramente si un polígono anillo exterior o un anillo interior. Polígonos de anillo exterior se representan como el tipo de elemento 1003, y polígonos de anillo interior son representados como el tipo de elemento de 2003.

Los polígonos anillo exterior deben almacenar sus coordenadas en sentido contrario a las manecillas del reloj.

El polígono anillo interior debe almacenar sus coordenadas en sentido horario.

Cumplir con los comentarios anteriores permite cálculos más rápidos.

El último punto de un polígono debe ser el mismo que el primer punto. A pesar de que este punto podría ser información un tanto obvia, debe repetirse para ajustarse al estándar del Open Geospatial Consortium (OGC).

La interpretación define cómo conectar los segmentos que conforman el polígono. En este ejemplo, la interpretación es 1, y corresponde a un polígono cuyos segmentos están conectados con líneas rectas (un polígono convencional).

Los segmentos de línea de los polígonos NO se cruzan entre sí.

Nota: SDO_GTYPE para esta geometría es 2003 (un único polígono).

(x4,y4)

(x5,y5)

(x3,y3)(x2,y2)

(x6,y6)(x1,y1)

12 ARC POLYGON

El tipo de elemento de 1003 indica que es un polígono anillo exterior.

La interpretación 2 indica que los segmentos de línea son arcos circulares.

Las coordenadas que lo conforman se almacenan en sentido anti horario.

La interpretación define cómo se conectan los segmentos que conforman el polígono. En este caso, la interpretación es de 2, y corresponde a un polígono cuyos segmentos están conectados con arcos circulares. Un arco circular está definido por tres puntos.

Nota: SDO_GTYPE para esta geometría es 2003 (un único polígono).

(x7,y7)

(x6,y6)

(x5,y5)

(x9,y9) (x3,y3)

(x4,y4)

(x1,y1)

(x8,y8)

(x2,y2)

13 RECTANGLE

(x2,y2)

(x1,y1)

El tipo de elemento de 1003 corresponde a un polígono anillo exterior.Si el polígono fuera un anillo interior, estaría representado, como el tipo de elemento 2003.

En este ejemplo, la interpretación es 3, y corresponde a un rectángulo optimizado para el almacenamiento. Sólo la parte inferior izquierda y superior derecha de los puntos del rectángulo se almacenan. Un rectángulo optimizado tiene área.

Nota: SDO_GTYPE para esta geometría es 2003 (un único polígono).

14 CIRCLE

El tipo de elemento de 1003 indica que es un polígono anillo exterior.En este ejemplo, la interpretación es de 4, y corresponde a un círculo. El círculo está representado por cualquiera de los tres puntos distintos que integran la circunferencia.

Nota: SDO_GTYPE para esta geometría es 2003 (un único polígono).

(x1,y1)(x2,y2)

(x3,y3)

15 COMPOUND LINE STRING

El tipo de elemento 4 corresponde a una LineString compuesta. Estos tipos de elementos son conectados con líneas rectas o con arcos circulares. Una LineString tiene las mismas propiedades que una LineString simple. Se permiten líneas que se crucen entre sí; sin embargo ninguna zona o figura que formen tendrá área.Una LineString se define por una serie de sub-elementos contiguos. Cada subelemento es una línea recta o un arco circular. El primero es un triplete de cabecera (header). La interpretación en la cabecera indica cuántos subelementos forman parte de la LineString compuesta.Todos los subelementos deben ser del tipo de elemento 2 (interpretación 1 ó 2) y deben ser contiguos (es decir, el último punto de un subelemento es el primer punto del siguiente subelemento).En el ejemplo mostrado en la figura se puede observar que los desplazamientos de coordenadas de cada sub-elemento son diferentes y corresponden a donde el subelemento comienza a definirse en el arreglo de coordenadas.Nota: SDO_GTYPE para esta geometría es 2002 (un solo elemento de tipo LineString).

(x6,y6)

(x3,y3)

(x1,y1)

(x5,y5)

(x4,y4)

(x2,y2)

(x7,y7)

(x8,y8)

(x9,y9)

El primer triplete es denominado “encabezado” Elemento de tipo 4: nos indica que tenemos una LienString compuesta

Interpretación 3: indica el número de subelementos por los cuales está formada la LineString compuesta.

16 COMPOUND POLYGON

El tipo de elemento 5 corresponde a un polígono compuesto.

Un polígono compuesto se define por una serie de subelementos contiguos. Cada subelemento es una línea recta o un arco circular. El primero es un triplete de cabecera. La interpretación en la cabecera indica cuántos subelementos (o tripletas adicionales en SDO_ELEM_INFO) componen este polígono compuesto. Todos los subelementos de un polígono compuesto debe ser del tipo de elemento 2 (segmentos) con la interpretación de 1 o 2, y todos los subelementos deben ser contiguos (es decir, el último punto de un subelemento es el primer punto de la siguiente subelemento ).En la figura, se puede observar que los desplazamientos de coordenadas de cada subelemento son diferentes y corresponden a lugar exacto donde comienza el subelemento

Note: SDO_GTYPE para esta geometria es de 2003 (un único elemento de tipo polígono).

Los polígonos compuestos tienen las mismas propiedades como polígonos (es decir, los segmentos de línea de los polígonos NO se cruzan entre sí).

El triplete de encabezado define a los subelementos.Tipo de elemento es 1005: Indica que es un polígono anillo exteriorInterpretación 2: nos marca el número de subelementos que formarán al polígono

(x4,y4)

(x5,y5)

(x6,y6)

(x7,y7)

(x2,y2)

(x3,y3)(x1,y1)

17 REGLAS PARA ELEMENTOS DE TIPO “POLÍGONO”

Este es un ejemplo de un polígono que posee huecos. El anillo exterior tiene es un tipo de elemento de 1003, y el anillo interior es un tipo de elemento de 2003.Huecos pueden contener islas, y las islas pueden contener huecos. El área se calcula como la diferencia entre exterior e interior de los polígonos.Nota: SDO_GTYPE para esta geometría es 2003 (un único polígono ).

18 POLÍGONO CON HUECOS

(x4,y4)

(x5,y5)

(x3,y3)(x2,y2)

(x6,y6)(x1,y1)

(x7,y7)

(x8,y8)

19 POLÍGONO COMPUESTO CON HUECOS

Este es un ejemplo de un polígono compuesto con un hueco. El anillo exterior es un tipo de elemento 1005 (polígono compuesto) y el anillo interior es un tipo de elemento 2003 (rectángulo optimizado).

El polígono compuesto tiene tres entradas en el campo SDO_ELEM_INFO. El primero es un triplete de cabecera (1,1005,2). "2" indica dos tripletes adicionales, los cuales definen los subelementos (1,2,1) y (7,2,2).

Nota: SDO_GTYPE de esta geometría es 2003 (un único polígono ). Un polígono con uno o más elementos vacío todavía puede ser considerado como un único polígono (que no es clasificado como un MultiPolygon).

(x4,y4)

(x5,y5)

(x3,y3)

(x6,y6)

(x7,y7)

(x1,y1)

(x2,y2)(x9,y9)

(x10,y10)

(x8,y8)

20 CONSTRUYENDO GEOMETRÍAS

Utilice la instrucción SQL “INSERT” para la construcción de las geometrías y la insercion de las mismas en las tablas.El constructor SDO_GEOMETRY es llamado para crear una instancia de un objeto geometrico.

INSERT INTO LINES VALUES (attribute_1, …. attribute_n,SDO_GEOMETRY ( 2002, null, null, SDO_ELEM_INFO_ARRAY (1,2,1), SDO_ORDINATE_ARRAY ( 10,10, 20,25, 30,10, 40,10)));

(10,10) (30,10) (40,10)

Anteriormente, se vio la forma de insertar un punto a través de la utilización de SDO_POINT.

Este es el primer ejemplo para insertar datos de carácter geométrico utilizando los campos (SDO_ELEM_INFO y SDO_ORDINATES) del objeto SDO_GEOMETRY.

La instrucción INSERT utiliza un constructor SDO_GEOMETRY, establece el SRID y los campos de SDO_POINT a null, y utiliza el SDO_ELEM_INFO_ARRAY y constructores SDO_ORDINATE_ARRAY para rellenar los campos faltantes.

Nota: Cuando almacenemos un valor NULL en una columna que tiene asociado un tipo de dato geometrico, solo bastara con colocar un solo NULL y no uno por cada valor de SDO_GEOMETRY.

Ejemplo:

correctoINSERT INTO LINES VALUES (attribute1, … attribute_n, NULL);

incorrectoINSERT INTO LINES VALUES (attribute1, … attribute_n, SDO_GEOMETRY(NULL, NULL, NULL, NULL, NULL));

Cuando se llama a un constructor, se utiliza el nombre del tipo y no el nombre de columna o nombre de campo.

INSERT INTO PARKS VALUES( attribute_1, …, attribute_n, SDO_GEOMETRY( 2003, null, null, SDO_ELEM_INFO_ARRAY (1,1005,2, 1,2,1, 7,2,2, 17,2003,3), SDO_ORDINATE_ARRAY (10,50,10,30,50,30,50,50,45,60, 30,50,15,60,10,50,25,35,35,40)));

(45,60)

(50,50)

(50,30)

(30,50)

(15,60)

(10,50)

(10,30)(25,35)

(35,40)

(10,50)

Este es otro ejemplo para insertar información en los campos (SDO_ELEM_INFO y SDO_ORDINATES) del objeto SDO_GEOMETRY.

En este ejemplo se inserta el polígono compuesto con un hueco, mismo que se habia presentado con anterioridad.

La instrucción INSERT utiliza un constructor SDO_GEOMETRY, establece el SRID y campos SDO_POINT a null, y utiliza constructores SDO_ELEM_INFO_ARRAY y SDO_ORDINATE_ARRAY para rellenar los campos correspondientes.

Se debe tener en cuenta que cuando se llama a un constructor, se utiliza el nombre del tipo y no el nombre de la columna o el nombre del campo. Para el campo SDO_ELEM_INFO, se debe de escribir el nombre SDO_ELEM_INFO_ARRAY y el campo SDO_ORDINATES es del tipo SDO_ORDINATE_ARRAY.

Nota: SDO_GTYPE de esta geometría es 2003 (un único polígono en 2D). Un polígono con uno o más huecos todavía puede ser considerado como un único polígono (que no es clasificado como un MultiPolygon).

21 REGLAS PARA INSERTAR GEOMETRÍAS EN TABLAS ESPACIALES.

Todas las geometrías deben tener la misma dimensión en una tabla espacial.El valor D en SDO_GTYPE debe ser el mismo.

Todas las geometrías deben estar asociadas con el mismo sistema de coordenadas.El valor SDO_SRID debe ser el mismo.

2005 30055. MULTIPOINT

2004 30044. HETEROGENEOUS

COLLECTION

2003 30033. POLYGON

2006 30066. MULTILINESTRING

2007 30077. MULTIPOLYGON

2002 30022. LINESTRING

2001 30011. POINT

4 dÍgitos para el GTYPEs: Incluida la dimensión.

2D 3D

SDO_GTYPE

22 METADATOS ESPACIALES

Por cada columna SDO_GEOMETRY, se deben de insertar los metadatos en una vista de diccionario de datos llamada USER_SDO_GEOM_METADATA.

Usted es responsable de la actualización de la vista USER_SDO_GEOM_METADATA con información de metadatos sobre cualquier columna SDO_GEOMETRY que cree.

Oracle Spatial se asegura de que la vista ALL_SDO_GEOM_METADATA se actualice con el obejtivo de reflejar las filas que se insertan en USER_SDO_GEOM_METADATA.

ALL_SDO_GEOM_METADATA contiene información de metadatos sobre todas las tablas Esta vista contiene todos los metadatos para el usuario de Oracle que se ha identificado con el nombre “X”, y todos los metadatos para las columnas de las geometrías para las cuales “x” tiene permisos de select.

Oracle Spatial nunca actualiza o elimina información de la vista de USER_SDO_GEOM_METADATA.

Nota: Usted debe actualizar esta vista antes de crear índices espaciales.

Actualizar la vista USER_SDO_GEOM_METADATA con la información de metadatos acerca de cada columna SDO_GEOMETRY.

Las siguientes vistas están disponibles para cada usuario:USER_SDO_GEOM_METADATA

ALL_SDO_GEOM_METADATA:Esta contiene información de metadatos sobre todas las tablas espaciales sobre las cuales el usuario tiene privilegios de SELECTNunca se debe de insertar información en esta vista, ya que su propósito principal es mostrar información.

USER_SDO_GEOM_METADATA

DESCRIBE USER_SDO_GEOM_METADATA Name Null? Type -------------- ---------- ------------------ TABLE_NAME NOT NULL VARCHAR2(32) COLUMN_NAME NOT NULL VARCHAR2(1024) DIMINFO SDO_DIM_ARRAY SRID NUMBER

MDSYS.SDO_DIM_ARRAY:

VARRAY(4) OF SDO_DIM_ELEMENT

MDSYS.SDO_DIM_ELEMENT object

SDO_DIMNAME VARCHAR2(64) SDO_LB NUMBER

SDO_UB NUMBER

SDO_TOLERANCE NUMBER

USER_SDO_GEOM_METADATA

Descripcion de la vista USER_SDO_GEOM_METADATA

TABLE_NAME: El nombre de la tabla que contiene la columna SDO_GEOMETRY

COLUMN_NAME: el nombre de la columna SDO_GEOMETRY

DIMINFO: muestra el VARRAY de los objetos SDO_DIM_ELEMENT.Aquí es donde se define el sistema de coordenadas (2, 3 ó 4 ejes pueden ser definidos). Los campos del objeto SDO_DIM_ELEMENT se describen mas adelante.

SRID: SRID es un acrónimo para el sistema de identificación de referencia espacial. Este puede recibir los valores NULL o coincidir con un valor en la columna de la tabla de SRID MDSYS.CS_SRS, donde todos los sistemas de coordenadas están definidos.

USER_SDO_GEOM_METADATA: SDO_DIM_ELEMENT Object

SDO_DIMNAME, SDO_LB, y SDO_UB, SDO_TOLERANCE son los campos del objeto SDO_DIM_ELEMENT.

SDO_DIMNAME: es una cadena de caracteres para identificar el eje. Este valor no es utilizado actualmente por Oracle Spatial 11g; fue utilizado en versiones previas a Oracle 9i.

SDO_LB: LB es un acrónimo para el límite inferior. Representa el valor más mas pequeño para esta dimensión.

SDO_UB: UB es un acrónimo para el límite superior. Representa el mayor valor posible para esta dimensión.

SDO_TOLERANCE:

Es la distancia requerida entre dos coordenadas de manera que sean considerados como coordenadas individuales.

Es utilizado por la indexación de Oracle Spatial

Datos simples: La unidad de tolerancia y la unidad de datos son los mismos.

Datos geodésicos: Para los datos almacenados con longitud y latitud, la unidad de la tolerancia es metros (es decir, 0,5m de tolerancia ). Los márgenes más pequeños de tolerancia permitidos para los datos geodésicos son de 0,05 metros (5 centímetros).

23 INSERTANDO DATOS EN LA VISTAUSER_SDO_GEOM_METADATA.

INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('ROADS', 'GEOMETRY',SDO_DIM_ARRAY (

SDO_DIM_ELEMENT('Long', -180, 180, 0.5),SDO_DIM_ELEMENT('Lat', -90, 90, 0.5)),

8307);

Para los datos geodésicos, en el eje x los límites deben ser desde -180 hasta 180, y en el eje y los límites deben ser desde -90 hasta 90.

Establezca el mismo valor en la columna SRID de la vista USER_SDO_GEOM_METADATA que aquel que inserto en el campo de SDO_SRID.

Por cada columna de carácter geométrico, una fila de metadatos debe ser insertada en USER_SDO_GEOM_METADATA. Esto se hace con insert convencional.Nota: Usted debe especificar el eje "x" antes que el eje “y”.