Sunteți pe pagina 1din 40

Capitolul 6 - Baze de date spatiale

„ Modelarea datelor spațiale: obiecte spațiale, algebra spațială


„ Integrarea datelor spațiale în baze de date și limbaje de interogare
„ Sisteme GIS
„ Date spaţiale în sistemul Oracle – Oracle Spatial
„ Tipuri de date spatiale
„ Interogări spatiale
„ Indexarea datelor spatiale
„ Dezvoltarea aplicaţiilor spaţiale, GIS
„ Date spatiale în sistemul MySQL
„ Date spaţiale în sistemul PostgreSQL
„ Date spaţiale în sistemul SQL Server 2008

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 1


Date spațiale
„ Date spațiale: date care se referă la poziționarea în spațiu a obiectelor:
„ Reprezentari 3D (în medicină, arhitectură, CAD-CAM etc.)
„ Reprezentarea spațiului geografic
„ Reprezentare layout VLSI etc.
„ Sistem de baze de date spațiale Æ sistem de baze de date care:
„ Oferă suport pentru tipuri de date spațiale (POINT, LINE, REGION etc.)
„ Permite interogarea datelor spațiale
„ Permite indexarea spațială
„ Modelarea obiectelor în plan și în spațiu – puncte, linii, regiuni

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 2


Integrarea datelor spațiale în limbaje de interogare
„ Pentru integrare sunt necesare:
„ Specificarea obiectelor spațiale ca valori (constante sau nu) în interogări
„ Specificarea operațiilor fundamentale de algebră spațială:
„ Selecție spațială – selectează obiectele care îndeplinesc anumite condiții de
poziționare în spațiu
„ Funcții spațiale – calculează un obiect spațial prin intersecții, extensii etc. a altor
obiecte spațiale
„ Joncțiuni spațiale – combină informații despre obiecte spațiale
„ Operații cu mulțimi de obiecte spațiale (suprapunerea partițiilor, fuziunea
partițiilor, diagrame Voronoi etc.)
„ Descrierea modului de prezentare a rezultatului
„ Problema care trebuie rezolvată: implementarea algebrei spațiale astfel
încât să fie integrată cu sistemul de interogare al bazei de date:
„ Reprezentarea tipurilor algebrei spațiale
„ Implementarea algoritmilor operațiilor algebrei spațiale
„ Soluționarea Æ abordare obiect-relațională
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 3
Domenii de utilizare a datelor spațiale
„ Cele mai utilizateÆ aplicații GIS (Geographical Information Systems)

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 4


Evolutia aplicatiilor GIS

Trecut Prezent

Aplicatie Aplicatie
Aplicatie

GIS
API Middleware Open Server de
propriu Spatial API harta
Fisiere proprii

Baza de
SGBD date
traditional spatiala

Middleware Platforma
Standalone
propriu Internet
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 5
Date spațiale în sistemul Oracle – Oracle Spatial
„ Începând cu versiunea 10g, Oracle Spatial este conform cu specificațiile Open
Geospatial Consortium (OGC) – Simple Features Specification 1.1.1 (Document
99-049) și permite:
„ Modelarea vectorială a datelor
„ Modelarea rastru a datelor spațiale (GeoRaster)
„ Modelarea topologică a datelor spațiale
„ Oracle Spatial folosește modelul obiect-relațional de date:
„ Datele spațiale se pot reprezenta prin tipuri și ierarhii de tipuri
„ Datele spațiale pot fi utilizate ca și coloane în tabele
„ Oracle Spatial folosește:
„ O schemă SQL (MDSYS) care conține tipuri de date geometrice modelate vectorial (și
care nu trebuie să fie modificată de useri)
„ Mecanisme de indexare spațială a obiectelor spațiale
„ Operatori, funcții și proceduri pentru efectuarea interogărilor spațiale
„ Dimensionalitatea datelor spațiale:
„ Bidimensionale (2D)
„ Tridimensionale (3D)
„ Cu patru dimensiuni (4D)

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 6


Modelarea vectorială a datelor în Oracle Spatial
„ Modelul de date este o ierarhie compusă din elemente (elements),
geometrii (geometries) și niveluri (layouts)
„ Date spațiale 2D – coordonate reprezentate ca perechi de valori (X,Y)
„ Point – reprezentat printr-o coordonată
„ Line string – fiecare segment reprezentat prin 2 coordonate
„ Poligon – reprezentat printr-o listă ordonată de coordonate; nu se admite
autointersecția liniei poligonale

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 7


Reprezentarea datelor spațiale vectoriale în Oracle
„ Geometry: colecție de elemente – de ex. poate reprezenta un oraș
„ Layout: colecție de geometrii, având anumite atribute comune – de ex.
un layout într-o aplicație GIS poate reprezenta rețeaua de drumuri
„ Sisteme de coordonate:
„ Georeferențiale - se referă la o anumită reprezentare a Pamântului
„ Non-georeferențiale - nu sunt corelate cu reprezentare Pamântului
„ Tipuri de sisteme de coordonate:
„ Sistemul de coordonate Cartesian – definit prin origine și 2 (sau 3) axe de
coordonate perpendiculare
„ Sistemul de coordonate geodetic (sau geografic) – coordonate unghiulare
(latitudine, longitudine), referitoare la coordonatele sferice polare pentru
reprezentarea la o anumită dată a globului pământesc
„ Sistem de coordonate de proiecție – rezultate printr-o proiecție a suprafeței
pământului pe un plan
„ Coordonate locale – sistem de coordonate Cartesian non-georeferențial
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 8
Indexuri spațiale în Oracle
„ În Oracle indexarea datelor spațiale folosește indexuri R-tree pe 2, 3,
sau 4 dimensiuni
„ Un R-tree este o structură de date care împarte ierarhic spațiul în zone
de acoperire (bounding box sau MBR – Minimum Bounding Rectangle)
imbricate (nested) și posibil cu suprapuneri (overlapping)
„ Fiecare nod intern (non-leaf) are un număr variabil de elemente (până la
o valoare maximă predefinită) și fiecare element memorează două
informații: o referință către un nod fiu și MBR-ul acestuia

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 9


Indexuri R-tree în Oracle
„ Algoritmul de căutare într-un arbore R-
tree folosește MBR-ul pentru a decide
dacă să caute în interiorul unui nod fiu
„ În felul acesta se exceptează de la
căutare un număr mare de noduri (se
caută în mai puține noduri)
„ Algoritmul de inserare în tabel a unui
obiect spațial folosește MBR-ul pentru
a plasa acel obiect în cel mai apropiat
nod (ca poziție în spațiu)
„ Cel mai apropiat nod este nodul al
cărui MBR necesită extinderea minimă
pentru a acoperi MBR-ul obiectului nou
introdus
Index R-tree 3D

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 10


Exemplu: indexarea datelor spațiale
„ În fig (a) - MBR (Minimum Bounding Rectangle) care aproximează o
geometrie
„ În fig (b) – indexul de tip R-tree este o ierarhie de MBR-uri ale
geometriilor dintr-un nivel dat

(b)
(a)

„ În fig. b, geometriile sunt numerotate de la 1 la 9


„ a, b, c, d sunt noduri frunză în arbore şi conţin MBR-urile geometriilor,
împreună cu pointeri la geometriile conţinute
„ A conţine MBR-ul pentru a şi b, B conţine MBR-ul pentru c şi d
„ Root conţine MBR+ul pentru A şi B şi, deci a întregii regiuni

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 11


Tipurile de date Oracle Spatial (1)
„ Oracle Spatial defineşte o geometrie ca un obiect de tipul:
CREATE TYPE sdo_geometry AS OBJECT (
SDO_GTYPE NUMBER, -- defineşte tipul geometriei
SDO_SRID NUMBER, -- Sistem Reference Identifier –
-- sistemul de coordonate al geometriei
SDO_POINT SDO_POINT_TYPE,
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
SDO_ORDINATES SDO_ORDINATE_ARRAY);
„ Dacă SDO_ELEM_INFO şi SDO_ORDINATES sunt ambele null, atunci
geometria defineşte punctul SDO_POINT; altfel SDO_POINT este ignorat
„ Tipurile folosite sunt definite astfel:
CREATE TYPE sdo_point_type AS OBJECT (
X NUMBER,
Y NUMBER,
Z NUMBER);
CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER;
CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 12


Tipurile de date Oracle Spatial (2)
„ SDO_GTYPE
conţine 4 digiţi în
format DLTT, unde:
„ D - numărul de
dimensiuni (2,3,4)
„ L - măsuri lineare
(- de detaliat)
„ TT – tipul
geometriei; actual
de la 00 la 09;
rezervat 10-99
pentru viitor

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 13


Metodele tipului SDO_GEOMETRY

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 14


Constructorii tipului de date SDO_GEOMETRY
„ Obiecte SDO_GEOMETRY se pot construi:
„ Definind valori ale fiecărui atribut al tipului SDO_GEOMETRY:
SDO_GEOMETRY( 2003, -- two-dimensional polygon
NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data )
„ Dintr-un șir WKT (well-known text) conținut în varchar2 sau CLOB:
SDO_GEOMETRY(wkt CLOB, srid NUMBER DEFAULT NULL);
SDO_GEOMETRY(wkt VARCHAR2, srid NUMBER DEFAULT NULL);
„ Dintr-un obiect WKB (well-known binary) în format BLOB:
SDO_GEOMETRY(wkb BLOB, srid NUMBER DEFAULT NULL);

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 15


Exemplu: crearea unui poligon cu o gaură
„ Se definesc 2 contururi, cel exterior și
apoi cel interior (al găurii)
INSERT INTO cola_markets VALUES( 10,
'polygon_with_hole',
SDO_GEOMETRY( 2003, -- polygon 2D
NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1,
19,2003,1), -- polygon with hole
SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3,
13,5, 13,9, 11,13, 5,13, 2,11, 2,4,
7,5, 7,10, 10,10, 10,5, 7,5) )
);
„ În SDO_ELEM_INFO_ARRAY:
„ 1003: indică contur exterior poligon
„ 2003: indică contur interior poligon
„ Numerele 1, respectiv 19 indică poziția în
SDO_ORDINATE_ARRAY a primului vârf al
conturului

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 16


Exemplu: crearea şi interogarea datelor spaţiale
„ Exemplul dat:
„ Creează tabel COLA_MARKETS care
conţine date spaţiale
„ Inserează linii în tabel pentru obiectele
Colc_a, cola_b, cola_c, cola_d
„ Creeaza indexul spaţial
COLA_SPATIAL_IDX)
„ Execută diferite interogări
„ Pentru exerciţiu se poate folosi
schema MDDATA, al cărui user are
privilegiile necesare de a executa
operaţiile dorite
„ Deblocare user MDDATA şi setarea
unei noi parole:
alter user MDDATA ACCOUNT UNLOCK;
alter user MDDATA IDENTIFIED BY MDDATA;

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 17


Exemplu: crearea unui tabel cu date spațiale
„ Crearea tabelului:
CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY);
„ Inserarea geometriilor:
INSERT INTO cola_markets VALUES( 1, 'cola_a',
SDO_GEOMETRY( 2003, -- two-dimensional polygon
NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data )
);
INSERT INTO cola_markets VALUES( 2, 'cola_b',
SDO_GEOMETRY(2003, -- two-dimensional polygon
NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1) )
);
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 18
Exemplu: inserarea datelor spatiale în tabel
„ Inserarea geometriilor:
INSERT INTO cola_markets VALUES( 3, 'cola_c',
SDO_GEOMETRY( 2003, -- two-dimensional polygon
NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3) )
);
INSERT INTO cola_markets VALUES( 4, 'cola_d',
SDO_GEOMETRY( 2003, -- two-dimensional polygon
NULL, NULL,
SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle
SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11) )
);
„ Actualizare metadata (dataliere metadata pag. 24):
INSERT INTO user_sdo_geom_metadata
(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
VALUES ('cola_markets', 'shape',
SDO_DIM_ARRAY( -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005) ),
NULL -- SRID );
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 19
Exemplu: creare index si interogări spaţiale
„ Crearea unui index spaţial R-tree pe atributul shape al tabelului:
CREATE INDEX cola_spatial_idx ON cola_markets(shape)
INDEXTYPE IS MDSYS.SPATIAL_INDEX; -- index R-tree
„ Executarea unor interogări spaţiale:
-- Return the topological intersection of two geometries.
SELECT SDO_GEOM.SDO_INTERSECTION(c_a.shape, c_c.shape, 0.005)
FROM cola_markets c_a, cola_markets c_c
WHERE c_a.name = 'cola_a' AND c_c.name = 'cola_c';

-- Do two geometries have any spatial relationship?


SELECT SDO_GEOM.RELATE(c_b.shape, 'anyinteract', c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';
-- Raspunsul este: FALSE
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 20
Exemplu: interogări spațiale
-- Return the areas of all cola markets.
SELECT name,
SDO_GEOM.SDO_AREA(shape, 0.005)
FROM cola_markets;

-- Return the distance between two geometries.


SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape,
c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = 'cola_b'
AND c_d.name = 'cola_d';

-- Return the area of just cola_a.


SELECT c.name,
SDO_GEOM.SDO_AREA(c.shape, 0.005)
FROM cola_markets c
WHERE c.name = 'cola_a';

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 21


Tipuri geometrice 3D în Oracle Spatial

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 22


Exemplu: tabel care conține poligoane 3D
create table polygons3d(id number, geometry sdo_geometry);
-- Simple Polygon -- All points have to be on the same plane.
insert into polygons3d values(1, SDO_Geometry (3003, NULL, NULL ,
SDO_Elem_Info_Array(1,1003,1), SDO_Ordinate_Array(0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0
)));
insert into polygons3d values(2, SDO_Geometry (3007, NULL, NULL ,
SDO_Elem_Info_Array(1,1003,1,16,1003,1), SDO_Ordinate_Array(6.0,6.0,6.0,
5.0,6.0,10.0,
3.0,4.0,8.0,
4.0,4.0,4.0,
6.0,6.0,6.0,
0.5,0.0,0.0,
0.5,1.0,0.0,
0.0,1.0,1.0,
0.0,0.0,1.0,
0.5,0.0,0.0
)));

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 23


Metadata geometrice în Oracle Spatial (1)
„ Metadata reprezintă descrierea datelor (geometrice în acest caz)
„ Pentru fiecare user al unei scheme Oracle Spatial există două vederi
care conțin metadata referitoare la tipurile geometrice create:
„ USER_SDO_GEOM_METADATA – în această vedere userii trebuie să
insereze metadata referitoare la tabelele spațiale create; are definiția:
( TABLE_NAME VARCHAR2(32), -- nume tabel
COLUMN_NAME VARCHAR2(32), -- nume coloana spațială în tabel
DIMINFO SDO_DIM_ARRAY,
SRID NUMBER );
unde DIMINFO column este un varray de lungime egală cu dimensionalitatea
spațilui (1D, 2D, 3D, 4D), de obiecte SDO_DIM_ELEMENT, ordonate după
dimensiuni; tipul SDO_DIM_ARRAY este definit astfel:
Create Type SDO_DIM_ARRAY as VARRAY(4) of SDO_DIM_ELEMENT;
„ ALL_SDO_GEOM_METADATA – conține metadata referitoare la toate
tabelele spațiale pentru care userul au permisia SELECT; este menținută
actualizată automat de către Oracle Spatial; are aceeași definiție ca și
vederea precedentă, plus coloana OWNER

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 24


Metadata geometrice în Oracle Spatial (2)
„ Tipul SDO_DIM_ELEMENT este definit astfel:
Create Type SDO_DIM_ELEMENT as OBJECT (
SDO_DIMNAME VARCHAR2(64), -- numele dimensiunii: X, Y, Z, W
SDO_LB NUMBER, SDO_UB NUMBER, -- limitele dimensiunii în grilă
SDO_TOLERANCE NUMBER); -- toleranța
„ SRID – Spatial Reference Identifier; identificatorul sistemului de coordonate al
spațiului, sau null dacă nu este precizat
„ Se specifică prin indentificatori și mai multe atribute

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 25


Modelul de date rastru în Oracle Spatial (1)
„ Componenta GeoRaster permite memorarea, indexarea, interogarea
datelor reprezentate ca valori într-o grilă spațială (rastru), folosind
modelul DEM (Digital Elevation Model)
„ GeoRaster folosește mașina JVM incorporată și Oracle XML DB
„ Datele rastru sunt achiziționate prin:
„ Detectoare la distanță (remote sensing)
„ Fotogrametrie
„ Sistemele GIS (inclusiv Oracle GIS) folosesc atât reprezentarea
vectorială cât și reprezentarea rastru a scoarței terestre
„ Datele rastru conțin o parte sau toate elementele următoare:
„ Pixeli (pixels) sau celule (cells)
„ Domeniul spatial (footprint)
„ Informații spațiale, temporare sau de bandă
„ Atribute ale celulelor
„ Metadata
„ Date de prelucrare și suport pentru hartă
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 26
Modelul de date rastru în Oracle Spatial (2)
„ Modelul rastru este un model pe multiple niveluri (multi-layered)
„ O bandă este o dimensiune fizică a rastrului multidimensional
„ O bandă este mapată într-un nivel (care este un concept logic)
„ Benzile sunt numerotate de la o la n-1, unde n este nivelul maxim, iar
nivelurile de la 1 la n
„ Tipic, un nivel corespunde unei benzi (layerNo = bandNo + 1) și constă
dintr-o matrice bidimemsională de celule
„ Un obiect GeoRaster poate fi reprezentat prin mai multe benzi, deci pe
mai multe niveluri logice
„ De exemplu, undele electromagnetice de la un senzor la distanță sunt
grupate în canale, care sunt mapate în benzi GeoRaster; benzile sunt
asociate cu nivelurile
„ Fiecare nivel este descris prin metadata XML

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 27


Benzi, niveluri și canale în datele rastru

„ În aplicațiile rastru GIS, un set de date poate conține mai multe niveluri
și fiecare nivel este numit o temă (theme)
„ Exemple de teme: densitatea populatiei, nivelul veniturilor, utilizarea
terenurilor etc.

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 28


Tipul de date SDO_GEORASTER
„ Tipul de date rastru este definit astfel:
CREATE TYPE sdo_georaster AS OBJECT (
rasterType NUMBER,
spatialExtent SDO_GEOMETRY,
rasterDataTable VARCHAR2(32),
rasterID NUMBER,
metadata XMLType);
„ Semnificația atributelor:
„ rasterType: de forma [d][b][t][gt], unde
„ d=2 (versiunea curentă),
„ b: informații despre numărul de benzi
„ t: rezervat pentru viitor
„ gt = 01 (restul valorilor rezervate pentru dezvoltări ulterioare
„ spatialExtent – un model de obiect geometric
„ rasterDataTable: tabel de obiecte SDO_RASTER
„ rasterID – identificator obiect SDO_RASTER
„ metadata – descrise în GeoRaster XML schema
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 29
Modelarea topologică a datelor în Oracle Spatial
„ Se definesc muchii, fețe și obiecte prin definirea legăturilor topologice
între ele nodurile (puncte în spațiu) unei mulțime date

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 30


Tipuri de date topologice în Oracle Spatial
„ Tipul SDO_TOPO_GEOMETRY este definit astfel:
CREATE TYPE sdo_topo_geometry AS OBJECT (
tg_type NUMBER,
tg_id NUMBER,
tg_layer_id NUMBER,
topology_id NUMBER);

„ Se pot crea tabele de obiecte de acest tip:


CREATE TABLE land_parcels ( -- Land parcels (selected faces)
feature_name VARCHAR2(30) PRIMARY KEY,
feature SDO_TOPO_GEOMETRY);

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 31


Date spațiale în MySQL (1)
„ Extensiile spațiale ale MySQL 5.1 pemit generarea, stocarea și analiza
datelor spațiale, prin impementarea unui subset al recomandărilor
OpenGIS - Simple Features Specifications for SQL (publicate de OGC -
The Open Geospatial Consortium )
„ MySQL definește câteva tipurile de date geometrice 2D care
corespund claselor OpenGIS:
„ GEOMETRY
„ POINT
„ LINESTRING
„ POLYGON
„ MULTIPOINT
„ MULTILINESTRING
„ MULTYPOLYGON
„ GEOMETRYCOLLECTION

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 32


Date spațiale în MySQL (1)
„ Extensiile spațiale ale MySQL 5.1 pemit generarea, stocarea și analiza
datelor spațiale, prin impementarea unui subset al recomandărilor
OpenGIS - Simple Features Specifications for SQL (publicate de OGC -
The Open Geospatial Consortium )
„ MySQL definește câteva tipurile de date geometrice 2D care corespund
claselor OpenGIS:
„ GEOMETRY
„ POINT
„ LINESTRING
„ POLYGON
„ MULTIPOINT
„ MULTILINESTRING
„ MULTYPOLYGON
„ GEOMETRYCOLLECTION

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 33


Date spațiale în MySQL (2)
„ În MySQL se pot crea tabele care au coloane cu date de tip geometric:
CREATE TABLE geom (id int PRIMARY KEY, g GEOMETRY);
„ În astfel de tabele se pot insera date geometrice:
INSERT INTO geom VALUES (GeomFromText('POINT(1 1)'));
SET @g = 'POINT(1 1)'; -- variabila locala
INSERT INTO geom VALUES (GeomFromText(@g));
„ Indexuri spațiale se pot defini numai pentru modul de memorare
MyISAM a tabelelor
„ Analiza informațiilor spațiale:
„ Funcții care fac conversii între diferite formate geometrice
„ Funcții de calcul a diferitelor proprietăți ale formelor geometrice
„ Funcții care descriu relațiile dintre două geometrii
„ Funcții de generare a unor noi geometrii din alte geometrii date

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 34


Date spațiale în PostgreSQL
„ În PostgreSQL 8.4 sunt definite tipuri geometrice 2D:

„ De asemenea sunt definiți operatori și funcții pentru tipurile geometrice:


„ Scalare
„ Translație
„ Rotație
„ Intersecții

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 35


Date spaţiale în SQL Server 2008
„ SQL Server suportă două tipuri de date spațiale, implementate ca tipuri
CLR (Common Language Runtime):
„ Tipuri geometrice - tipuri planare, definite conform specificațiilor Open
Geospatial Consortium (OGC) - Simple Features for SQL Specificatio 1.1.0
„ Tipuri geografice (geodetice) – tipuri de date reprezentate în coordimate
sferice (longitudine, latitudine)
„ Ierarhia de tipuri: cele albastre sunt instantiabile, celelalte sunt abstracte

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 36


Exemplu – tipuri de date spațiale în SQL server
„ Tipul POLYGON poate reprezenta:
„ Poligoane simple, cu un singur
contur (conturul exterior) (1)
„ Poligoane cu găuri, care au un
contur exterior și unul sau mai multe
contururi interioare (2), (3)
„ Exemplu: crearea unui poligon cu o gaură și cu SRID = 10
DECLARE @g geometry; (SRID – Spatial Reference Identifier)
SET @g = geometry::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0),
(1 1, 1 2, 2 1, 1 1))', 10);
„ Exemplu: crearea unui tabel cu o coloana de identificare și o coloana
de date de tip (abstract) geometry. La inserare, în coloana tipului
geometry se intanțiază prin obiecte de subtipuri ale acestuia:
CREATE TABLE SpatialTable
( id int IDENTITY (1,1), GeomCol1 geometry ); GO
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));
INSERT INTO SpatialTable (GeomCol1)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))',
0)); GO

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 37


Indexuri spațiale în SQL Server 2008 (1)
„ Indexurile sunt realizate prin arbori B-tree
„ Arborii B-tree sunt generalizări ale arborilor binari de căutare (binary
search trees) și asigură timpi de căutare, inserare și ștergere logaritmici
„ Nodurile interne (non-leaf) pot avea un număr variabil de noduri fii, într-
un rang predefinit
„ Atunci când se inserează sau se șterg elemente, numărul de noduri fii
poate varia (în rangul predefinit), prin reunirea sau divizarea nodurilor
„ Limitele numărului de noduri sunt, în general: (d+1) ÷ (2d+1); exemplu
arbori 2-3 B-tree (pentru d=1)
„ Un arbore B-tree este menținut echilibrat prin păstrarea nodurilor frunză
la aceeași adâncime (distanța fată de rădăcină)
„ În SQL Server 2008 un index spațial definit pentru un atribut spațial 2D
descompune ierarhic spațiul pe maximum 4 niveluri
„ Fiecare celulă dintr-un nivel este descompusă într-o grilă completă pe
nivelul următor
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 38
Indexuri spațiale în SQL Server (2)
„ Indexul spațial calculează
acoperirea grilei (tessellation) din
fiecare nivel cu următoarele reguli:
„ Dacă un obiect acoperă complet o
celulă, acea celulă nu mai este
divizată în continuare pentru acel
obiect
„ Pentru fiecare obiect se memorează
numai celulele acoperite pe ultimul
nivel

Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 39


Bibliografie
„ Ralf Hartmut Güting, An Introduction to Spatial Database Systems,
Praktische Informatik IV, FernUniversität Hagen, D-58084 Hagen,
Germany
„ Felicia Ionescu, Grafica în realitatea virtuală, Editura Tehnica, București,
2000
„ Roxana Chiriacescu, Reprezentarea informaţiilor geospaţiale în
sistemele de baze de date Oracle, proiect de licență, iulie 2009, UPB
„ Oracle 11g Documentation
„ Oracle® Spatial Developer's Guide 11g Release 1 (11.1) B28400-05
„ Oracle® Spatial GeoRaster Developer's Guide 11g Release 1 (11.1)
B28398-03
„ Oracle® SpatialTopology and Network Data Models Developer's Guide 11g
Release 1 (11.1) B28399-03
„ MySQL 5.1 Documentation
„ PostgreSQL 8.4.3 Documentation
„ Microsoft SQL Server 2008 Books Online
Prof. Felicia Ionescu Cap. 6 - Baze de date spatiale 40