Base de Datos Espaciales
Base de Datos Espaciales
Base de Datos Espaciales
Creacin de tablas
espaciales.
OBJETIVOS
Describir
1.
2.
3.
4.
5.
6.
Los pasos mencionados en el diagrama son las tareas bsicas que suelen realizar para
empezar a trabajar con cualquier tipo de datos espaciales. Como primer paso se debe
definir una tabla con una o ms columnas SDO_GEOMETRY para almacenar los datos
geomtricos. Esta tabla debe tener algunos atributos no 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 sesin 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, slo una tabla con una o ms columnas
espaciales del tipo SDO_GEOMETRY. Las tablas espaciales tienen las mismas
caractersticas que las tablas ordinarias de Oracle, con las clusulas de almacenamiento
(storage) normales; la diferencia radica en que contienen una o ms columnas
SDO_GEOMETRY. El objeto SDO_GEOMETRY contiene una geometra entera que
puede ser asociada a una columna de una tabla de Oracle.
Si sabes cmo utilizar la base de datos Oracle, y nunca habas odo hablar de Oracle
Spatial, de antemano sabes cmo utilizar gran parte de las caractersticas que posee
Oracle Spatial. El presente texto te dar la nueva informacin asociada a cmo cargar,
indexar y consultar una columna SDO_GEOMETRY. La columna de SDO_GEOMETRY
se accede a travs 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 prximas pginas. Dos de los campos son del tipo numrico y los tres
campos restantes son del tipo objeto.
Objeto SDO_GEOMETRY
SDO_GTYPE
SDO_SRID
SDO_POINT
SDO_ELEM_INFO
SDO_ORDINATES
NUMBER
NUMBER
SDO_POINT_TYPE
SDO_ELEM_INFO_ARRAY
SDO_ORDINATE_ARRAY
Ejemplo :
x
y
z
NUMBER
NUMBER
NUMBER
SDO_ELEM_INFO_ARRAY:
4 SDO_GTYPE
Este es el primero de los cinco campos en el objeto SDO_GEOMETRY. Como se indic
anteriormente, una geometra puede estar compuesta de uno o ms elementos. Se puede
pensar en SDO_GTYPE como la "visin global". Define qu tipo de geometra se almacena
en el objeto SDO_GEOMETRY.
Se debe asociar al SDO_GTYPE ms apropiado con la geometra que deseemos
representar. Por ejemplo, un nico elemento de tipo polgono 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 (heterogneo) slo debe usarse si es
un requisito que la geometra almacene tipos de elementos diferentes. HETEROGENEOUS
COLLECTION (Colecciones heterogneas) no son parte del estndar Open Geospatial
Consortium (OGC), y puede no ser soportado por todas las aplicaciones.
GTYPE
Descripcin
1 POINT
2 LINESTRING
3 POLYGON
4 HETEROGENEOUS
COLLECTION
5 MULTIPOINT
6 MULTILINESTRING
7 MULTIPOLYGON
Desde Oracle 9i, la posicin de la medida en una geometra LRS est codificada en el
segundo dgito de izquierda a derecha en SDO_GTYPE.
Si la geometra no es una geometra LRS, entonces no hay ningn cambio en
SDO_GTYPE (es decir, 2000-2007, 3000-3007 y 4000-4007).
La posicin LRS debe ser coherente en todas las geometras en la columna.
Las posiciones de medida se almacena en la geometra por la misma razn que la
dimensionalidad se almacena en la geometra. Almacenar esta informacin en la
geometra elimina una bsqueda en el diccionario para encontrar la posicin de medida,
que es especialmente difcil si la geometra viene de una visin compleja (como se
discuti previamente).
Hasta ahora, slo el primero de los cinco campos en el objeto SDO_GEOMETRY ha sido
discutido. Los siguientes dos campos que analizaremos sern
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 geometras en una columna deben tener el mismo SDO_SRID. Ms
detalles acerca de los sistemas de coordenadas estn cubiertos en las lecciones titulado
"Sistemas de coordenadas: Informacin 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
geometra contiene uno o ms elementos. Si el nico elemento que se va a almacenar es
un punto, se sugiere sea almacenado en el campo SDO_POINT, una descripcin de cada
elemento que compone la geometra se almacena en el campo SDO_ELEM_INFO.
El campo de SDO_ELEM_INFO es un VARRAY (varying-sized array) de tipo numrico.
Los valores que se coloquen en el campo SDO_ELEM_INFO deben ser considerados en
grupos de tres nmeros. Los valores representan el triplete:
Desplazamiento de coordenada: Este es un desplazamiento en el campo
SDO_ORDINATES (descrito ms adelante). Una geometra puede estar compuesta de
uno o ms elementos. El primer elemento de una geometra comienza siempre en la
posicin 1.
Tipo de elemento: Este es el tipo de elemento (punto, lnea, polgono, ). El tipo de
elemento es tambin llamado eType. Todos los valores posibles para el tipo de elemento
se discuten en la parte restante de esta unidad.
Interpretacin: Posee un significado diferente dependiendo del valor del tipo de elemento.
Puede significar que todos los puntos que integran un elemento estn conectados con
lneas rectas, arcos circulares, o podra significar que es el header (encabezado) de un
elemento compuesto.
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 especfica 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:
LINESTRING
(x2,y2)
(x1,y1)
(x3,y3)
(x4,y4)
10
ARC STRING
(x2,y2)
(x4,y4)
(x1,y1)
(x3,y3)
(x5,y5)
(x7,y7)
(x6,y6)
11
POLYGON
(x5,y5)
(x6,y6)
(x1,y1)
(x4,y4)
(x2,y2)
(x3,y3)
12
ARC POLYGON
(x6,y6)
(x7,y7)
(x5,y5)
(x8,y8)
(x4,y4)
(x9,y9)
(x1,y1)
(x3,y3)
(x2,y2)
13
RECTANGLE
(x2,y2)
(x1,y1)
El tipo de elemento de 1003 corresponde a un polgono anillo exterior.
Si el polgono fuera un anillo interior, estara representado, como el tipo de elemento 2003.
En este ejemplo, la interpretacin es 3, y corresponde a un rectngulo optimizado para el
almacenamiento. Slo la parte inferior izquierda y superior derecha de los puntos del
rectngulo se almacenan. Un rectngulo optimizado tiene rea.
Nota: SDO_GTYPE para esta geometra es 2003 (un nico polgono).
14
CIRCLE
(x2,y2)
(x1,y1)
(x3,y3)
15
(x4,y4)
(x5,y5)
(x3,y3)
(x6,y6)
(x2,y2)
(x7,y7)
(x9,y9)
(x8,y8)
(x1,y1)
16
COMPOUND POLYGON
(x6,y6)
(x7,y7)
(x1,y1)
(x4,y4)
(x5,y5)
(x3,y3)
(x2,y2)
El tipo de elemento 5 corresponde a un polgono compuesto.
Un polgono compuesto se define por una serie de subelementos contiguos. Cada
subelemento es una lnea recta o un arco circular. El primero es un triplete de cabecera. La
interpretacin en la cabecera indica cuntos subelementos (o tripletas adicionales en
SDO_ELEM_INFO) componen este polgono compuesto. Todos los subelementos de un
polgono compuesto debe ser del tipo de elemento 2 (segmentos) con la interpretacin 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 polgono).
Los polgonos compuestos tienen las mismas propiedades como polgonos (es decir, los
segmentos
de
lnea
de
los
polgonos
NO
se
cruzan
entre
s).
17
18
(x5,y5)
(x8,y8)
(x6,y6)
(x1,y1)
(x4,y4)
(x7,y7)
(x2,y2)
(x3,y3)
Este es un ejemplo de un polgono 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 polgonos.
Nota: SDO_GTYPE para esta geometra es 2003 (un nico polgono ).
19
(x5,y5)
(x7,y7)
(x8,y8)
(x1,y1)
(x2,y2)
(x4,y4)
(x6,y6)
(x10,y10)
(x9,y9)
(x3,y3)
20
CONSTRUYENDO GEOMETRAS
(10,10)
(30,10)
(40,10)
a travs de la utilizacin de
Este es el primer ejemplo para insertar datos de carcter geomtrico utilizando los
campos (SDO_ELEM_INFO y SDO_ORDINATES) del objeto SDO_GEOMETRY.
La instruccin 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:
correcto
INSERT INTO LINES VALUES (attribute1, attribute_n, NULL);
incorrecto
INSERT INTO LINES VALUES (attribute1, attribute_n,
SDO_GEOMETRY(NULL, NULL, NULL, NULL, NULL));
(15,60)
(10,50)
(10,50)
(10,30)
(45,60)
(30,50)
(50,50)
(35,40)
(25,35)
(50,30)
21
Todas las geometras deben tener la misma dimensin en una tabla espacial.
El valor D en SDO_GTYPE debe ser el mismo.
Todas las geometras deben estar asociadas con el mismo sistema de coordenadas.
El valor SDO_SRID debe ser el mismo.
SDO_GTYPE
2D
3D
1. POINT
2001
3001
2. LINESTRING
2002
3002
3. POLYGON
2003
3003
4. HETEROGENEOUS
2004
3004
5. MULTIPOINT
2005
3005
6. MULTILINESTRING
2006
3006
7. MULTIPOLYGON
2007
3007
COLLECTION
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 actualizacin de la vista USER_SDO_GEOM_METADATA con
informacin 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 informacin 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 geometras para las cuales
x tiene permisos de select.
Oracle
Spatial
nunca
de
la
vista
de
Nota: Usted debe actualizar esta vista antes de crear ndices espaciales.
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 acrnimo para el sistema de identificacin 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 estn 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 acrnimo para el lmite inferior. Representa el valor ms mas
pequeo
para
esta
dimensin.
SDO_UB: UB es un acrnimo para el lmite superior. Representa el mayor valor posible
para esta dimensin.
SDO_TOLERANCE:
Es la distancia requerida entre dos coordenadas de manera que sean considerados como
coordenadas individuales.
23
Para los datos geodsicos, en el eje x los lmites deben ser desde -180 hasta 180, y en el
eje
y
los
lmites
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 carcter geomtrico, 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.