1. 4
Definiendo
colecciones
geométricas
OBJETIVOS
•Construir geometrías como multipoint, multiline, y multipolygon.
•Describir la forma de construir un punto de orientación.
•Identificar los constructores y métodos de SDO_GEOMETRY.
Este es el primer ejemplo de una colección geometría. Una colección es una geometría
que contiene varios elementos. En la figura se puede apreciar una colección de tipo
multipunto. Para una multipunto, el tipo de elemento es 1, y la interpretación corresponde
con el número de puntos que pertenecen a la colección.
Nota: SDO_GTYPE para esta geometría es 2005 (multipunto 2D). Recuerda que
SDO_GTYPE es el primer campo del objeto SDO_GEOMETRY, el cual describe toda la
geometría.
1 MULTIPOINT
Ordinate Offset Element
Type
Interpretation
1 1 5
Número de puntos que forman
parte de la colección.
2. El SDO_GTYPE 2005 indica que se trata de un elemento de tipo multipunto de dos
dimensiones.
El valor de la interpretación en el primer triplete SDO_ELEM_INFO_ARRAY define el número
de puntos que formarán parte de la colección.
SDO_GEOMETRY (2005, NULL, NULL,
SDO_ELEM_INFO_ARRAY (1,1,2, 1,1,1, 3,1,1),
SDO_ORDINATE_ARRAY (65,5, 70,7))
2 MULTILINESTRING
También es posible tener una colección de linestring s; siempre y cuando estas no se
encuentren conectadas entre si.
En la figura se muestra, la colección de varias polilineas (linestring s). Para cada elemento de
la colección se tiene un valor triple en el campo de SDO_ELEM_INFO. En el ejemplo la línea
recta posee un triplete con los valores (1,2,1) y la segunda línea tiene un triplete de (7,2,1).
Nota: SDO_GTYPE para esta geometría es 2006 (multilinestring).
SDO_GEOMETRY (
2006, NULL, NULL,
SDO_ELEM_INFO_ARRAY (1,2,1, 5,2,1),
SDO_ORDINATE_ARRAY (50,15, 55,15,
60,15,
65,15))
3 MULTIPOLYGON
3. En ejemplo, se ejemplifica la colección MultiPolygon. Para un MultiPolygon, cada elemento
de la colección contiene un valor triple en el campo de SDO_ELEM_INFO; el pentágono tiene
un triplete (1,1003,1) y el triplete del rectángulo optimizado es (13,1003,3).
Un ejemplo real del uso de este tipo de colecciones es como el estado de Hawai se puede
representar utilizando un MultiPolygon.
El SDO_GTYPE 2007 indica que se trata de un MultiPolygon
El tipo de elemento de 1003 indica un polígono anillo exterior.
SDO_GEOMETRY (
2007, NULL, NULL,
SDO_ELEM_INFO_ARRAY (1,1003,1, 11,1003,3),
SDO_ORDINATE_ARRAY (50,105, 55,105, 60,110,
50,110, 50,105, 62,108,
65,112))
4 ORIENTED POINT (PUNTO ORIENTADO)
Un punto orientado (oriented point) puede ser utilizado en la visualización de mapas y otras
aplicaciones de visualización que incluyen símbolos
El vector de orientación se utiliza para orientar la simbología y / o texto para el etiquetado en
la cartografía y las aplicaciones de visualización. Por ejemplo, puedes usar un vector de
orientación para mostrar una etiqueta de texto o una imagen orientada a un ángulo
determinado.
4. El campo de SDO_ELEM_INFO para un punto de orientación contiene dos tripletes.
El primer triplete:
coordenadas de desplazamiento: 0; ya que es el primer punto.
Tipo de elemento: Un tipo de elemento de 1 para denotar un que se trata de un punto.
Interpretación: Una interpretación con valor 1 para designar a un único punto.
El segundo triplete:
coordenadas de desplazamiento: El elemento de compensación para el vector de
orientación
Tipo de elemento: Un tipo de elemento de 1 para denotar un punto.
Interpretación: Una interpretación con valor 0 para especificar que se trata de un vector
de orientación.
La ubicación del punto de partida es (71, 42).
Se esta representando un símbolo asociado con el punto que se orienta a lo largo de un
vector (71, 42) hasta(72, 43) formando un ángulo de 45 grados.
SDO_GEOMETRY(2001, NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1,1, 3,1,0),
SDO_ORDINATE_ARRAY(71, 42,
1, 1))
Los puntos orientados deben de poseer coordenadas para el punto que ha de ser
almacenado, así como un conjunto de coordenadas que son relativas al punto
especificado. Teniendo en cuenta las coordenadas del vector de orientación (i, j), la
ecuación siguiente se puede utilizar para calcular el ángulo de orientación:
Ángulo = arctan (j / i)
En el ejemplo el vector tendría un valor de arctan (1 / 1) = 45 grados.
Reglas
•Un punto 2D tiene un vector de orientación 2D.
•Un punto 2D con un sistema de referencia lineal (LRS) tiene un vector de orientación 2D.
•Un punto 3D tiene un vector de orientación 3D.
•Un punto en 3D con una medida de LRS tiene un vector de orientación 3D.
5. 5 CONSTRUCTORES SDO_GEOMETRY
Los objetos SDO_GEOMETRY pueden ser creados utilizando diferentes constructores.
Un constructor puede ser cualquiera de los siguientes:
SQL Multimedia (SQL/MM) Well-Known Text (WKT) el cual puede ser una cadena de
caracteresen el formato “character large object” (CLOB) o en el formato VARCHAR2
SQL/MM Well-Known Binary (WKB) el cual posee el formato binary large object (BLOB)
.
Los constructores devuelven un objeto SDO_GEOMETRY.
Formatos de constructores:
Estos ejemplos muestran el uso de los constructores que utilizan SDO_GEOMETRY
bajo SQL / MM WKT; adicionalmente se presenta su equivalente como lo habíamos
trabajado en la unidad anterior.
1. En este ejemplo se toma una cadena WKT como entrada para representar un
polígono.. Utilizando WKT debemos de tener separados por espacios los diferentes
grupos de coordenadas
2. En este ejemplo se incluye un sistema de referencia espacial el cual nos permitirá
rellenar el valor SDO_SRID del objeto SDO_GEOMETRY.
6. 6 PRIMEROS MÉTODOS EN SDO_GEOMETRY
El tipo de objeto SDO_GEOMETRY dispone de una serie de métodos que nos
permiten recuperar información acerca de un objeto en particular.
GET_GTYPE()
El método GET_GTYPE() devuelve el tipo de geometría, la cual se encuentra
especificada en el valor de SDO_GTYPE.
SELECT g.geom.get_gtype() state_gtype
FROM geod_states g
WHERE g.state = 'Delaware';
STATE_GTYPE
-----------
3
Nota: Cada vez que se accede a un método o un atributo asociado a un objeto, se debe
utilizar un alias de la tabla.
En el ejemplo, se utiliza el método de SDO_GEOMETRY GET_GTYPE. El alias de la
tabla que es utilizado en este ejemplo es “g”; el cual esta asociado con la tabla
geod_states.
GET_DIMS()
Devuelve la dimension de un objeto tal y como se especifica en su valor SDO_GTYPE
SELECT s.geom.get_dims() state_dims
FROM geod_states s
WHERE s.state = 'Delaware';
STATE_DIMS
----------
2
Otros métodos para objetos SDO_GEOMETRY
GET_WKB():
Devuelve la geometria en formato WKB
GET_WKT():
Devuelve la geometria en formato WKT
ST_CoordDim():
Devuleve la dimension de una geometria; es un metodo analogo a GET_DIMS().
ST_IsValid():
Se encarga de verificar si una geometria es valida.Devuelve 1 s I es valida, en caso
contraio devuleve 0.
7. set long 500;
SELECT a.geom.GET_WKT()
FROM (SELECT SDO_GEOMETRY(2003, 8307, NULL,
SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(146,66, 148,66,
148,68, 146,68,
146,66)) geom
FROM dual) a;
A.GEOM.GET_WKT()
----------------
POLYGON ((146.0 66.0, 148.0 66.0, 148.0 68.0, 146.0
68.0, 146.0 66.0))
SELECT a.geom.ST_COORDDIM()
FROM (SELECT SDO_GEOMETRY(2003, 8307, NULL,
SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(146,66, 148,66, 148,68,
146,68, 146,66)) geom
FROM dual) a;
SELECT a.geom.ST_IsValid()
FROM (SELECT SDO_GEOMETRY(2003, 8307, NULL,
SDO_ELEM_INFO_ARRAY(1, 1003, 1),
SDO_ORDINATE_ARRAY(146,66, 148,66, 148,68,
146,68, 146,66)) geom
FROM dual) a;
1
2
Otro método que nos permite checar la validez de una geometría es:
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT