11 Multimedialne bazy danych Andrzej Łachwa, WFAiIS UJ 2011
Obiekty przestrzenne w bazach danych Wszystkie rysunki pochodzą z OpenGIS Simple Features Specification For SQL. Revision 1.1, Open GIS Consortium, Inc. z 1999 r. Aktualne standardy zawarte są w dokumencie z 2005 r. OpenGIS Implementation Specification for Geographic Information - Simple feature access - Part 2: SQL option http://www.opengeospatial.org/standards/sfs
Obiekt przestrzenny (geographic feature, geospatial feature, geometry) jest czymś, co posiada lokalizację. W modelu zaproponowanym przez OGC każdy obiekt przestrzenny: - jest związany z pewnym przestrzennym systemem odniesienia, - należy do określonej klasy. Model OGC wprowadza: - klasy abstrakcyjne: obiekt geometryczny, krzywa, powierzchnia, kolekcja, multi-krzywa i multi-powierzchnia, - klasy zwykłe: punkt, łamana, odcinek, pierścień, wielobok, multi-punkt, multi-krzywa, multiwielobok.
Obiekt geometryczny ma następujące atrybuty: - typ, - SRID (Spatial Reference Identifier), identyfikator przestrzeni, układu współrzędnych (w MySQL jest to liczba całkowita, a wszystkie obiekty tworzone są w dwuwymiarowym układzie kartezjańskim), - koordynaty w przestrzeni, współrzędne (dwie liczby podwójnej precyzji; obiekt pusty nie ma współrzędnych; współrzędne dotyczą układu odniesienia, ale w MySQL mamy tylko układ współrzędnych kartezjańskich), - wnętrze, granicę i zewnętrze, - MBR, ograniczenie prostokątne, - prosty / złożony, - zamknięty / otwarty, - wymiary (-1, 0, 1, 2).
Właściwości punktu: - wartość współrzędnej na osi X, - wartość współrzędnej na osi Y. - punkt ma wymiar 0, - granicą punktu jest zbiór pusty.
Właściwości krzywej: - krzywa jest zwykle reprezentowana zbiorem punktów, przy czym w zależności od interpolacji możemy mieć różne rodzaje krzywych, - ma wymiar 1, - ma współrzędne każdego definiującego ją punktu, - jest prosta gdy nie przechodzi przez żaden swój punkt dwukrotnie, - jest zamknięta jeżeli punkt początkowy jest identyczny z końcowym, - granica krzywej zamkniętej jest zbiorem pustym, - granica krzywej otwartej to jej początek i koniec, - krzywa prosta i zamknięta, to pierścień.
Własności łamanej: - składa się z segmentów, a każdy segment jest zdefiniowany przez dwa punkty, - jest odcinkiem, gdy posiada tylko jeden segment, - jest pierścieniem, gdy jest krzywą prostą i zamkniętą.
Własności powierzchni: - ma wymiar 2, - jest prosta gdy ma jedną granicę zewnętrzną i może mieć wiele granic wewnętrznych (wiele dziur), a każda taka granica jest zamkniętą krzywą. - jedyną podklasą powierzchni jest klasa wieloboków. Własności wieloboku: - każda granica jest pierścieniem, - pierścienie te mogą się stykać, ale nie mogą przecinać, - wielobok nie może mieć wewnątrz wyciętych punktów, odcinków, ani na zewnątrz kolców, - wnętrze jest zbiorem spójnym, - każda dziura definiuje spójny fragment zewnętrza.
Własność kolekcji jest dowolnym zbiorem obiektów tej samej przestrzeni. Multipunkt - punkty nie są połączone i nie są uporządkowane - ma wymiar 0 - jest prosty, gdy żadne dwa punkty nie są identyczne - granicą jest zbiór pusty. Multi-łamana Multi-powierzchnia - powierzchnie wchodzące w jej skład nie mogą mieć niepustego przecięcia wnętrz - granice mogą się przecinać w skończonej liczbie punktów.
Multi-wielobok - wnętrza wieloboków nie mogą mieć niepustego przecięcia - granice nie mogą mieć nieskończenie licznej części wspólnej - nie mogą mieć linii przecinających, kolców, czy punktów wykluczonych; są regularnymi domkniętymi zbiorami punktów - liczba spójnych obszarów wnętrza jest równa liczbie wieloboków - ma wymiar 2 - granica jest zbiorem krzywych zamkniętych, z których każda jest granicą jednego z wieloboków, i na odwrót.
Formaty danych przestrzennych: - tekstowy (WKT) i binarny (WKB) - wewnętrzny format MySQL Przykłady WKT: POINT (15 20) LINESTRING (0 0, 10 10, 20 25, 50 60) 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 ( ) GEOMETRYCOLLECTION ( POINT(10 10), POINT(30 30), LINESTRING(15 15,20 20) )
Format WKB 1 bajt porządku ( 0 to little-endian, 1 to big-endian) 4 bajty określające typ obiektu 1 punkt 2 łamana 3 wielobok 4 multi-punkt 5 multi-łamana 6 multi-wielobok 7 kolekcja 8 bajtowe liczby podwójnej precyzji Przykład dla LINE(1 1): 01 01000000 000000000000F03F 000000000000F03F
Typy danych w MySQL - o pojedynczych wartościach: GEOMETRY POINT LINESTRING POLYGON - dla kolekcji: MULTIPOINT MULTILINESTRING MULTIPOLYGON GEOMETRYCOLLECTION
Funkcje przeznaczone do tworzenia obiektów przestrzennych w MySQL z opisu w formacie WKT: GeomFromText(wkt[,srid]), gdzie wkt to obiekt przestrzenny dowolnego typu PointFromText(wkt[,srid]), gdzie wkt to obiekt typu punkt MPointFromText( ) LineFromText( ), MLineFromText( ) PolyFromText( ), MPolyFromText( ) GeomCollFromText( )
Dla formatu WKB mamy odpowiednio: GeomFromWKB(wkb[,srid]) PointFromWKB( ), MPointFromWKB( ) LineFromWKB( ), MLineFromWKB( ) PolyFromWKB( ), MPolyFromWKB( ) GeomCollFromWKB( ) W obu formatach MySQL nie implementuje funkcji tworzących wieloboki i multi-wieloboki przy pomocy łamanych określających granice zewnętrzne i wewnętrzne.
Dodatkowe funkcje MySQL nie opisane w specyfikacji OpenGIS: GeometryCollection(geom1, geom2, ) tworzy WKB kolekcję LineString(point1, point2, ) tworzy WKB łańcuch MultiLineString(line1, line2, ) MultiPoint(p1, p2, ) MultiPolygon(pol1, pol2, ) Point(x,y) Polygon(ls1, ls2, )
Definiowanie kolumn z wartościami przestrzennymi: CREATE TABLE nazwatabeli (nazwakolumny GEOMETRY, ID int unsigned not null); ALTER TABLE nazwatabeli ADD pt POINT; Indeksy na kolumnach z wartościami przestrzennymi: CREATE, ALTER SPATIAL INDEX nazwakolumny DROP INDEX nazwakolumny
Wypełnianie bazy danymi przestrzennymi: INSERT INTO nazwatabeli VALUES (GeomFromText('POINT(1 2)')); SET @geom = GeomFromText('POINT(1 2)'); INSERT INTO nazwatabeli VALUES(@geom); SET @point = 'POINT(1 2)'; INSERT INTO nazwatabeli VALUES (PointFromText(@point));
Pobieranie danych przestrzennych z bazy: SELECT AsText(kolumna) FROM nazwatabeli; gdzie AsText() konwertuje obiekt z formatu wewnętrznego na format WKT; funkcja AsBinary() konwertuje na format WKB, Format wewnętrzny może być wykorzystany do przekazywania danych między tabalemi.
Funkcje konwersji danych przestrzennych: AsBinary (geom) AsText (geom) GeomFromText (wkt [,srid]) GeomFromWKB (wkt [,srid])
Funkcje dotyczące geometrii: Dimension (geom) [zwraca wymiar -1,0,1,2] Envelope (g) [zwraca MBR dla g] GeometryType (g) SRID (g) X (point), Y (point) [zwraca napis, np. POINT] [zwraca liczbę całkowitą] [zwraca współrzędną] StartPoint (linestring), EndPoint (linestring) [zwraca punkt] PointN (linestring, N) [zwraca n-ty punkt] GLength (linestring), GLength (multilinestring) [zwraca długość łamanej, multi-łamanej w postaci liczby podwójnej precyzji]
IsRing (linestring) [zwraca 1 gdy jest łamaną zamkniętą i prostą, 0 wpp, -1 gdy jest NULL] IsClosed (multilinestring) [zwraca 1 gdy każda łamana jest zamknięta, 0 wpp, -1 dla NULL] Area (polygon), Area (multipolygon) ExteriorRing (polygon) InteriorRingN (polygon, N) NumInteriorRings (polygon) Centroid (mpoly) [zwraca środek jako POINT] PointOnSurface (mply) [zwraca POINT] GeometryN (gc, N) [zwraca n-ty obiekt kolekcji] NumGeometries (gc) [zwraca liczbę obiektów]
Funkcje testujące relacje przestrzenne: MBRContains (g1, g2) [zwraca 1 gdy MBR obiektu g1 zawiera w sobie MBR obiektu g2] MBRDisjoint (g1, g2) [zwraca 1 gdy MBRy obiektów nie przecinają się] MBRIntersects (g1, g2)[zwraca 1 gdy się przecinają] MBROverlaps (g1, g2) [zwraca 1 gdy się nakładają; część wspólna powinna być tego samego wymiaru i różna od obu obiektów] MBRTouches (g1, g2) MBRWithin (g1, g2) [zwraca 1 gdy się stykają] [zwraca 1 gdy MBR obiektu g1 zawiera się w MBR obiektu g2]
Funkcje jeszcze nie zaimplementowane w MySQL: Boundary(g), IsEmpty(g), IsSimple(g) Buffer (g, d) [zwraca obiekt złożony z punktów, których odległość od g jest od d] ConvexHull (g) [zwraca wypukły korpus obiektu g] Difference (g1, g2) Intersection (g1, g2) [zwraca różnicę g1-g2] [zwraca część wspólną] SymDifference (g1, g2) [zwraca różnicę symetryczną] Union (g1, g2) [zwraca sumę] Relacje: Contains, Crosses, Disjoint, Distance, Equals, Intersects, Overlaps, Related, Touches, Within
Zobacz - Projekt OpenStreetMap www.openstreetmap.org http://wiki.openstreetmap.org/wiki/main_page Zobacz wykłady na MIT http://ocw.mit.edu/courses/urban-studies-andplanning/11-521-spatial-database-managementand-advanced-geographic-information-systemsspring-2003/