Apr 25 2012

Sistem informatic geografic

Categorie: OLTP | SQL Server | T-SQL | Tutorial | GeospatialCatalin Dumitru @ 09:01

Un sistem informatic care capteza, stocheaza, integreaza, gestioneaza, analizeaza si vizualizeaza date geografice se numeste Sistem Informatic Geografic (GIS). Un astfel de sistem refera o baza de date spatiala pentru a referi din punct de vedere geografic diverse date reale.  Un GIS trebuie sa poata integra atat date geografice cat si date tabelare (atribute) in vederea producerii de informatii pentru luarea unor decizii. Reprezentarea datelor se realizeaza fie in format vectorial, fie in format raster. Formatul vectorial reprezinta o serie de coordonate (x,y si optional z) in timp ce formatul raster reprezinta o grila (matrice) ale carei celule au o dimensiune constanta (data de nivelul de detaliu dorit). Datele geografice pot fi asociate cu alte tipuri de date pentru a modela un obiect real (descriere, denumire, data producere eveniment etc.). Unul din multele domenii in care se utilizeaza un GIS este cel al reprezentarii unor harti, scopul putand fi cel al urmaririi functionarii unor dispozitive in retea, sau cel de analizare a posibilelor dezvoltari patrimoniale.

Proiectii geografice

Pentru a permite localizarea unor puncte pe suprafata Pamantului se utilizeaza o suprafata sferica, centrul Pamantului, meridianul 0, ecuatorul si o unitate de masurare a unghiurilor. Astfel obtinem un sistem de coordonate cu ajutorul caruia putem localiza orice punct prin intermediul logitudinii si latitudinii, adica, unghiuri masurate de la centrul Pamantului la punctul respectiv. 

In acest sistem sferic avem linii dispuse orizontal si linii dispuse vertical aflate la distanta egala intre ele. Liniile de la est la vest sunt linii de latitudine sau paralele iar cele de la nord la sud sunt linii de longitudine sau mediane. Aceasta grila formeaza reteaua geografica a Pamantului. Linia de mijloc dintre paralele (paralela aflata la distanta egala de ambii poli) se numeste ecuator si are latitudine 0 (adica orice punct aflat pe suprafata ecuatorului va forma un unghi de 0 grade cu centrul Pamantului). Cele mai multe sisteme de coordonate considera ca meridianul care trece prin Greenwich este meridianul 0 (primul meridian). Originea retelei este considerat punctul unde meridianul 0 se intersecteaza cu ecuatorul. Masurarea longitudinii si latitudinii se realizeaza in grade, minute si secunde (DMS). Latitudinile au ca referinta ecuatorul si pot lua valori de la -90 grade (Polul Sud) si pana la 90 grade (Polul Nord). Latitudinile (masurate la meridianul 0) pot lua valori de la -180 grade in vest si 180 grade spre est. Din cauza formei Pamantului care nu urmeaza un model sferic perfect se folosesc sisteme de coordonate usor modificate fata de modelul matematic. Acest aspect este un subiect complex ce nu face obiectul prezentului articol.

Reprezentarea datelor spatiale in SQL Server

In Microsoft SQL Server 2008 avem la dispozitie tipurile de date geometry si geography. Geometry reprezinta date proiectate pe o suprafata plana in timp ce geography proiecteaza datele pe o suprafata elipsoidala. Pentru reprezentare se vor folosi urmatoarele obiecte:

Punctul – obiect definit de coordonatele x si y iar optional se poate fi descris cu de dimensiunea z (inaltimea) si masura m;
Multipunctul – doua sau mai multe puncte independente grupate intr-o colectie;
Linia – multime de puncte aflata pe dreapta care uneste cele 2 capete;
Multilinia – doua sau mai multe linii independente grupate intr-o colectie;
Poligon – figura geometrica formata din linii al carui punct de plecare este punct de sosire;
Multipoligon – colectie de poligoane;
Colectia geometrica – colectie formata din obiectele defoinite mai sus.

      
Sql Server ofera cateva metode care permit interogari peste date spatiale:
STRelate
STDisjoint
STIntersects
STTouches
STCrosses
STWithin
STContains
STOverlaps
STBuffer
STConvexHull
STIntersection
STUnion
STGeomFromText
STPointFromText
STLineFromText
STPolyFromText
STGeomFromWKB
STPointFromWKB
STLineFromWKB
STPolyFromWKB

Exemplu:

CREATE TABLE Districts ( 
DistrictId int IDENTITY (1,1), 
DistrictName nvarchar(20), 
DistrictGeo geometry
)
 
CREATE TABLE Streets ( 
StreetId int IDENTITY (1,1), 
StreetName nvarchar(20), 
StreetGeo geometry
)
GO
INSERT INTO Districts (DistrictName, DistrictGeo) 
VALUES ('Downtown', geometry::STGeomFromText ('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0))
INSERT INTO Districts (DistrictName, DistrictGeo) 
VALUES ('Green Park', geometry::STGeomFromText ('POLYGON ((300 0, 150 0, 150 150, 300 150, 300 0))', 0))
INSERT INTO Districts (DistrictName, DistrictGeo) 
VALUES ('Harborside', geometry::STGeomFromText ('POLYGON ((150 0, 300 0, 300 300, 150 300, 150 0))', 0))
INSERT INTO Streets (StreetName, StreetGeo) 
VALUES ('First Avenue', geometry::STGeomFromText ('LINESTRING (100 100, 20 180, 180 180)', 0)) 

INSERT INTO Streets (StreetName, StreetGeo) 
VALUES ('Mercator Street', geometry::STGeomFromText ('LINESTRING (300 300, 300 150, 50 51)', 0))
SELECT StreetName, DistrictName, d.DistrictGeo, s.StreetGeo
FROM Districts d, Streets s
WHERE s.StreetGeo.STIntersects(DistrictGeo) = 1
ORDER BY StreetName

Etichete: , , , , ,