Professional Documents
Culture Documents
Krzysztof Jankiewicz
Krzysztof.Jankiewicz@cs.put.poznan.pl
A co poza tym?
Wszelkie systemy zawieraj ce dane pochodz ce z rozproszonych geograficznie lub przestrzennie miejsc (urz dy pracy, ZUS, marketing, reklama, spedycja, lecznictwo, )
Politechnika Pozna ska, Instytut Informatyki, KJ 4
PL EZ GM
fips_cntry
PL PL GM GM EZ
Relacje
Spatial Option
Dane przestrzenne
hierarchia obiektw
Warstwa przestrzenna
Geometria
...
Geometria
...
Geometria
Element
...
Element
...
Element
Punkt
Ci g linii
Wielok t
W bazie danych Oracle warstwa jest z reguy to sama z pojedyncz kolumn w tabeli.
Geometria
Jest struktur przestrzenn zbudowan ze zbioru prostych elementw geometrycznych, takich jak uki, proste czy punkty. Jest atomowa z punktu widzenia wi kszo ci operacji dost pnych w ramach Opcji Przestrzennej (Oracle Spatial) Reprezentowana przez obiekt typu SDO_GEOMETRY Przykady geometrii:
Wyspa, jezioro, wojewdztwo, obszar zalesiony; Ulica, rzeka, granica; Sklep, hurtownia, no nik reklamowy, apteka, szkoa Konstelacja gwiazd, zbir szk, archipelag
SDO_GEOMETRY(2007, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 277, 1003, 1, 421, 1003, 1, 609, 1003, 1, 695, 1003, 1), SDO_ORDINATE_ARRAY(12.603676, 50.408755, 12.620972, 50.411942, 12.671389, ) )
Element
Skadowa geometrii fragment jej struktury Z reguy nie jest przetwarzany w oderwaniu od geometrii. Elementy mog by r nego typu:
Punkt, Linia, Wielok t
5 3
W zale no ci od typu elementu do jego opisu wykorzystywany jest jeden lub cay zbir punktw (wsprz dnych)
SDO_GEOMETRY(2007, 8307, NULL, 1 2 3
SDO_ELEM_INFO_ARRAY(1, 1003, 1, 277, 1003, 1, 421, 1003, 1, 609, 1003, 1, 695, 1003, 1), SDO_ORDINATE_ARRAY(12.603676, 50.408755, 12.620972, 50.411942, 12.671389, ) )
10
SDO_GEOMETRY
atrybut SDO_GTYPE
SDO_GTYPE okre la typ geometrii w formacie dltt
d liczba wymiarw wykorzystywanych do opisu geometrii l dotyczy systemu LRS (linear referencing system) tt typ geometrii.
SDO_GEOMETRY AS SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES
SDO_GEOMETRY(2007, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 277, 1003, 1, 421, 1003, 1, 609, 1003, 1, 695, 1003, 1), SDO_ORDINATE_ARRAY(12.603676, 50.408755, 12.620972, 50.411942, 12.671389, ) )
12
SDO_GEOMETRY
atrybut SDO_GTYPE przykady
insert into MAJOR_CITIES(FIPS_CNTRY, CITY_NAME, GEOM) values ('PL', 'Poznan', MDSYS.SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(16.8869994, 52.3960002, NULL), NULL, NULL);
insert into COUNTRY_BOUNDARIES(FIPS_CNTRY, CNTRY_NAME, GEOM) values ('PL','Poland', MDSYS.SDO_GEOMETRY(2003, 8307, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(22.686068, 49.577095, ) );
insert into RIVERS(ID, NAME, GEOM) values (51,'Vistula', MDSYS.SDO_GEOMETRY(2002, 8307, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1), MDSYS.SDO_ORDINATE_ARRAY(19.282881, 50.02301, ) );
13
SDO_GEOMETRY
atrybut SDO_SRID
SDO_SRID definiuje geodezyjny ukad odniesienia (odwzorowanie) Warto pusta oznacza, e aden ukad odniesienia nie jest wykorzystywany wsprz dne s wsprz dnymi kartezja skimi. SDO_SRID musi zawiera warto znajduj c si w kolumnie SRID w tabeli SDO_COORD_REF_SYS W bazie danych Oracle 11g dost pnych jest prawie 4,5 tysi ca ukadw odniesienia
SDO_GEOMETRY AS SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES
SRID 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 8307 4327 COORD_REF_SYS_NAME Pulkovo 1942(58) / Poland zone I Pulkovo 1942(58) / Poland zone II Pulkovo 1942(58) / Poland zone III Pulkovo 1942(58) / Poland zone IV Pulkovo 1942(58) / Poland zone V ETRS89 / Poland CS2000 zone 5 ETRS89 / Poland CS2000 zone 6 ETRS89 / Poland CS2000 zone 7 ETRS89 / Poland CS2000 zone 8 ETRS89 / Poland CS92 Longitude / Latitude (WGS 84) WGS 84 (geographic 3D)
SDO_GEOMETRY(2007, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 277, 1003, 1, 421, 1003, 1, 609, 1003, 1, 695, 1003, 1), SDO_ORDINATE_ARRAY(12.603676, 50.408755, 12.620972, 50.411942, 12.671389, ) )
14
SDO_GEOMETRY
atrybut SDO_POINT
SDO_POINT zoptymalizowana metoda przechowywania pojedynczych punktw przestrzennych Jest definiowany za pomoc typu SDO_POINT_TYPE posiadaj cego trzy atrybuty (X,Y,Z) Nie jest uwzgl dniany gdy parametry SDO_ELEM_INFO i SDO_ORDINATES s wypenione
SDO_GEOMETRY AS SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES
insert into MAJOR_CITIES(FIPS_CNTRY, CITY_NAME, GEOM) values ('PL', 'Poznan', MDSYS.SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(16.8869994, 52.3960002, NULL), NULL, NULL);
15
SDO_GEOMETRY
atrybut SDO_ELEM_INFO
Je eli geometria nie jest pojedynczym SDO_GTYPE punktem przechowywanym w SDO_SRID parametrze SDO_POINT wwczas SDO_POINT SDO_ELEM_INFO SDO_ELEM_INFO zawiera opis SDO_ORDINATES poszczeglnych elementw wchodz cych w skad geometrii. Ka dy element opisywany jest przez trzy parametry:
SDO_STARTING_OFFSET pozycja pierwszej koordynaty w SDO_ORDINATES SDO_ETYPE definiuj cy typ elementu SDO_INTERPRETATION interpretacja, posiada r ne znaczenie w zale no ci od typu elementu
SDO_GEOMETRY(2007, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 277, 1003, 1, 421, 1003, 1, 609, 1003, 1, 695, 1003, 1), SDO_ORDINATE_ARRAY(12.603676, 50.408755, 12.620972, 50.411942, 12.671389, ) )
SDO_GEOMETRY AS
16
SDO_ETYPE i SDO_INTERPRETATION
czyli typy elementw i ich interpretacje
Typ obiektu
nieznany element punkt
Warto ci SDO_ETYPE
0 1
Warto ci SDO_INTERPRETATION
1 punkt 0 orientacja (kierunek) dla punktu # liczba punktw w kolekcji 1 linie proste, 2 uki 1 linie proste, 2 uki, 3 zoptymalizowany prostok t, 4 koo # liczba skadowych (ci gw linii) tworz cych zo ony ci g linii # liczba skadowych (ci gw linii) tworz cych zo ony wielok t # liczba wielok tw tworz ca paszczyzn (wspdzielone kraw dzie mog nale e co najwy ej do dwch wielok tw) # liczba paszczyzn tworz ca bry brya mo e si skada z jednej paszczyzny zewn trznej oraz dowolnej liczby paszczyzn wewn trznych 3 zoptymalizowany prostopado cian 17
ci g linii wielok t
4 1005 zewn trzny 2005 wewn trzny 1006 zewn trzna 2006 wewn trzna 1007
brya
Pene wsparcie dla danych 3D pojawio si w wersji 11g (dotyczy to gwnie elementw, operatorw, indeksowania)
SDO_ETYPE i SDO_INTERPRETATION
przykady
(1,2,1) (1,1003,2) (1,1003,1)
(1,1,7)
(1,1005,8,)
(1,1003,3)
(1,1003,1, 9,2003,1)
18
SDO_GEOMETRY
atrybut SDO_ORDINATES
Zawiera koordynaty SDO_GEOMETRY AS SDO_GTYPE (wsprz dne poszczeglnych SDO_SRID SDO_POINT punktw) wszystkich SDO_ELEM_INFO SDO_ORDINATES elementw tworz cych geometri Liczba warto ci su cych do opisania wsprz dnych ka dego punktu jest uzale niona warto ci atrybutu SDO_GTYPE Atrybut SDO_ELEM_INFO wyznacza, ktre punkty w SDO_ORDINATES nale do ktrych elementw
Politechnika Pozna ska, Instytut Informatyki, KJ 19
SDO_GEOMETRY
atrybut SDO_ORDINATES przykady
(1,2,1) (1,2, 22,9, 41,2, 43,9, 71,1) (1,4,3, 1,2,1, 5,2,2, 13,2,1) (17,1, 1,1, 1,9, 2,14, 13,9, 15,5, 19,3, 31,3, 36, 8)
(1,1003,4) (10,20, 4,17, 1,10) (1,1,7) (1,12, 3,6, 14,6, 17,12, 22,15, 26,15, 30,13) (1,1003,1, 11,2003,1) (1,1, 30,5, 20,12, 7,12, 1,1, 8,5, 8,10, 18,10, 18,5, 8,5)
Politechnika Pozna ska, Instytut Informatyki, KJ 20
SDO_GEOMETRY
przykady
insert into MAJOR_CITIES(FIPS_CNTRY, CITY_NAME, GEOM) values ('PL', 'Poznan', MDSYS.SDO_GEOMETRY(2001, 8307, MDSYS.SDO_POINT_TYPE(16.8869994, 52.3960002, NULL), NULL, NULL); insert into COUNTRY_BOUNDARIES(FIPS_CNTRY, CNTRY_NAME, GEOM) values ('PL','Poland', MDSYS.SDO_GEOMETRY(2003, 8307, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(22.686068,49.577095, 22.717216,49.604439,22.779999,49.674995,23.110828,49.954994, 23.146107,49.983047,23.228189,50.046661,23.303608,50.10083, )); insert into RIVERS(ID, NAME, GEOM) values (51,'Vistula', MDSYS.SDO_GEOMETRY(2002, 8307, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1), MDSYS.SDO_ORDINATE_ARRAY(19.282881, 50.02301, ) ); Politechnika Pozna ska, Instytut Informatyki, KJ 21
Metadane
Poszczeglne kolumny typu SDO_GEOMETRY mog zosta opisane (zarejestrowane) dzi ki umieszczeniu w bazie danych odpowiednich informacji w tzw. metadanych Metadane pozwalaj aplikacjom podejmowa decyzje odno nie technik obsugi (np. indeksacji, wizualizacji) okre lonych kolumn Dost p do metadanych jest mo liwy za pomoc perspektyw systemowych [USER|ALL|DBA]_SDO_GEOM_METADATA Struktura tych perspektyw jest nast puj ca:
Nazwa kolumny table_name column_name Typ kolumny varchar2(32) varchar2(1024) Opis nazwa tabeli nazwa zarejestrowanej kolumny informacja dotyczca kadego z wykorzystywanych wymiarw; dla kadego wymiaru przechowywane s nastpujce dane: nazwa wymiaru, warto wymiaru ograniczajca geometrie z dou, warto ograniczajca z gry, tolerancja. ukad odniesienia wykorzystywany przez wszystkie geometrie w kolumnie
diminfo
mdsys.sdo_dim_array
srid
number
22
Metadane
wskazwki i przykad
Rejestracja metadanych jest konieczna przed utworzeniem indeksu na kolumnie zawieraj cej geometrie 26.369824, Rejestracja jest realizowana tylko raz dla warstwy (czyli okre lonej kolumny w okre lonej tabeli)
INSERT INTO USER_SDO_GEOM_METADATA VALUES ( 'COUNTRY_BOUNDARIES', 'GEOM', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', 12.603676, 26.369824, 1), MDSYS.SDO_DIM_ELEMENT('Y', 45.8464, 58.0213, 1) ), 8307 ); INSERT INTO USER_SDO_GEOM_METADATA VALUES ( 'MAJOR_CITIES', 'GEOM', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', 12.603676, 26.369824, 1), MDSYS.SDO_DIM_ELEMENT('Y', 45.8464, 58.0213, 1) ), 8307 );
12.603676, 45.8464 58.0213
23
Zapytania z wyk. operatora najbli szego s siedztwa Du a liczba modyfikacji Zapytanie z wykorzystaniem SDO_WITHIN_DISTANCE Indeksowanych wymiarw Przybli anie geometrii
R-tree indeks
3 1
a
2 6 7
A root B
9
b4
A
root B b c d
Indeks r-tree dokonuje przybli enia ka dej geometrii przez zastosowanie pojedynczego najmniejszego obejmuj cego prostok ta (MBR minimum bounding rectangle) Modyfikacje tabeli mog wpywa na degradacj jako ci indeksu Jako indeksu mo na przywrci za pomoc jego przebudowy Do analizy indeksu Oracle udost pnia nast puj ce funkcje i procedury:
SDO_TUNE.ESTIMATE_RTREE_INDEX_SIZE szacuje maksymaln liczb MB konieczn do zao enia indeksu SDO_TUNE.ANALYZE_RTREE procedura okre laj ca czy indeks wymaga przebudowy czy nie. Wylicza obecn jego jako i porwnuje z jako ci pocz tkow SDO_TUNE.RTREE_QUALITY zwraca jako indeksu SDO_TUNE.QUALITY_DEGRADATION zwraca stopie degradacji indeksu
25
Indeksowanie
przykad
create index COUNTRY_BOUNDARIES_IDX on COUNTRY_BOUNDARIES(GEOM) INDEXTYPE IS MDSYS.SPATIAL_INDEX; SELECT SDO_TUNE.RTREE_QUALITY(USER,'COUNTRY_BOUNDARIES_IDX') QUALITY from dual; QUALITY ------------------0,00167696496006595 SELECT SDO_TUNE.QUALITY_DEGRADATION(USER, 'COUNTRY_BOUNDARIES_IDX') DEGRADATION from dual; DEGRADATION ---------------1,00000295777237 RTREE_QUALITY obecnie QUALITY_DEGRADATION = ------------------------RTREE_QUALITY na pocz tku
begin SDO_TUNE.analyze_rtree(USER,'COUNTRY_BOUNDARIES_IDX'); end; Quality Statistics for Index table: MDRT_15BC4$ Current Perf. Index : ,00167696496006595 Previous Perf. Index: ,00167696 Approximate Increase in Query-time: 0 Rebuild ?: NO
"
'
&
&
&
&
'
26
28
29
-- MAJOR_CITIES2.sql DROP TABLE MAJOR_CITIES2; CREATE TABLE MAJOR_CITIES2 ( FIPS_CNTRY VARCHAR2(2), CITY_NAME VARCHAR2(40), GEOM MDSYS.SDO_GEOMETRY); DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'MAJOR_CITIES2' AND COLUMN_NAME = 'GEOM' ; INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('MAJOR_CITIES2', 'GEOM', MDSYS.SDO_DIM_ARRAY (MDSYS.SDO_DIM_ELEMENT('X', 12.854999448, 26.316667448, 0.000000050), MDSYS.SDO_DIM_ELEMENT('Y', 45.868000183, 57.785999183, 0.000000050) ), NULL); COMMIT;
31
C:\>sqlldr scott/tiger MAJOR_CITIES2 SQL*Loader: Release 10.2.0.1.0 - Production on Cz Maj 15 15:36:25 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. Commit point reached - logical record count 62
32
33
34
1 2
select ID from FIGURY where SDO_RELATE(KSZTALT, MDSYS.SDO_GEOMETRY(2001,null, MDSYS.SDO_POINT_TYPE(3,3,null), null,null), 'mask=ANYINTERACT querytype=WINDOW') = 'TRUE'; ID ---------2
35
36
Operatory i funkcje
Dane przestrzenne mo na przetwarza za pomoc bardzo bogatego zbioru operatorw i funkcji. Podzia ich jest nast puj cy:
Operatory przestrzenne (Spatial Operators) Funkcje geometryczne (Geometry Functions) Przestrzenne funkcje grupuj ce (Spatial Aggregate Functions)
37
Operatory przestrzenne
SDO_FILTER sprawdza czy dwa obiekty wyst puj w okre lonej zale no ci. Wykorzystuje tylko filtr podstawowy, wymaga indeksu. SDO_NN su y do identyfikacji najbli szego s siedztwa, wymaga indeksu. SDO_NN_DISTANCE funkcja zwracaj ca odlego od obiektw zwrconych przez operator SDO_NN. SDO_RELATE wykorzystuje indeks do wyznaczenia obiektw b d cych w okre lonym stosunku przestrzennym z geometri . SDO_WITHIN_DISTANCE wykorzystuje indeks do wyznaczenia zbioru geometrii znajduj cej si w ramach okre lonej odlego ci od obiektu. W przypadku ka dego z operatorw, pierwszym argumentem musi by kolumna na ktrej zosta zao ony indeks r-tree.
38
SDO_FILTER
SDO_FILTER( geometria1, geometria2, parametry)
Podstawowym i wymaganym parametrem jest querytype. Mo e on przyjmowa dwie warto ci: WINDOW i JOIN
WINDOW zalecany w wi kszo ci przypadkw, mo e su y do porwnywania pojedynczej geometrii (2) z kolumn w tabeli (1) JOIN su y do wykonywania po cze pomi dzy dwoma tabelami zawieraj cymi geometrie, rzadziej wykorzystywany
select from where and A.CNTRY_NAME A_NAME, B.CNTRY_NAME B_NAME COUNTRY_BOUNDARIES A, COUNTRY_BOUNDARIES B SDO_FILTER(A.GEOM, B.GEOM, 'querytype=JOIN') = 'TRUE' B.CNTRY_NAME = 'Poland'; A_NAME Lithuania Byelarus Russia Poland Ukraine Germany Slovakia Czech Republic B_NAME Poland Poland Poland Poland Poland Poland Poland Poland
39
SDO_NN i SDO_NN_DISTANCE
SDO_NN(geometria1, geometria2, parametry [, numer]) SDO_NN_DISTANCE(numer)
Parametr sdo_num_res operatora SDO_NN okre la liczb obiektw z najbli szego s siedztwa jak nale y zwrci w zapytaniu. Parametr unit operatora SDO_NN pozwala wyrazi odlego przez operator SDO_NN_DISTANCE w po danych jednostkach. Jedyny parametr operatora SDO_NN_DISTANCE musi by liczb podan w operatorze SDO_NN jako ostatni parametr.
select A.CITY_NAME, ROUND(SDO_NN_DISTANCE(1)) DISTANCE from MAJOR_CITIES A where SDO_NN(GEOM,MDSYS.SDO_GEOMETRY(2001, 8307, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1, 1), MDSYS.SDO_ORDINATE_ARRAY(16.91673,52.38237)), 'sdo_num_res=4 unit=km',1) = 'TRUE'; CITY_NAME Pila Poznan Konin Leszno DISTANCE 86 3 93 65
40
SDO_RELATE
SDO_RELATE(geometria1, geometria2, parametry)
41
42
SDO_WITHIN_DISTANCE
SDO_WITHIN_DISTANCE(geometria1, geometria2, parametry);
43
Waliduj ce:
VALIDATE_GEOMETRY sprawdza poprawno geometrii, VALIDATE_LAYER sprawdza poprawno warstwy (wszystkich geometrii w kolumnie okre lonej tabeli)
45
SDO_GEOM.RELATE
SDO_GEOM.RELATE( geometria1 MDSYS.SDO_GEOMETRY, mask VARCHAR2, geometria2 MDSYS.SDO_GEOMETRY, tolerancja NUMBER ) RETURN VARCHAR2;
NAME Nogat Vistula Odra Bug Dniester Oder-Spree-Kanal Vistula San Odra Morava Oder Oder-Havel-Kanal
RELATION CONTAINS CONTAINS CONTAINS CONTAINS DISJOINT DISJOINT OVERLAPBDYDISJOINT OVERLAPBDYDISJOINT OVERLAPBDYINTERSECT OVERLAPBDYINTERSECT OVERLAPBDYINTERSECT TOUCH
46
Funkcje waliduj ce
Weryfikacja typu
Prawidowa warto SDO_GTYPE Warto ci SDO_ETYPE musz by zgodne z SDO_GTYPE Czy SDO_ELEM_INFO_ARRAY posiada liczb warto ci podzieln przez trzy
47
Funkcje waliduj ce
Ci g linii zawiera co najmniej dwa punkty Jedno i czterocyfrowe warto ci SDO_ETYPE nie mog by wymieszane przy definiowaniu wielok tw Punkty w przypadku koa lub uku nie mog znajdowa si na linii prostej Geometrie musz znajdowa si w granicach wyznaczonych przez metadane Geometrie LRS posiadaj trzy lub cztery wymiary oraz prawidow pozycj liczby wymiarw
48
Funkcje waliduj ce
SDO_GEOM.VALIDATE_GEOMETRY
SDO_GEOM.VALIDATE_GEOMETRY( geometria MDSYS.SDO_GEOMETRY, tolerancja NUMBER ) RETURN VARCHAR2;
Funkcja weryfikuj ca spjno geometrii. Sprawdza reprezentacj geometrii na podstawie definicji elementu Zalecanym jej odpowiednikiem jest funkcja GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT Wyniki dziaania funkcji s nast puj ce:
TRUE je li geometria jest prawidowa Je li posiada b dy wwczas uzyskujemy numer b du Oraclea okre laj cy przyczyn b du W przypadku funkcji GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT otrzymujemy dodatkowo kontekst b du informacje w jakim miejscu definicji geometrii b d zosta znaleziony
geometrii
SQL> select SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(WO_KSZTALT,0.01) VALID, 2 WO_NAZWA from SO_WOJEWODZTWA 3 where SDO_GEOM.VALIDATE_GEOMETRY(WO_KSZTALT,0.01) <> 'TRUE'; VALID WO_NAZWA ---------------------------------------- -------------------13367 [Element <1>] [Ring <1>] opolskie Politechnika Pozna ska, Instytut Informatyki, KJ
ORA-13367 Wrong orientation for interior/exterior rings
49
Funkcje waliduj ce
SDO_GEOM.VALIDATE_LAYER
SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT( tabela VARCHAR2, kolumna_geom VARCHAR2, tabela_wynikowa VARCHAR2[, cz sto _zatwierdzania NUMBER]);
Zalecanym odpowiednikiem jest SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT Procedura wypenia tabel wynikow informacjami o rezultatach walidacji wszystkich geometrii w warstwie Tabela wynikowa powinna by utworzona przed wywoaniem procedury
CREATE TABLE val_results (sdo_rowid ROWID, result varchar2(1000)); EXECUTE SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('SO_WOJEWODZTWA','WO_KSZTALT','VAL_RESULTS'); PL/SQL procedure successfully completed. SQL> SELECT * from val_results; SDO_ROWID RESULT ------------------ ---------------------------------------Rows Processed <16> AAAKl7AABAAANMyAAD 13367 [Element <1>] [Ring <1>] ORA-13367 Wrong orientation for interior/exterior rings
50
SDO_GEOM.SDO_DISTANCE
SDO_GEOM.SDO_DISTANCE( geometria1 MDSYS.SDO_GEOMETRY, geometria2 MDSYS.SDO_GEOMETRY, toleracja IN NUMBER [, jednostki IN VARCHAR2]) RETURN NUMBER; select A.CITY_NAME, B.CITY_NAME, ROUND(SDO_GEOM.SDO_DISTANCE(A.GEOM, B.GEOM, 1, 'unit=km')) ODL from MAJOR_CITIES A, MAJOR_CITIES B where A.CITY_NAME = 'Poznan' CITY_NAME CITY_NAME and B.CITY_NAME in ('Berlin', 'Warsaw'); Poznan Berlin
Poznan Warsaw
SDO_GEOM.SDO_INTERSECTION
SDO_GEOM.SDO_INTERSECTION( geometria1 MDSYS.SDO_GEOMETRY, geometria2 MDSYS.SDO_GEOMETRY, tolerancja NUMBER ) RETURN NUMBER; select from where and SDO_GEOM.SDO_INTERSECTION(A.GEOM, B.GEOM, 1) GRANICA COUNTRY_BOUNDARIES A, COUNTRY_BOUNDARIES B A.CNTRY_NAME = 'Poland' B.CNTRY_NAME = 'Germany';
SDO_GEOMETRY(2006, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 125, 2, 1), SDO_ORDINATE_ARRAY(14.275627, 53.699066, 14.309721, 53.55555, 14.413261, 53.33 8959, ) )
51
SDO_GEOM.SDO_UNION
SDO_GEOM.SDO_UNION( geometria1 MDSYS.SDO_GEOMETRY, geometria2 MDSYS.SDO_GEOMETRY, tolerancja IN NUMBER ) RETURN MDSYS.SDO_GEOMETRY;
select from where and SDO_GEOM.SDO_UNION(A.GEOM, B.GEOM, 1) CZECHOSLOWACJA COUNTRY_BOUNDARIES A, COUNTRY_BOUNDARIES B A.CNTRY_NAME = 'Czech Republic' B.CNTRY_NAME = 'Slovakia';
CZECHOSLOWACJA -----------------------------------------------------SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(18.851246, 49.517357, 18.852219, 49.527771, 18.847775, 49.554161, 18.839443, 49.594994, 18.810831, 49.673328, 18.786942, 49.681938, ) )
52
SDO_GEOM.SDO_AREA
SDO_GEOM.SDO_AREA( geometria MDSYS.SDO_GEOMETRY, tolerancja NUMBER[, jednostki VARCHAR2] ) RETURN NUMBER; select A.CNTRY_NAME, ROUND(SDO_GEOM.sdo_area(A.GEOM, 1, 'unit=SQ_KM')) POWIERZCHNIA from COUNTRY_BOUNDARIES A CNTRY_NAME POWIERZCHNIA order by 2 desc
Poland Ukraine Hungary Romania Czech Republic Austria 311664 100551 92498 84721 77447 68551
SDO_GEOM.SDO_BUFFER
SDO_GEOM.SDO_BUFFER( geometria MDSYS.SDO_GEOMETRY, odlego NUMBER, tolerancja NUMBER[, parametry VARCHAR2] ) RETURN MDSYS.SDO_GEOMETRY;
select SDO_GEOM.SDO_BUFFER(A.GEOM, 100, 1, 'unit=km') GEOM from COUNTRY_BOUNDARIES A where A.CNTRY_NAME = 'Poland'
53
SDO_GEOM.SDO_CENTROID
SDO_GEOM.SDO_CENTROID( geometria MDSYS.SDO_GEOMETRY, tolerancja NUMBER) RETURN MDSYS.SDO_GEOMETRY;
select SDO_GEOM.SDO_CENTROID(B.GEOM,1) SRODEK_POLSKI from COUNTRY_BOUNDARIES B where B.CNTRY_NAME = 'Poland'; SRODEK POLSKI -------------------------------SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(19.4302985, 52.1100187, NULL), NULL, NULL)
Pomi dzy Go lubem a Siemieniczkami, na poudnie od Kutna
SDO_GEOM.SDO_LENGTH
SDO_GEOM.SDO_LENGTH( geometria MDSYS.SDO_GEOMETRY, tolerancja NUMBER [, jednostki VARCHAR2]) RETURN NUMBER;
select A.CNTRY_NAME, B.CNTRY_NAME, ROUND(SDO_GEOM.SDO_LENGTH(SDO_GEOM.SDO_INTERSECTION(A.GEOM, B.GEOM, 1), 1, 'unit=km')) from COUNTRY_BOUNDARIES A, CNTRY_NAME CNTRY_NAME DLUGOSCI_GRANIC COUNTRY_BOUNDARIES B Poland Lithuania 82 where A.CNTRY_NAME = 'Poland';
Poland Poland Poland Poland Poland Poland Russia Byelarus Slovakia Germany Ukraine Czech Republic 197 322 374 376 391 525
54
SDO_GEOM.SDO_MBR
SDO_GEOM.SDO_MBR( geometria MDSYS.SDO_GEOMETRY [, definicje_wymiarw IN MDSYS.SDO_DIM_ARRAY] ) RETURN MDSYS.SDO_GEOMETRY;
select SDO_GEOM.SDO_MBR(A.GEOM) GEOM from COUNTRY_BOUNDARIES A where A.CNTRY_NAME = 'Poland' -------------------------------------------------------------------------------SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR AY(14.147637, 49.002914, 24.143469, 54.836037))
55
Typ MDSYS.SDOAGGRTYPE
Wiele funkcji agreguj cych przyjmuje jako parametr obiekt typu MDSYS.SDOAGGRTYPE Definicja typu MDSYS.SDOAGGRTYPE jest nast puj ca:
CREATE TYPE sdoaggrtype AS OBJECT ( geometria MDSYS.SDO_GEOMETRY, tolerancja NUMBER);
Tolerancja ma wpyw na wyniki dziaania wielu funkcji przestrzennych, w tym funkcji agreguj cych. Definiuje ona odlego , ktra ma by "pomijana" w obliczeniach
SDO_AGGR_UNION Tolerancja SDO_AGGR_UNION
57
SDO_AGGR_UNION
SDO_AGGR_UNION( AggregateGeometry MDSYS.SDOAGGRTYPE) RETURN MDSYS.SDO_GEOMETRY;
select SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(B.GEOM,1)) GEOM from COUNTRY_BOUNDARIES B SDO_GEOMETRY(2007, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 31, 1003, 1, 219, 1003, 1, 269, 1003, 1, 277, 1003, 1, 381, 1003, 1, 703, 1003, 1, 805, 1003, 1, 843, 1003, 1, 865, 1003, 1), SDO_ORDINATE_ARRAY(12.900692, 54.442356, 12.803333, 54.442497, 12.680777, 54.444942, 12.660443, 54.44611, 12.63 8611, 54.448944, 12.603676, 54.452486, ) )
58
Badany zbir: 32047 wierszy Ukad odniesienia: SRID COORD_REF_SYS_NAME 30 8307 Longitude / Latitude (WGS 84)
COORD_REF_SYS_KIND GEOGRAPHIC2D
25
Szybko operacji
obszar SDO_FILTER IDX SDO_FILTER TAB SDO_NN SDO_WITHIN_DISTANCE
20 czas (sek.)
15
10
select SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(B.ODL_KSZTALT,1)) OBSZAR from A_OBIEKTY_ODL B where ODL_OBIEKT_ID between p_od_id and p_do_id;
200 400 600 800 1000 1200 1400 1600 1800 2000
select count(*) liczba punktw w obszarze from A_OBIEKTY_ODL OBSZAR LICZBA_PKT SDO_FILTER IDX SDO_FILTER TAB SDO_NN SDO_WITHIN_DISTANCE where SDO_FILTER(ODL_KSZTALT,r_obsz.OBSZAR,'querytype=WINDOW') = 'TRUE'; 200 0,162125 0,05175 0,07325 6,8281875 3,2773125 select from where select from where
400 0,5430625 0,057375 0,078125 8,665125 600 1,2598125 0,061625 0,08 10,905375 count(*) 800 2,461875 0,062375 0,0830625 12,997875 A_OBIEKTY_ODL 1000 4,2353125 0,062375 0,087125 15,12 SDO_NN(ODL_KSZTALT,r_obsz.OBSZAR,'sdo_num_res=1000',1) = 'TRUE'; 1200 6,8164375 0,065375 0,087875 17,2471875 1400 10,7823125 0,0673125 0,09175 18,7355 count(*) 1600 15,38275 0,0723125 0,09175 20,6963125 1800 20,307625 0,163 0,0879375 22,6435 A_OBIEKTY_ODL 2000 26,9638125 0,0655 0,0889375 24,7166875 SDO_WITHIN_DISTANCE(ODL_KSZTALT,r_obsz.OBSZAR,'distance=500 unit=m') 5,253875 7,450125 9,400625 11,51175 13,916875 16,4139375 18,557625 19,5323125 21,044 = 'TRUE';
59
Schemat Informacyjny
Politechnika Pozna ska, Instytut Informatyki, KJ 60
SQL/MM
Standard ISO/IEC 13249 SQL/MM w skrcie SQL/MM obejmuje rozszerzenia multimedialne w SQL takie jak:
przetwarzanie du ych obiektw tekstowych, przetwarzanie obrazw, dane przestrzenne, eksploracja danych.
ci.
61
ST_Surface
ST_Curve
ST_Point
ST_GeomCollection
ST_CurvePolygon
ST_MultiSurface
ST_MultiCurve
ST_MultiPoint
ST_Polygon
ST_MultiPolygon
ST_MultiLineString
ST_LineString
ST_CircularString
ST_CompoundCurve
63
ST_CircularString
ST_LineString
ST_CompoundCurve
64
ST_CurvePolygon ST_Polygon
65
67
create table SOME_GEOMS( NAME varchar2(10), GEOM st_geometry); insert into SOME_GEOMS values ('M', ST_Geometry('multipoint M (1 1 5, 2 2 15, 1 2 10)', 0));
68
70
71
Do przedstawianej kategorii mo na zaliczy tak e funkcj ST_Distance, ktra daje w wyniku odlego pomi dzy geometriami.
Politechnika Pozna ska, Instytut Informatyki, KJ 72
select A.NAME, B.NAME, ST_INTERSECTS(A.GEOM, B.GEOM) INTERSECTS, ST_ENVINTERSECTS(A.GEOM, B.GEOM) ENVELOPE_INTERSECTS from RIVERS A, RIVERS B where A.NAME = 'Vistula' and B.NAME = 'Odra' NAME NAME INTERSECTS ENVELOPE_INTERSECTS --------- ---------- ---------- ------------------Vistula Odra 0 1
73
select ST_LINESTRING('linestring (10 10, 10 0, 0 0 )', 0).ST_APPENDPOINT(ST_POINT(0, 10)).ST_ASTEXT() WYNIK from DUAL; WYNIK ----------------linestring (10 10, 10 0, 0 0, 0 10) select ST_LINESTRING('linestring (10 10,10 0,0 0 )',0).ST_CHANGEPOINT(ST_POINT(0,0),ST_POINT(0,10)).ST_ASTEXT() WYNIK from DUAL; WYNIK ----------------linestring (10 10, 10 0, 0 10) select ST_LINESTRING('linestring (10 10, 10 0, 0 0 )', 0).ST_REMOVEPOINT(ST_POINT(0, 0)).ST_ASTEXT() WYNIK from DUAL; WYNIK ----------------linestring (10 10, 10 0)
75
Standard SQL/MM Part 3: Spatial implementacja w bazie danych Oracle 11g Typ ST_GEOMETRY
Hierarchia typw Metody
Konwersje pomi dzy geometriami a zewn trznymi typami danych Pobieranie wasno ci lub miar z geometrii Porwnywanie geometrii w oparciu o wyst puj ce mi dzy nimi relacje przestrzenne Generowanie nowych geometrii z ju istniej cych
78
83
select B.CNTRY_NAME, count(*) from MYST_COUNTRY_BOUNDARIES B, MYST_MAJOR_CITIES C where C.STGEOM.ST_CONTAINS(C.STGEOM) = 1 group by B.CNTRY_NAME;
CNTRY_NAME Poland Slovakia Denmark Slovenia Austria Germany Byelarus Hungary Latvia Romania Czech Republic Russia Sweden Ukraine Lithuania
COUNT(*) 50 3 1 1 6 3 2 19 1 13 7 1 7 7 1
84
distinct B.CNTRY_NAME, R.name MYST_COUNTRY_BOUNDARIES B, RIVERS R B.CNTRY_NAME = 'Poland' ST_LINESTRING(R.GEOM).ST_INTERSECTS(B.STGEOM) = 1 CNTRY_NAME Poland Poland Poland Poland Poland Poland Poland Poland NAME Bug Morava Oder Odra San Nogat Oder-Havel-Kanal Vistula
85
Brak funkcji z pierwszej kategorii wynika z faktu, i w ogle brak wsparcia w geometriach ST_* dla miar i ich warto ci. Brak metod z drugiej kategorii jest niestety dosy powa nym utrudnieniem. Brak funkcji takich jak: ST_AppendPoint, ST_ChangePoint czy ST_RemovePoint powoduje, e programista musi samodzielnie implementowa tego typu operacje je eli zamierza modyfikowa definicje przechowywanych obiektw przestrzennych.
Politechnika Pozna ska, Instytut Informatyki, KJ 86
87
SELECT STATEMENT, GOAL = ALL_ROWS SORT GROUP BY NOSORT NESTED LOOPS TABLE ACCESS FULL SCOTT DOMAIN INDEX SCOTT
88
Innym powodem braku implementacji Schematu Informacyjnego mo e by fakt, e Oracle umo liwi wprowadzanie opisw dotycz cych danych przestrzennych zgodnie ze specyfikacj "OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture" Zosta zdefiniowany nowy typ danych ST_ANNOTATION_TEXT, ktry mo e by wykorzystywany do przechowywania opisw dotycz cych danych przestrzennych Informacje zdefiniowane za pomoc ST_ANNOTATION_TEXT s umieszczane (podobnie jak w przypadku metadanych w USER_SDO_GEOM_METADATA) w perspektywie USER_ANNOTATION_TEXT_METADATA.
89
Zagadnienia uzupeniaj ce
Przestrzenne ukady odniesienia
Typy ukadw odniesienia Funkcje su ce do transformacji ukadu odniesienia (Coordinate System Transformation Functions)
Funkcjonalno
Wst p i definicje Model danych LRS Operacje LRS (Linear Referencing Functions) Przykad aplikacji
Oracle 11g wspiera nie tylko definiowanie danych przestrzennych i ich przetwarzanie zgodnie z okre lonym ukadem odniesienia, ale tak e umo liwia transformacje obiektw pomi dzy r nymi (geodezyjnymi) ukadami odniesienia. Lista dost pnych ukadw odniesienia jest dost pna przykadowo za pomoc poni szych perspektyw:
SDO_COORD_REF_SYS wszystkie SDO_CRS_GEOGRAPHIC3D geodezyjne 3-wymiarowe
91
BEGIN SDO_CS.TRANSFORM_LAYER('MAJOR_CITIES','GEOM','MAJOR_CITIES_2174',2174); END; select CITY_NAME, rowid from MAJOR_CITIES where CITY_NAME in ('Poznan', 'Warsaw') CITY_NAME --------Poznan Warsaw ROWID -----------------AAARdUAAGAAAB1VAAg AAARdUAAGAAAB1VAAi
ROUND(SDO_GEOM.SDO_DISTANCE(P.GEOMETRY, W.GEOMETRY, 1, 'unit=km')) ODL MAJOR_CITIES_2174 P, MAJOR_CITIES_2174 W P.SDO_ROWID = 'AAARdUAAGAAAB1VAAg' W.SDO_ROWID = 'AAARdUAAGAAAB1VAAi'
93
Badany zbir: 32047 wierszy Ukad odniesienia: SRID COORD_REF_SYS_NAME 2174 30 Pulkovo 1942(58) / Poland zone IV 100
COORD_REF_SYS_KIND PROJECTED
25
10
Szybko operacji
obszar obszar SDO_FILTER IDX SDO_FILTER IDX SDO_FILTER TAB SDO_FILTER TAB SDO_NN SDO_NN SDO_WITHIN_DISTANCE SDO_WITHIN_DISTANCE obszar 2174 obszar 2174 SDO_FILTER IDX 2174 SDO_FILTER IDX 2174 SDO_FILTER TAB 2174 SDO_FILTER TAB 2174 SDO_NN 2174 SDO_NN 2174 SDO_WITHIN_DISTANCE 2174 SDO_WITHIN_DISTANCE 2174
20
czas (sek.) czas (sek.)
15
1 200 400 600 800 1000 1200 1400 1600 1800 2000
10
0,1 5
0
0,01
select SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(B.ODL_KSZTALT,1)) OBSZAR from A_OBIEKTY_ODL B where ODL_OBIEKT_ID between p_od_id and p_do_id;
200 400 600 800 1000 1200 1400 1600 1800 2000
select count(*) liczba punktw w obszarze liczba punktw w obs zarze from A_OBIEKTY_ODL OBSZAR LICZBA_PKT SDO_FILTER IDX SDO_FILTER TAB SDO_NN SDO_WITHIN_DISTANCE where SDO_FILTER(ODL_KSZTALT,r_obsz.OBSZAR,'querytype=WINDOW') = 'TRUE'; 200 0,104375 0,0664375 0,0879375 5,1445 0,329125 select from where select from where
400 0,4071875 0,0693125 0,094 5,386625 600 1,0440625 0,072375 0,0985625 5,7324375 count(*) 800 2,1591875 0,073375 0,1035 5,9188125 A_OBIEKTY_ODL 1000 3,85375 0,085 0,1025 6,0253125 SDO_NN(ODL_KSZTALT,r_obsz.OBSZAR,'sdo_num_res=1000',1) = 5,964 'TRUE'; 1200 6,3418125 0,0801875 0,103375 1400 9,5331875 0,0771875 0,1043125 5,9825 count(*) 1600 13,761 0,104375 0,10825 6,128 1800 19,05175 0,0790625 0,1081875 6,1895625 A_OBIEKTY_ODL 2000 26,411125 0,0820625 0,110625 6,33275 SDO_WITHIN_DISTANCE(ODL_KSZTALT,r_obsz.OBSZAR,'distance=500 unit=m') 0,5829375 0,914 1,1904375 1,491125 1,8445625 2,1855625 2,6034375 2,9728125 3,401375 'TRUE';
94
Kierunek segmentu (X,Y,null) Miary (X,Y,null) (X,Y,95) (X,Y,0) start Offset (ujemny) (X,Y,80) koniec (X,Y,120)
Punkty ksztatu - Punkty w ktrych zdefiniowano miary czyli tzw. punkty LRS Zakres miar segmentu (0-120) - Punkty bez miar (miara zostanie okre lona w trakcie dziaania funkcji LRS)
97
(27,6,null)
insert into USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) values ('SIMPLE_LRS', 'GEOMETRY', SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', 0, 55, 0.005), SDO_DIM_ELEMENT('Y', 0, 10, 0.005), SDO_DIM_ELEMENT('M', 0, 120, 0.005)), null); create table SIMPLE_LRS (GEOMETRY MDSYS.SDO_GEOMETRY);
insert into SIMPLE_LRS values ( SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1), SDO_ORDINATE_ARRAY(0,0,0, 13,6,NULL, 22,6,40, 27,6,NULL, 31,6,NULL, 35,4,NULL, 40,2,80, 46,2,95, 53,2,120)))
98
ID DISTANCE ST_NUMPOINTS --- ---------- -----------56 276,681 22 create table A6_LRS(GEOM MDSYS.SDO_GEOMETRY); -- zdefiniujmy segment LRS insert into A6_LRS select SDO_LRS.CONVERT_TO_LRS_GEOM(SR.GEOM, 0, 276.681) from STREETS_AND_RAILROADS SR where SR.ID = 56; select LRS.GEOM LRS_GEOM, SR.GEOM from A6_LRS LRS, STREETS_AND_RAILROADS SR where SR.ID = 56;
select SDO_GEOM.SDO_DISTANCE( MDSYS.SDO_GEOMETRY( 2001, 8307, MDSYS.SDO_POINT_TYPE(18.5, 54.51667, null), null, null), MDSYS.SDO_GEOMETRY( 2001, 8307, MDSYS.SDO_POINT_TYPE(18.32238, 54.595909, null), null, null), 1, 'unit=km') ODL from DUAL; ODL ---------------14,4865824103146
LRS_GEOM = SDO_GEOMETRY(3302, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(18.5, 54.51667, 0, 18.32238, 54.595909, 14.4865659, 18.261089, 54.62064, 19.3097798, 18.069981, 54.608749, 31.7272181, ... 14.87555, 53.60957, 276.681)) GEOM = SDO_GEOMETRY(2002, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(18.5, 54.51667, 18.32238, 54.595909, 18.261089, 54.62064, 18.069981, 54.608749, ... 14.87555, 53.60957))
100
101
102
Bibliografia
Oracle Spatial Developer's Guide 11g Release 1 (11.1), Oracle 2007 ISO/IEC 13249-3:2006: SQL/MM Part 3 Spatial OpenGIS Simple Features Specifications for SQL Stolze K.: SQL/MM Spatial: The Standard to Manage Spatial Data in Relational Database Systems. BTW 2003, 2003. Spatial Extender and Geodetic Data Management Feature User's Guide and Reference, IBM 2006 Oprogramowanie do wizualizacji danych przestrzennych autorstwa Michaa Reja (studenta PP) michal.rej@gmail.com
XSQL Server Pages XML XSL Transformation SVG
SDO_GEOMETRY
XSQL Page
XSL
103