3. Standaryzacja modeli danych przestrzennych

advertisement
3.
Standaryzacja modeli danych przestrzennych
Budowa baz danych systemów SIP w oparciu o różne modele danych nie ułatwia
późniejszej wymiany danych między systemami. Problem stał się na tyle istotny, że
organizacja Open Geospatial Consortium Inc. opracowała standard Simple Feature
Access, który szczegółowo określa zasady odzwierciedlania geometrii obiektów
przechowywanych w systemie. Opracowany standard został przyjęty również jako norma
ISO 19125.
Przed szczegółowym omówieniem
wprowadzimy kilka potrzebnych definicji.
Boundary
Point
-
Curve
-
Surface
-
GeometryCollection
-
istoty
standardu
Simple
Feature
Access
reprezentacja granicy obiektu,
zerowymiarowy podstawowy element geometryczny reprezentujący
pozycję,
jednowymiarowy
podstawowy
element
geometryczny
reprezentujący linie łamaną,
dwuwymiarowy podstawowy element geometryczny reprezentujący
obszar,
kolekcja geometrii.
Na poniższym rysunku przedstawiono schemat Simple Feature Access opisany w notacji
UML w postaci diagramu klas.
Rys. 3.1. Schemat prostego modelu geometrycznego
Cały schemat składa się klasy geometrii podstawowej (base geometry) i geometrii
rozszerzonej (extended geometry). Geometria podstawowa zawiera w sobie klasy Point,
Curve, Surface oraz GeometryCollection. Geometria rozszerzona zawiera
wyspecjalizowane klasy 0, 1 i 2-wymiarowe MultiPoint, MultiLineString i MultiPolygon
oraz dwie abstrakcyjne nadklasy MultiCurve i MultiSurface zbierające obiekty typu Curve
i Surface.
Waldemar Izdebski - Wykłady z przedmiotu SIT
3.1.
42
Klasa Geometry
W modelu zaproponowanym przez OGC wszystkie typy obiektów są skupione w klasie
Geometry, która zawiera wspólne właściwości obiektów. Jest to tzw. klasa abstrakcyjna.
Oznacza to, że nie może być ona reprezentacją żadnego obiektu rzeczywistego, a zawiera
jedynie zbiór reguł definiujących inne klasy. Obiekty geometryczne rozpatrywane są
w przestrzeni dwuwymiarowej.
3.1.1. Podstawowe metody klasy Geometry
Dla klasy Geometry zdefiniowano kilka podstawowych metod służących określaniu
właściwości obiektów, nalezą do nich metody:
• Dimension( ):Integer – zwraca wymiarowość obiektu, która musi być mniejsza lub
równa wymiarowi układu współrzędnych,
• GeometryType( ):String – zwraca nazwę typu geometrii,
• SRID( ):Integer – zwraca identyfikator układu współrzędnych w którym podane są
współrzędne obiektu,
• Envelope( ):Geometry – zwraca minimalny prostokąt ograniczający geometrię,
prostokąt jest definiowany jako poligon [(minX, minY), (MaxX, MinY), (MaxX,
MaxY), (MinX, MaxY), (MinX, MinY)],
• AsText( ):String – zwraca geometrię w postaci tekstowej,
• AsBinary( ):Binary – zwraca geometrię w postaci binarnej,
• IsEmpty( ):Integer – zwraca wartość 1, jeśli obiekt nie posiada geometrii,
• IsSimple( ):Integer – zwraca wartość 1, jeśli obiekt jest obiektem prostym tzn. nie
posiadającym żadnych anomali typu przecięcia wzajemne boków obiektu,
w przypadku obydwu obiektów przedstawionych na rysunku 3.2 metoda IsSimple nie
zwróci wartości 1 ponieważ występują w nich wzajemne przecięcie odcinków
definiujących obiekty,
• Boundary( ):Geometry – zwraca granicę obiektu.
punkt początkowy
punkt końcowy
punkt początkowy
=
punkt końcowy
Rys. 3.2. Ilustracja wyników metod IsClosed oraz IsSimple
Jeśli geometria obiekt jest kolekcją geometrii wtedy aby uzyskać dostęp do konkretnej
geometrii musimy skorzystać z dwóch metod:
• NumGeometries( ):Integer – zwraca liczbę geometriii w obiekcie,
• GeometryN(N:integer):Geometry – zwraca N-tą geometrię z kolekcji.
Waldemar Izdebski - Wykłady z przedmiotu SIT
43
3.1.2. Metody klasy Geometry służące testowaniu relacji z innymi obiektami
Inna grupą metod zdefiniowanych dla klasy Geometry są metody służące do określania
relacji przestrzennych miedzy danym obiektem, a innym wskazanym obiektem. Ogólnie
definicje każdej z tych metod można zapisać następująco:
Metoda(innaGeometria:Geometry):Integer – zwraca wartość 1 jeśli prawda.
Poniżej przedstawiono wszystkie zdefiniowane
poszczególnych relacji przestrzennych obiektów.
Operator Opis
metody
Eqals
zwraca wartość 1 jeśli obiekty są równe
przestrzennie, tzn. ich geometrie się
pokrywają,
Disjoint
zwraca wartość 1 jeśli obiekty są całkowicie
rozdzielne przestrzennie,
Intersects
zwraca wartość 1 jeśli obiekty wzajemnie się
przecinają,
Touches
zwraca wartość 1 obiekty przylegają do siebie,
Crosses
zwraca wartość 1 jeśli obiekty przecinają się
krawędziami,
Within
zwraca wartość 1 jeśli jeden obiekt znajduje
się całkowicie wewnątrz drugiego
Contains
odwrotność Within, zwraca wartość 1 jeśli
obiekt całkowicie zawiera w sobie inny obiekt,
Overlaps
zwraca wartość 1 jeśli obiekt częściowo
„przykrywa” inny obiekt,
i
ilustracje
graficzne
Ilustracja geometryczna
Waldemar Izdebski - Wykłady z przedmiotu SIT
44
3.1.3. Metody klasy Geometry związane z analizami przestrzennymi
Ostatnia grupa metod zdefiniowanych dla klasy Geometry są metody przydatne w
procesie analiz przestrzennych. Do metod tej grupy zaliczamy:
• Distance(innaGeometria:Geometry):Double – zwraca najmniejszą odległość między
obiektami,
• Buffer(odleglosc:Double):Geometry – zwraca geometrię buforu we wskazanej
odległości od geometrii obiektu,
• ConvexHull( ):Geometry – zwraca geometrię otoczki wypukłej dla obiektu,
• Intersectionl(innaGeometria:Geometry):Geometry – zwraca zbiór punktów
przecinania się geometrii obiektów,
• Union(innaGeometria:Geometry):Geometry – zwraca zbiór punktów zawierających
wszystkie punkty obydwu geometrii,
• Difference(innaGeometria:Geometry):Geometry
–
zwraca
zbiór
punktów
zawierających wszystkie punkty stanowiące różnicę obydwu geometrii,
• SymDifference(innaGeometria:Geometry):Geometry – zwraca zbiór punktów
zawierających wszystkie punkty stanowiące symetryczną różnicę obydwu geometrii.
3.1.4. Metody charakterystyczne dla poszczególnych klas obiektów
Oprócz opisanych wcześniej metod ogólnych związanych z klasą Geometry każdy typ
geometrii posiada charakterystyczne metody specyficzne dla siebie.
Klasa Point
Najbardziej podstawową klasą geometryczną jest Punkt. Jest to 0-wymiarowa
reprezentacja geometryczna pozycji w przestrzeni. Posiada współrzędne x i y. Granica
(Boundary) dla punktu nie istnieje, gdyż granica to zawsze obiekt n-1 wymiarowy w stosunku
do obiektu ograniczanego. Metody dostępne w klasie Point to
• X( ):Double – wartość współrzędnej X dla punktu,
• Y( ):Double – wartość współrzędnej Y dla punktu.
Klasa MultiPoint
MultiPoint jest klasą geometryczną złożoną z wielu punktów. Znaczy to, że jeden obiekt
jest reprezentowany przez zbiór punktów. Również jak w przypadku Point obiekt nie posiada
granicy, a punkty nie są uszeregowane w żaden sposób.
Klasa Curve
Curve jest geometrycznym obiektem zbudowanym z sekwencji punktów. Dla klasy Curve
zdefiniowane są następujące metody:
•
•
•
•
•
Length( ):Double – wyznaczenie długości linii,
StartPoint( ):Point – zwraca punkt początkowy,
EndPoint( ):Point – zwraca punkt końcowy,
IsClosed( ):Integer – zwraca wartość 1 jeśli obiekt jest zamknięty tzn.
StartPoint()=EndPoint(),
IsRing( ):Integer – zwraca wartość 1 jeśli obiekt jest zamknięty tzn.
StartPoint()=EndPoint() oraz nie występują w nim wzajemne przecięcia odcinków.
Waldemar Izdebski - Wykłady z przedmiotu SIT
45
Geometria i metody klasy LineString, Line, LinearRing
LineString jest linią łamaną (Curve) w którym każda para współrzędnych definiuje
odcinek linii prostej. W szczególności Line składa się dokładnie z dwóch punktów,
a LinearRing charakteryzuje się tym, że jest obiektem zamkniętym tzn. punkt początkowy
i końcowy się pokrywają. Metody związane z tymi obiektami to:
• NumPoints( ):Integer – zwraca liczbę punktów wchodzących w skład obiektu,
• PointN(N:integer):Point – zwraca konkretny punkt związany z obiektem.
Geometria i metody klasy MultiCurve
MultiCurve jest kolekcją obiektów klasy Curve. Obiekt jest obiektem prostym tylko wtedy jeśli
wchodzące w skład kolekcji obiekty składowe nie przecinają się w innych punktach niż punkty
definiujące obiekty. Z klasą związane są dwie metody:
•
•
IsClosed( ):Integer – zwraca wartość 1 jeśli obiekt jest zamknięty tzn.
StartPoint()=EndPoint() zachodzi dla każdego elementu Curve w MultiCurve,
Length( ):Double – wyznaczenie długości wszystkich elementów Curve chodzących
w skład obiektu.
Geometria i metody klasy Surface
Surface wyznacza obszar płaszczyzny. Związane z nim metody to:
•
•
•
Area( ):Double – pole powierzchni,
Centroid( ):Point – punktowa interpretacja obszaru,
PointOnSurface( ):Point – zwraca punkt z gwarancja, że jest położony wewnątrz obszaru
obiektu.
Geometria i metody klasy Polygon
Polygon jest obszarem zdefiniowanym przez jeden zewnętrzny obiekt stanowiący
granicę oraz wiele obiektów wewnętrznych, które definiują obszary wyłączone (wyspy). Do
specyficznych metod klasy należą:
• ExteriorRing( ):LineStringe – zwraca zewnętrzny obiekt definiujący poligon,
• NumInteriorRing( ):Integer – zwraca liczbę wewnętrznych obszarów poligonu,
• InteriorRingN(N:integer):LineString – zwraca geometrie wskazanego obszaru w ramach
poligonu,
Geometria i metody klasy MultiSurface
MultiSurface jest kolekcją elementów typu Surface. Wnętrza (interiors) elementów
Surface wchodzących w skład kolekcji nie mogą się wzajemnie przecinać. Klasa
MultiSurface jest jedynie klasą abstrakcyjną i tylko definiuje pewne charakterystyczne dla
niej metody. Instancyjną podklasą dla MutliSurface jest klas MultiPolygon. Poniżej
przedstawiono metody zdefiniowane dla klasy MultiSurface:
• Area( ):Double – pole powierzchni,
• Centroid( ):Point – punktowa interpretacja obszaru, rezultat nie gwarantuje że uzyskany
punkt będzie leżał w obszarze konkretnego MuluSurface.
• PointOnSurface( ):Point – zwraca punkt z gwarancja, że jest położony wewnątrz obszaru
obiektu.
Waldemar Izdebski - Wykłady z przedmiotu SIT
4.
46
Ogólne informacje o strukturach i bazach danych
Przyjęte do modelowania rzeczywistości modele przestrzenne w praktycznej realizacji
systemu muszą znaleźć odzwierciedlenie w odpowiednich danych, zapisanych w bazach
danych z zastosowaniem struktur danych określających ich interpretację.
4.1.
Struktury danych
Elementy składowe danych (określone typy liczb, ciągi znaków alfanumerycznych) są
ze sobą łączone, tworząc struktury danych, na których wykonuje się właściwe tym strukturom
operacje. Struktury danych stanowią formy pośrednie między modelami danych, które mają
charakter koncepcyjny i fizycznymi reprezentacjami danych w postaci numerycznej.
Struktury danych określają sposób dostępu do określonego obszaru lub obszarów pamięci i
ich interpretację. Najważniejsze struktury danych przedstawiono schematycznie na rysunku
3.1.
a)
P1
P2
b)
Pq
Pi
i,j
c)
dane
dane
dane
dane
wskaźnik
wskaźnik
wskaźnik
wskaźnik
wskaźnik-1
wskaźnik-1
wskaźnik-1
wskaźnik-1
dane
dane
dane
dane
wskaźnik-2
wskaźnik-2
wskaźnik-2
wskaźnik-2
wskazanie
puste
d)
wskazanie
puste
e)
f)
Rys. 4.1.Przykładowe struktury danych
wskazanie
puste
Waldemar Izdebski - Wykłady z przedmiotu SIT
47
Rekord
Rekord (rysunek 3.1a) jest zbiorem q elementów, które mogą być różnych typów i
zapisywane są w ustalonej kolejności. Elementy rekordu nazywane są polami. W
szczególności pola mogą być również innymi strukturami danych.
Tablica
Tablica (rysunek 3.1b) jest uporządkowanym zbiorem elementów tego samego typu.
Elementy identyfikowane są za pomocą q indeksów, gdzie q określa wymiar tablicy. Tablica
jednowymiarowa jest reprezentacją wektora, a tablica dwuwymiarowa - macierzy. Elementy
tablicy zapisywane są w ustalony sposób, np. wiersz po wierszu lub kolumna po kolumnie.
Lista
Lista jest uporządkowanym zbiorem elementów, które mogą być pojedynczymi danymi
określonych typów lub też innymi strukturami danych np. innymi listami. Lista nie
zawierająca innych list nazywa się listą liniową, natomiast zawierająca inne listy nazywa się
strukturą listową. Uporządkowanie elementów listy może być ustalone kolejnością zapisu lub
wskaźnikiem dołączonym do każdego elementu i wskazującym miejsce następnego lub
sygnalizującym koniec listy. W zależności od powiązań między elementami listy wyróżnia
się:
• listę jednokierunkową - dla każdego składnika poza ostatnim określony jest
składnik następny (rysunek 3.1c),
• listę dwukierunkową - każdy składnik z wyjątkiem pierwszego i ostatniego
posiada określony element poprzedni i następny, dla elementu pierwszego
określony jest jedynie element następny, a dla ostatniego element poprzedni
(rysunek 3.1d).
Szczególnymi przypadkami list liniowych są stosy i kolejki. Stos jest listą liniową, do której
dostęp istnieje tylko w jednym miejscu. Miejsce dostępu nazywa się wierzchołkiem stosu i
jest jedynym miejscem do którego można dołączyć lub z którego można usuwać elementy.
Oznacza to, że element wprowadzony na stos jako ostatni będzie odczytany jako pierwszy.
Kolejka jest listą liniową, do której elementy mogą być wprowadzane tylko w jednym końcu
(na początku kolejki) a usuwane w drugim końcu (na początku kolejki).
Drzewo
Drzewo jest strukturą ustanawiającą hierarchie elementów. Każdy element (węzeł) jest
przyporządkowany jednemu elementowi nadrzędnemu i ma pewną liczbę elementów
podrzędnych. Pierwszy element drzewa zwany korzeniem nie ma elementu nadrzędnego.
Elementy na najniższym poziomie nie mają elementów podrzędnych. Jeśli każdy z elementów
posiada co najwyżej dwa elementy następne (następniki) wtedy drzewo nazywany drzewem
binarnym. W przeciwnym wypadku drzewo nazywanym drzewem wielokierunkowym rzędu
n, gdzie n określa maksymalną liczbę następników. Rysunek 3.1e ilustruje drzewo binarne.
Graf
Graf jest klasą struktur reprezentujących sieć elementów. Każdy element może być połączony
z dowolnym innym elementem grafu. Z tego też względu grafy definiowane są przez dwa
zbiory: zbiór wierzchołków i zbiór krawędzi określający powiązania między poszczególnymi
wierzchołkami (rysunek 3.1f).
Waldemar Izdebski - Wykłady z przedmiotu SIT
4.2.
48
Bazy danych
Bazę danych określa się jako zbiór powiązanych wzajemnie danych. Powiązanie
danych realizowane jest przez zastosowanie odpowiednich struktur danych. Ponieważ jedna
baza danych może być wykorzystywana przez różne programy aplikacyjne, dla odciążenia
tych programów od powtarzających się czynności związanych z obsługa bazy danych,
wszystkie funkcje z tym związane wykonywane są przez specjalny pakiet programów zwany
systemem zarządzania bazą danych (DBMS - Database Management System). Główne
zadania DBMS można określić następująco:
1. zapamiętywanie danych oraz ich wyszukiwanie na podstawie różnych warunków,
2. oddzielenie funkcji zapamiętywania i wyszukiwania od programów aplikacyjnych, co
powoduje, że programy stają się mniej wrażliwe na zmiany bazy danych,
3. umożliwienie korzystania z danych na podstawie ich logicznego opisu; system
przejmuje całkowicie kontrolę nad wykorzystaniem urządzeń pamięciowych dla
zapisu danych,
4. umożliwienie dostępu do danych wielu użytkownikom jednocześnie,
5. weryfikowanie danych za pomocą odpowiednio zdefiniowanych procedur
kontrolnych,
6. ochrona danych (archiwizacja, zarządzanie prawami użytkowników).
Dostęp do bazy danych powinien być realizowany za pośrednictwem łatwego w
użyciu języka zapytań oraz z zastosowaniem języków programowania wysokiego poziomu.
Z punktu widzenia stosowanych struktur można wyróżnić cztery podstawowe rodzaje
baz danych: hierarchiczne, sieciowe, relacyjne i obiektowe. Wymieniona kolejność jest
również kolejnością chronologiczną w jakiej poszczególne bazy powstawały.
W hierarchicznej bazie danych stosuje się struktury typu drzewa. Węzłom w
strukturze drzewa odpowiadają zbiory rekordów danych. Zbiór rekordów poziomu wyższego
jest łączony relacjami 1:m (one-to-many) ze zbiorami poziomu niższego. Dzięki takiej
budowie, wyszukiwanie określonych elementów w bazie odbywa się stosunkowo szybko.
Istotna wadą baz hierarchicznych jest jednak redundancja danych wynikająca z faktu, że
można wykorzystywać jedynie relacje typu 1:m. Duże kłopoty sprawia również zmiana
struktury istniejącej bazy.
Sieciowa baza danych jest rozwinięciem bazy hierarchicznej przez dodanie
możliwości zapisu relacji m:m (many-to-many). Tak więc w bazie sieciowej poza relacjami
hierarchicznymi występują dodatkowe połączenia, umożliwiające uzyskanie dostępu do
danego rekordu bez potrzeby każdorazowego przechodzenia przez strukturę drzewa.
Wprowadzone zmiany spowodowały zmniejszenia redundancji danych przez dodatkowe
możliwości powiązania danych, które już istnieją, ale nie wyeliminowały trudności związane
ze zmianą struktury bazy istniejącej.
W relacyjnej bazie danych wykorzystywana jest struktura tablicy. W skład bazy
wchodzi jedna lub więcej powiązanych ze sobą tablic. Każda kolumna tablicy zawiera
elementy tego samego typu, ma swoją nazwę i jest przez nią identyfikowana. Zbiór wartości
jakie mogą występować w danej kolumnie nazywa się jej dziedziną. Wiersz tablicy,
nazywany rekordem lub krotką, identyfikowany jest za pośrednictwem wartości zapisanych w
nim elementów (atrybutów). Funkcję klucza, jednoznacznie określającego poszczególne
wiersze, może spełniać pojedyncza kolumna lub też kilka odpowiednio wybranych kolumn.
Waldemar Izdebski - Wykłady z przedmiotu SIT
49
Podstawą sprawnego i bezpiecznego operowania relacyjną bazą danych jest właściwy podział
danych na tablice, który dokonywany jest fazie projektowania bazy danych. Wyszukiwanie
danych w bazie dokonywane jest za pośrednictwem języka zapytań (query language). W
relacyjne bazie danych typowym językiem zapytań jest język SQL (ang. Structured Query
Language). Wyszukiwanie w więcej niż jednej tablicy dokonywane jest z wykorzystaniem
wspólnych wartości tego samego typu atrybutów. Operowanie baz relacyjnych na prostej
strukturze jaką są tablice powoduje, że dane posiadające struktury złożone muszą być
przechowywane w wielu powiązanych tablicach. Proces rekonstrukcji tak rozdzielonych
danych jest więc związany z przeszukiwaniem i analizowaniem zawartości wielu tablic.
Obiektowe bazy danych rozwinęły się wraz z rozwojem i rozpowszechnieniem
programowania zorientowanego obiektowo. Cechą charakterystyczną obiektowych baz
danych jest to, że przechowują obiekty o dowolnych strukturach wraz z przywiązanymi do
nich metodami (procedurami). Dzięki takiemu rozwiązaniu bazy takie mają znaczną
przewagę nad innymi rodzajami baz kiedy zachodzi konieczność przechowywania bardzo
złożonych struktur. Znaczącą wadą baz obiektowych w chwili obecnej jest problem z
realizacją zapytań. Większość współczesnych baz pozwala jedynie na proste przeszukiwanie
przechowywanych obiektów. Takie udogodnienia jakie bez problemów można
wykorzystywać w bazach relacyjnych na razie są nieosiągalne i znajdują się jedynie w
stadium rozwojowych prac badawczych. Rozwiązanie w przyszłości tych problemów
prawdopodobnie sprawi, że bazy te będą miały coraz większe zastosowania również w
systemach informacji przestrzennej.
Obecnie najczęściej stosowanymi bazami danych w systemach informacji
przestrzennej są bazy relacyjne. Pakiet programów służący zarządzaniu relacyjną bazą danych
nazywany jest RDBMS (ang. Relational Database Management System). Bazy te z
powodzeniem realizują wszystkie funkcje związane z zarządzaniem informacją opisową. W
przypadku zarządzania informacją przestrzenną pojawiają się natomiast pewne kłopoty
wynikające z dużej liczby danych przestrzennych oraz konieczności dostępu do nich w trybie
interaktywnym. Ma to szczególne znaczenie przy wyszukiwaniu obiektów spełniających
wymagane warunki przestrzenne (np. wybranie wszystkich obiektów leżących wewnątrz
danego wielokąta) lub topologiczny (np. wybór obiektów stykających się z obiektem danym).
Skrócenie czasu dostępu wiąże się przede wszystkim ze zredukowaniem liczby
kontaktów z pamięcią dyskową. Służy temu najczęściej i najskuteczniej wyposażanie
RDBMS w odpowiednie metody indeksowanie przestrzennego zgromadzonych danych
(Quad-tree, R-tree).
Download