SPATIAL ZADANIA Krzysztof Jankiewicz, Instytut Informatyki Politechnika Poznańska 1. Utwórz tabelę o nazwie FIGURY z dwoma kolumnami: a. ID numer(1) klucz podstawowy b. KSZTAŁT MDSYS.SDO_GEOMETRY Tabela została utworzona. 2. Wstaw do tabeli FIGURY trzy pokazane na rysunku poniżej kształty 8 7 6 5 4 3 2 1 2 1 3 3. Dodaj do tabeli FIGURY geometrię nieprawidłową zweryfikuj to funkcją SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT. Usuń nieprawidłową geometrię. ID VAL ---------- ---------- 1 TRUE 2 TRUE 3 TRUE 4 13346 1 wiersz został usunięty. 1 2 3 4 5 6 7 8 9
4. Zarejestruj stworzone przez Ciebie geometrie w słowniku bazy danych (metadanych). Domyślna tolerancja niechaj wynosi 0.01 5. Stwórz indeks na utworzonej przez Ciebie tabeli. Wybierz jeden z indeksów: R- drzewo, Quad-drzewo o wysokości 2,3,4,5. Indeks został utworzony. 6. Sprawdź za pomocą operatora SDO_FILTER, które z utworzonych geometrii "ma coś wspólnego z punktem 3,3. Czy wynik jest prawidłowy? Dlaczego? ID ---------- 3 2 1
Korzystając z tabel: MAJOR_CITIES, COUNTRY_BOUNDARIES, STREETS_AND_RAILROADS, RIVERS i WATER_BODIES, oraz kolumny GEOM typu SDO_GEOMETRY znajdującej się w każdej z wymienionych tabel, wykonaj poniższe zadania. Wszelkie zależności pomiędzy obiektami przechowywanymi w wymienionych tabelach powinny być oparte o związki przestrzenne. 7. Wykorzystując operator SDO_NN i funkcję SDO_NN_DISTANCE znajdź dziewięć najbliższych miast wraz z odległościami od Warszawy. MIASTO ODL ------------------------- ---------- Lomza 125,950215 Ostroleca 100,253135 Ciechanow 75,6596515 Plock 95,8482844 Siedlce 87,0433225 Skierniewice 67,5124503 Lodz 117,555194 Piotrkow Trybunalski 130,163989 Radom 94,9927374 8. Sprawdź które miasta znajdują się w odległości 100km od Warszawy. Skorzystaj z operatora SDO_WITHIN_DISTANCE. Wynik porównaj z wynikiem z zadania powyżej. MIASTO ---------------- Radom Skierniewice Siedlce Plock Ciechanow 9. Spróbuj dokonać tego samego wykorzystując operator SDO_NN i funkcję SDO_NN_DISTANCE. Co się stało? Czy potrafisz sobie z tym poradzić? 10. Wyświetl miasta ze Słowacji. Skorzystaj z operatora SDO_RELATE. KRAJ MIASTO ---------------------- ----------------- Slovakia Bratislava Slovakia Kosice Slovakia Banska Bystrica
11. Znajdź odległości pomiędzy Polską a krajami nie graniczącymi z nią. Wykorzystaj operator SDO_RELATE oraz funkcję SDO_DISTANCE. PANSTWO ODL ------------------- ---------- Estonia 392,517272 Sweden 154,434436 Latvia 191,637527 Denmark 95,2735305 Hungary 77,7709089 Austria 143,550326 Slovenia 344,57186 Serbia 334,474141 Romania 101,673496 Croatia 369,176676 Italy 453,048617 12. Znajdź sąsiadów Polski oraz odczytaj długość granicy z każdym z nich. CNTRY_NAME DLUGOSC -------------------- ------------ Russia 197,207816 Lithuania 81,5177571 Byelarus 322,347642 Czech Republic 524,572827 Ukraine 391,361617 Germany 376,071787 Slovakia 374,43977 13. Podaj nazwę Państwa, którego fragment przechowywany w bazie danych jest największy. CNTRY_NAME ------------------- Russia 14. Wyznacz pole minimalnego ograniczającego prostokąta (MBR), w którym znajdują się Warszawa i Łódź. ORA-13374: SDO_MBR nie jest obsługiwane dla danych geodezyjnych 15. Jakiego typu geometria będzie sumą geometryczną państwa polskiego i Pragi. TYP ------- 2004 16. Znaleźć miasto znajdujące się najbliżej centrum ciężkości swojego państwa. CITY_NAME CNTRY_NAME ---------------- -------------- Riga Latvia
17. Podaj długość tych z rzek, które przepływają przez terytorium Polski. Ogranicz swoje obliczenia tylko do tych fragmentów, które leżą na terytorium Polski. NAME DLUGOSC -------------------- -------------- Bug 216,03788 Morava 4,22518082 Nogat 43,417527 Oder 41,3949361 Oder-Havel-Kanal 0 Odra 486,614054 San 281,470861 Vistula 889,710638 18. Znajdź miasta leżące w odległości nie większej niż 10 km od Wisły. Skorzystaj z funkcji SDO_BUFFER. 19. Wstaw do zdefiniowanej przez siebie tabeli swoje miasto rodzinne, lub inne interesujące Cię miasto. Skorzystaj z informacji dostępnych na www.pilot.pl. Sprawdź jakie są odległości od Twojego miasta do wszystkich miast Polski. 20. Wyświetl nazwy dróg przebiegających przez Łódź, Warszawę i Poznań. 21. Utwórz tabelę ZIEMIA z atrybutami: a. NAZWA varchar2(30) klucz podstawowy b. KSZTAŁT MDSYS.SDO_GEOMETRY Tabela została utworzona. 22. Wykorzystując system koordynat 8307 wstaw do tabeli ZIEMIA geometrię reprezentującą Madagaskar. Koordynaty kolejnych punktów: 44,-25, 47,-26, 50.2,-15, 49,-12.5, 44,-17.5, 43,-22.5 23. Sprawdź powierzchnię zdefiniowanej wyspy. Porównaj z rzeczywistą powierzchnią (587 tys. km^2). POW ---------- 590816,865 24. Wstaw do tabeli ZIEMIA geometrie reprezentujące 3-4 miasta świata. Wykorzystując tabelę SO_KONTYNENTY sprawdź, na jakich kontynentach leżą zdefiniowane przez Ciebie miasta. 25. Udostępnij swoja tabelę sąsiadowi a następnie sprawdź odległości pomiędzy swoimi a jego miastami.
26. Utwórz tabelę POLITECHNIKA a. NAZWA varchar2(30) klucz podstawowy b. TYP varchar2(10) c. KSZTAŁT MDSYS.SDO_GEOMETRY 27. Wykonaj kilka operacji na tabeli POLITECHNIKA a. Wstaw kilka pięter (2-3) i kilka pokoi (4-6) b. Zdefiniuj indeks R-drzewo 3-wymiarowy c. Sprawdź działanie operatora SDO_FILTER wyświetl parami pokoje i piętra, w których się zawierają. d. Sprawdź działanie innych operatorów i funkcji. e. Skasuj poprzedni indeks i utwórz indeks R-drzewo 2-wymiarowy f. Sprawdź działanie operatora SDO_FILTER wyświetl parami pokoje i piętra, w których się zawierają. g. Sprawdź działanie innych operatorów i funkcji. Co obserwujesz? h. Zdefiniuj własną funkcję sprawdzającą zawieranie się pokoi w piętrach.
Mini projekty: 1. Napisz program znajdujący najkrótszą drogę pomiędzy dowolnymi dwoma miastami nazwy podawane jako parametry. Wykorzystaj informacje zawarte w tabelach MAJOR_CITIES i STREETS_AND_RAILROADS. 2. Napisz program wizualizujący geometrie znajdujące się w tabeli MAJOR_CITIES. Załóż, że obiekty przestrzenne to punkty. Zapewnij przesuwanie mapy punktów oraz powiększanie i pomniejszanie. 3. Napisz program wizualizujący geometrie znajdujące się w tabeli COUNTRY_BOUNDARIES. Wykorzystaj informacje zawarte w tabeli do opisania wyświetlonych obszarów. 4. Napisz program, który pozwoli przeglądać: tabele zawierające geometrie oraz wiersze wybranych tabel (konstrukcja master-detail). Dla każdego wiersza mają być wyświetlane informacje dotyczące przechowywanej geometrii: typ geometrii, liczba wymiarów układu współrzędnych, liczba elementów tworzących geometrię. 5. Napisz program wizualizujący geometrie umieszczone w trójwymiarowym układzie współrzędnych. Załóż, że geometriami będą tylko prostopadłościany. 6. Napisz funkcje, która będzie wykrywała zależności pomiędzy geometriami w trójwymiarowym układzie współrzędnych. Zależności do wykrycia to: OBOK PRZECINA WEWNĄTRZ OBOK POD 7. Napisz program do ładujący zawartość plików SHP do bazy danych ORACLE. Projekt praktyczny dla ambitnych.