extensiones espaciales de mysql santiago molina cartago, costa rica instituto tecnológico de costa...

34
Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica http://www.freewebs.com/santiagobd Instituto Tecnológico de Costa Rica Instituto Tecnológico de Costa Rica Maestría en Computación Maestría en Computación MC6007: Bases de Datos Avanzadas MC6007: Bases de Datos Avanzadas

Upload: manuel-leo

Post on 05-Mar-2015

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

Extensiones Espacialesde

MySQLSantiago Molina

Cartago, Costa Rica

http://www.freewebs.com/santiagobd

Instituto Tecnológico de Costa RicaInstituto Tecnológico de Costa RicaMaestría en ComputaciónMaestría en ComputaciónMC6007: Bases de Datos AvanzadasMC6007: Bases de Datos Avanzadas

Page 2: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Contenido

Introducción

El modelo geométrico OpenGIS

Formato de datos espaciales

Storage Engines con soporte Geoespacial

Bases de datos con capacidades espaciales

Funciones para análisis de información espacial

Page 3: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Introducción

MySQL ha agregado extensiones especiales para permitir la generación, almacenamiento y análisis de capacidades espaciales.

Las extensiones siguen la especificación del Consorcio Open GIS (OGC) http://www.opengis.org

MySQL implementa un subconjunto del entorno SQL con Tipos Geométricos propuesto por el OGC:

tipos geométricos SQL, funciones para crear y analizar valores geométricos.

Page 4: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Conceptos básicos

Elemento geométricoElemento geométrico:

Cualquier objeto en el mundo que tenga una ubicación. Por ejemplo:

Una entidad: una montaña, una ciudad, etc. Un espacio: área de código postal. Una ubicación definible: un cruce de carreteras.

GeometríaGeometría: punto o conjunto de puntos representando cualquier cosa en el mundo que tenga una ubicación.

Page 5: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

El modelo geométrico OpenGIS

La especificación propuesta por el OGC se basa en el modelo OpenGIS de geometría; en éste, cada objeto geométrico tiene las siguiente propiedades:

Asociación a un Sistema de Referencia Espacial. Pertenencia a alguna geometría.

Existe una jerarquía de clases que describen el modelo

Algunas clases son instanciables, otras no.

Page 6: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Jerarquía de clases geométricas

• Todas las clases tiene propiedades.

• Las clases instanciables tienen reglas (aserciones) que definen las instancias de clases válidas.

Point

LineString Polygon MultiPoint

Geometry

Curve Surface GeometryCollection

MultiCurve

MultiSurface

MultiPolygon MultiLineString

Page 7: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Clase Geometry

Clase base de la jerarquía, no instanciable. Tiene propiedades que son comunes para todas las

subclases: Tipo: cada geometría pertenece a una de las clases

instanciables. SRID (Identificador de Referencial Espacial): Identifica el

Sistema de Referencia Espacial asociado a la geometría que define el espacio de coordenadas en el que la geometría está definida.

Exterior: es todo el espacio no ocupado por la geometría. Interior: el espacio ocupado por la geometría. Límite: es la interfaz entre el interior y el exterior de la

geometría.

Page 8: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Clase Geometry [2]

Propiedades: MBR (Mininum Bounding Rectangle): es el límite de la

geometría, formado por valores mínimos y máximos de coordenadas (X, Y).

Simple o no-simple: valores geométricos de tipo (LineString, MultiPoint, MultiLineString) son simples o no-simples.

Cerrado o no cerrado: valores geométricos de tipo (LineString, MultiLineString) son cerrados o no cerrados.

Dimensión: una geometría puede tener dimensión -1, 0, 1 ó 2. -1: geometría vacía. 0: geometría sin longitud ni área. Point 1: geometría con longitud diferente de cero y área cero.

LineString 2: geometría con área distinta de cero. Polygon

Page 9: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Formato de datos espaciales

Formatos soportados que suelen utilizarse para representar objetos geométricos en consultas:

Well-Known Text (WKT)

Well-Known Binary (WKB) MySQL almacena los valores de geometría en un formato no

idéntico a los antes mencionados.

Page 10: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Formato WKT

Diseñado para intercambiar datos geométricos en formato ASCII.

Algunos ejemplos: POINT(15 25)

LINESTRING(0 0, 15 15, 20 25, 45 55)

POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))

MULTIPOINT(0 0, 20 20, 60 60)

MULTILINESTRING((10 10, 20 20), (15 15, 30 15))

MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))

GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))

Page 11: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Formato WKB

Definido tanto por la especificación OpenGIS como por el estándar “SQL/MM Part 3: Spatial”.

Se emplea para intercambiar datos como cadenas binarias representadas por valores BLOB que contienen información geométrica WKB.

Ejemplo: POINT (1 1)

01010100000001000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F

Orden de byte : 01 (0: little endian; 1: big endian)

Tipo WKB : 01000000 (Código que indica el tipo de geometría)X : 000000000000F03F (Coord. en valor de doble precisión)Y : 000000000000F03F

Page 12: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Storage Engines con soporte Geoespacial

Page 13: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Bases de datos con capacidades espaciales

MySQL tiene tipos de datos que corresponden a las clases OpenGIS:

GEOMETRY: puede almacenar valores geométricos de cualquier tipo.

POINT

LINESTRING

POLYGON Los siguientes tipos pueden almacenar colección de valores:

MULTIPOINT

MULTILINESTRING

MULTIPOLYGON

GEOMETRYCOLLECTION

Page 14: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Crear Geometrías usando Funciones WKT

MySQL proporciona funciones que toman como parámetros de entrada una representación WKT y, opcionalmente, un SRID.

El valor de retorno es la geometría correspondiente. GeomFromText(wkt [, srid])GeomFromText(wkt [, srid]) GeomCollFromText(wkt[,srid])GeomCollFromText(wkt[,srid]) LineFromText(wkt[,srid])LineFromText(wkt[,srid]) MLineFromText(wkt[,srid])MLineFromText(wkt[,srid]) MPointFromText(wkt[,srid])MPointFromText(wkt[,srid]) MPolyFromText(wkt[,srid])MPolyFromText(wkt[,srid]) PointFromText(wkt[,srid])PointFromText(wkt[,srid]) PolyFromText(wkt[,srid])PolyFromText(wkt[,srid])

Page 15: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Crear Geometrías usando Funciones WKB

También, provee otras funciones que toman como parámetros de entrada un BLOB que contiene una representación WKB, y opcionalmente, un SRID.

GeomFromWKB(wkb [, srid])GeomFromWKB(wkb [, srid])

GeomCollFromWKB(wkb[,srid])GeomCollFromWKB(wkb[,srid])

LineFromWKB(wkb[,srid])LineFromWKB(wkb[,srid])

MLineFromWKB(wkb[,srid])MLineFromWKB(wkb[,srid])

MPointFromWKB(wkb[,srid])MPointFromWKB(wkb[,srid])

MPolyFromWKB(wkb[,srid])MPolyFromWKB(wkb[,srid])

PointFromWKB(wkb[,srid])PointFromWKB(wkb[,srid])

PolyFromWKB(wkb[,srid])PolyFromWKB(wkb[,srid])

Page 16: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones específicas de MySQL

MySQL provee un conjunto de funciones (extensiones) no estándar para crear representaciones WKB de geometrías.

El valor devuelto por estas funciones se puede emplear como argumento por cualquier función de la familia GeomFromWKB(…).

GeometryCollection(g1,g2,...)

LineString(pt1,pt2,...)

MultiLineString(ls1,ls2,...)

MultiPoint(pt1,pt2,...)

Point(x,y)

Page 17: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Bases de datos con capacidades espaciales

MySQL provee una forma estándar de crear columnas espaciales para tipos geométricos.

CREATE TABLE:

mysql> CREATE TABLE geom (g GEOMETRY);Query OK, 0 rows affected (0.02 sec)

ALTER TABLE:mysql> ALTER TABLE geom ADD pt POINT;Query OK, 0 rows affected (0.00 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> ALTER TABLE geom DROP pt;Query OK, 0 rows affected (0.00 sec)Records: 0 Duplicates: 0 Warnings: 0

Page 18: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Bases de datos con capacidades espaciales

INSERT:

INSERT INTO geom VALUES (GeomFromText('POINT(1 1)'));SET @g = 'POINT(1 1)';INSERT INTO geom VALUES (GeomFromText(@g));

Usando funciones específicas:SET @g = 'POINT(1 1)';INSERT INTO geom VALUES (PointFromText(@g));

Usando representaciones WKB:mysql> INSERT INTO geom VALUES-> (GeomFromWKB(0x0101000000000000000000F03F000000000000F03F));

Page 19: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Bases de datos con capacidades espaciales

Extraer datos espaciales: formato interno y convertir a WKT o WKB.

Formato interno:

CREATE TABLE geom2 (g GEOMETRY) SELECT g FROM geom;

En formato WKT:

mysql> SELECT AsText(g) FROM geom;+-----------------------------------+| AsText(p1) |+-----------------------------------+| POINT(1 1) || LINESTRING(0 0,1 1,2 2) |+-----------------------------------+

En formato WKB:

SELECT AsBinary(g) FROM geom;

Page 20: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Analizando información espacial

Funciones de conversión de formato:

AsBinary(g): convierte de formato interno a WKB

AsText(g): convierte de formato interno a WKT

GeomFromText(wkt[,srid]): convertir de WKT a formato interno

GeomFromWKB(wkb[,srid]): convertir de WKB a formato interno.

Page 21: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones Geometry Dimension(Dimension(gg)): retorna la dimensión de g (-1, 0, 1, 2).

mysql> SELECT Dimension(GeomFromText('LineString(1 1,2 2)'));

+-----------------------------------------------------------------+

| Dimension(GeomFromText('LineString(1 1,2 2)')) |

+-----------------------------------------------------------------+

| 1 |

+-----------------------------------------------------------------+

Envelope(Envelope(gg)): retorna el MBR de la geometría g.

mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));

+---------------------------------------------------------------------------+

| AsText(Envelope(GeomFromText('LineString(1 1,2 2)'))) |

+---------------------------------------------------------------------------+

| POLYGON((1 1,2 1,2 2,1 2,1 1)) |

+---------------------------------------------------------------------------+

Page 22: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones Geometry (2) GeometryType(GeometryType(gg)): retorna el nombre (string) del tipo de geometría g.

mysql> SELECT GeometryType(GeomFromText('POINT(1 1)'));

+--------------------------------------------------------------+

| GeometryType(GeomFromText('POINT(1 1)')) |

+--------------------------------------------------------------+

| POINT |

+--------------------------------------------------------------+

SRID(SRID(gg)): retorna del SRID de la geometría g.

mysql> SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));

+----------------------------------------------------------------+

| SRID(GeomFromText('LineString(1 1,2 2)',101)) |

+----------------------------------------------------------------+

| 101 |

+----------------------------------------------------------------+

Page 23: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones Point X(X(pp))

mysql> SET @pt = 'Point(56.7 53.34)';

mysql> SELECT X(GeomFromText(@pt));

+---------------------------------+

| X(GeomFromText(@pt)) |

+---------------------------------+

| 56.7 |

+---------------------------------+ Y(p)

mysql> SET @pt = 'Point(56.7 53.34)';

mysql> SELECT Y(GeomFromText(@pt));

+---------------------------------+

| Y(GeomFromText(@pt)) |

+---------------------------------+

| 53.34|

+---------------------------------+

Page 24: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones LineString EndPoint(EndPoint(lsls))

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';

mysql> SELECT AsText(EndPoint(GeomFromText(@ls)));

+------------------------------------------------------+

| AsText(EndPoint(GeomFromText(@ls))) |

+------------------------------------------------------+

| POINT(3 3) |

+------------------------------------------------------+ GLength(GLength(lsls))

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';

mysql> SELECT GLength(GeomFromText(@ls));

+------------------------------------------+

| GLength(GeomFromText(@ls)) |

+------------------------------------------+

| 2.8284271247462 |

+------------------------------------------+

Page 25: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones LineString (2) NumPoints(NumPoints(lsls))

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';

mysql> SELECT NumPoints(GeomFromText(@ls));

+---------------------------------------------+

| NumPoints(GeomFromText(@ls)) |

+---------------------------------------------+

| 3 |

+---------------------------------------------+ PointN(PointN(lsls,,NN))

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';

mysql> SELECT AsText(PointN(GeomFromText(@ls),2));

+------------------------------------------------------+

| AsText(PointN(GeomFromText(@ls),2)) |

+------------------------------------------------------+

| POINT(2 2) |

+------------------------------------------------------+

Page 26: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones LineString (3)

StartPoint(StartPoint(lsls))

mysql> SET @ls = 'LineString(1 1,2 2,3 3)';

mysql> SELECT AsText(StartPoint(GeomFromText(@ls)));

+-------------------------------------------------------+

| AsText(StartPoint(GeomFromText(@ls))) |

+-------------------------------------------------------+

| POINT(1 1) |

+-------------------------------------------------------+

Page 27: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones MultiLineString GLength(GLength(mlsmls))

mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';

mysql> SELECT GLength(GeomFromText(@mls));

+---------------------------------------------+

| GLength(GeomFromText(@mls)) |

+---------------------------------------------+

| 4.2426406871193 |

+---------------------------------------------+ IsClosed(IsClosed(mlsmls))

mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';

mysql> SELECT IsClosed(GeomFromText(@mls));

+---------------------------------------------+

| IsClosed(GeomFromText(@mls)) |

+---------------------------------------------+

| 0 |

+---------------------------------------------+

Page 28: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones Polygon Area(Area(polypoly))

mysql> SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';

mysql> SELECT Area(GeomFromText(@poly));

+----------------------------------------+

| Area(GeomFromText(@poly)) |

+----------------------------------------+

| 4 |

+----------------------------------------+ ExteriorRing(ExteriorRing(polypoly))

mysql> SET @poly = 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';

mysql> SELECT AsText(ExteriorRing(GeomFromText(@poly)));

+--------------------------------------------------------------+

| AsText(ExteriorRing(GeomFromText(@poly))) |

+--------------------------------------------------------------+

| LINESTRING(0 0,0 3,3 3,3 0,0 0) |

+--------------------------------------------------------------+

Page 29: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones Polygon (2) InteriorRingN(InteriorRingN(polypoly,,NN))

mysql> SET @poly = 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';

mysql> SELECT AsText(InteriorRingN(GeomFromText(@poly),1));

+------------------------------------------------------------------+

| AsText(InteriorRingN(GeomFromText(@poly),1)) |

+-----------------------------------------------------------------+

| LINESTRING(1 1,1 2,2 2,2 1,1 1) |

+-----------------------------------------------------------------+ NumInteriorRings(NumInteriorRings(polypoly))

mysql> SET @poly = 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';

mysql> SELECT NumInteriorRings(GeomFromText(@poly));

+---------------------------------------------------------+

| NumInteriorRings(GeomFromText(@poly)) |

+---------------------------------------------------------+

| 1 |

+---------------------------------------------------------+

Page 30: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones MultiPolygon

Area(Area(mpolympoly))

mysql> SET @mpoly = 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';

mysql> SELECT Area(GeomFromText(@mpoly));

+-------------------------------------------+

| Area(GeomFromText(@mpoly)) |

+-------------------------------------------+

| 8 |

+------------------------------------------+

Page 31: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Funciones GeometryCollection GeometryN(GeometryN(gcgc,,NN))

mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))';

mysql> SELECT AsText(GeometryN(GeomFromText(@gc),1));

+-------------------------------------------------------------+

| AsText(GeometryN(GeomFromText(@gc),1)) |

+-------------------------------------------------------------+

| POINT(1 1) |

+-------------------------------------------------------------+ NumGeometries(gc)NumGeometries(gc) mysql> SET @gc = 'GeometryCollection(Point(1 1),LineString(2 2, 3 3))'; mysql> SELECT NumGeometries(GeomFromText(@gc)); +------------------------------------------------------+ | NumGeometries(GeomFromText(@gc)) | +------------------------------------------------------+ | 2 | +-----------------------------------------------------+

Page 32: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

GeoflashExplorer y Ext. Espacial MySQL

Page 33: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

Más Info

Documentación MySQL: http://dev.mysql.com/doc/

Foro MySQL: http://forums.mysql.com/list.php?23

JCC’s SQL Standars Page http://www.jcc.com/sql.htm

GeoFlashExplorer: http://www.theurbanexplorer.com

Page 34: Extensiones Espaciales de MySQL Santiago Molina Cartago, Costa Rica  Instituto Tecnológico de Costa Rica Maestría en

MC6007 - Bases de Datos Avanzadas

¿Preguntas?Comentarios…