Technologie map cyfrowych w praktyce Gdańsk 19 maja 2015 Krzysztof Biniaś
Profil firmy Wybrane rozwiązania dla organów administracji publicznej Geodezja i kartografia Gospodarowanie nieruchomościami Ochrona środowiska Planowanie przestrzenne Wybrane rozwiązania dla klientów komercyjnych Monitorowanie składowisk odpadów przemysłowych (KGHM) Wsparcie w zakresie kompleksowej eksploatacji systemów wodociągowo-kanalizacyjnych (Saur Neptun Gdańsk, GIWK)
ORACLE Wstęp Firma powstała w 1977 roku w Kaliforni Obsługuje 98 firm z listy Fortune 100 Prezes Larry Ellison Właściciel baz danych: ORACLE, MySQL Systemu operacyjnego Solaris, Open Solaris, Oracle Enterprise Linux Serwera WebLogic Platformy Java Aplikacji VirtualBox i innych
ORACLE Edycje bazy 47500 $ 17500 $ 5800 $ 460 $ 0 $ Express Edition Personal Edition Standard Edition One Standard Edition Enterprise Edition Rozwój aplikacji Wydział/Zakład Przedsiębiorstwo
ORACLE Źródła informacji Oracle Technology Network: www.oracle.com/technetwork AskTom: https://asktom.oracle.com My Oracle: https://support.oracle.com Oracle Faq: http://www.orafaq.com Oracle-base: http://www.oracle-base.com
ORACLE opcje przestrzenne Oracle Locator Oracle Spatial Występuje w wszystkich edycjach Wsparcie dla wszystkich typów geometrii Pełne wsparcie dla danych 2D Wszystkie zapytania przestrzenne Funkcje pomiaru: odległości, długości, powierzchni Funkcje przetwarzania: bufor, centroid, convex hull, itp. Obsługa układów współrzędnych Funkcje walidacji, tunning Występuje tylko w wersji Enterprise Wsparcie dla wszystkich funkcji Locatora Pełne wsparcie dla danych 3D Przestrzenna agregacji Obsługa modelu topologicznego Przechowywanie i algebra rastrów Model sieciowy Geokodowanie Specjalizowane typy 3D (LIDAR, TIN) Serwisy OGC (WMS, WFS, WFS-T) Definiowanie układów współrzędnych
ORACLE Spatial Podstawowe typy elementów
ORACLE Spatial Reprezentacja danych wektorowych CREATE TABLE dzialki_ewid ( gid NUMBER(10), nr VARCHAR2(30), geom SDO_GEOMETRY ); SDO_GEOMETRY: SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES NUMBER NUMBER SDO_POINT_TYPE SDO_ELEM_INFO_ARRAY SDO_ORDINATE_ARRAY INSERT INTO dzialki_ewid(gid,nr,geom) VALUES(dzialki_ewid_seq.nextval,'101/32', MDSYS.SDO_GEOMETRY(2003,2177,null, mdsys.sdo_elem_info_array(1,1003,1, 13,2003,1, 23,2003,1), mdsys.sdo_ordinate_array( 118,38, 136,37, 143,55, 127,62, 115,52, 118,38, 122,49, 125,53, 129,48, 125,43, 122,49, 130,43, 133,49, 130,53, 133,55, 140,53, 136,49, 134,42, 130,43 )));
Oracle Etapy tworzenia i rejestrowania tabeli przestrzennej CREATE TABLE ug_test2d_geom(id NUMBER, geom MDSYS.SDO_GEOMETRY); INSERT INTO USER_SDO_GEOM_METADATA VALUES('ug_test2d_geom','geom', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', -1000, 1000, 0.0005), MDSYS.SDO_DIM_ELEMENT('Y', -2000, 2000, 0.0005)), NULL); CREATE INDEX ug_test2d_geom_idx ON ug_test2d_geom(geom) INDEXTYPE IS MDSYS.SPATIAL_INDEX; COMMIT; Indeks przestrzenny należy tworzyć po załadowaniu danych do tabeli.
ORACLE Spatial Indeksowanie przestrzenne Indeks typu R-tree Wymagany dla zapytań przestrzennych Anatomia zapytania przestrzennego Zbiór danych wejściowych Primary Filter Indeks przestrz. Zredukowany zbiór danych (kandydatów) Secondary Filter Funkcje przestrz. Zbiór danych wynikowych Kolumna przestrzenna Pobranie danych poprzez indeks Wykonanie funkcji przestrzennej
Primary i Secondary Filter - przykład Szukam elementów znajdujących się w poligonie
Primary i Secondary Filter - przykład Dla każdego elementu tworzę MBR
Primary i Secondary Filter - przykład Szybkie filtrowanie po zakresach - operator SDO_FILTER
Primary i Secondary Filter - przykład Analiza zawierania - operator SDO_RELATE
Primary i Secondary Filter - przykład Wynik zapytania
Oracle Wczytywanie danych Z plików tekstowych Oracle SQL*Loader Z plików w formacie GIS Map Builder Shapefile loader (tylko 2D) GDAL Walidacja danych D:\> ogr2ogr --formats Supported Formats: -> "OCI" (read/write) -> "PostgreSQL" (read/write) -> "ESRI Shapefile" (read/write) -> "MapInfo File" (read/write) -> "TIGER" (read/write) -> "S57" (read/write) -> "DGN" (read/write) -> "Memory" (read/write) -> "BNA" (read/write) -> "CSV" (read/write) -> "GML" (read/write) -> "KML" (read/write) -> "GeoJSON" (read/write) SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT
Oracle Walidacja danych Przykład sprawdzenia poprawności danych geometrycznych BEGIN SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT ('DZIALKI_EWID', 'GEOM', 'VALIDATION_RESULTS'); END; SELECT * FROM validation_results; SDO_ROWID STATUS ---------------- ----------------------------------------- Rows Processed <752> AAADCsAABAAAPUpAAA 13341 [Element <1>] AAADCsAABAAAPUpAAB 13356 [Element <1>] [Coordinate <2>] AAADCsAABAAAPUpAAC 13356 [Element <1>] [Coordinate <4>] AAADCsAABAAAPUpAAD 13356 [Element <1>] [Coordinate <3>] AAADCsAABAAAPUpAAE 13356 [Element <1>] [Coordinate <4>] ORA-13341 = a line geometry has less than two coordinates ORA-13356 = adjacent points in a geometry are redundant
Oracle Automatyczne usuwanie błędów SDO_UTIL.RECTIFY_GEOMETRY Usunięcie duplikatów punktów Poprawienie orientacji poligonów Usunięcie wewnętrznych przecięć Ręczne usuwanie błędów Błędy topologii Dziury, przecięcia, fragmenty, nakładające się obszary
Oracle Zapytania przestrzenne Operatory przestrzenne Wymagają indeksu przestrzennego na pierwszej geometrii w operatorze Pojawiają się w klauzuli WHERE Korzystają z indeksów przestrzennych Funkcje przestrzenne Nie korzystają z indeksów przestrzennych Mogą być używane w klauzuli SELECT i WHERE Mogą być wywoływane na małych tabelach bez indeksu przestrzennego
Oracle Zapytania przestrzenne Operatory przestrzenne SDO_FILTER: podstawowe filtrowanie danych SDO_RELATE: wszystkie geometrie mające związek z podaną geometrią SDO_WITHIN_DISTANCE: wszystkie geometrie w odległości od podanej geometrii SDO_NN: najbliżsi sąsiedzi Funkcje przestrzenne SDO_GEOM.RELATE: porównanie 2 geometrii SDO_GEOM.SDO_DISTANCE: odległość pomiędzy 2 geometriami Funkcje grupujące SELECT nazwa FROM miasta c WHERE SDO_WITHIN_DISTANCE(c.geom, SDO_GEOMETRY(2001, 8307, null, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1, 1), MDSYS.SDO_ORDINATE_ARRAY(16.91783, 52.38124)), ('distance=30 unit=km') = 'TRUE';
Oracle Zależności topologiczne (SDO_RELATE) A AnyInteract A A B B B A Contains B B Inside A A Covers B B Coveredby A Touch A B A B A red B green OverlapByIntersect OverlapByDisjoint Equal A B Disjoint
Oracle SDO_RELATE Znajdź wszystkie hrabstwa wewnątrz stanu Wyoming SELECT c.county c.state_abrv FROM us_counties c, us_states s WHERE s.state = 'Wyoming' AND SDO_RELATE ( c.geom,s.geom, 'mask=inside+coveredby' ) = 'TRUE';
Oracle SDO_WITHIN_DISTANCE Jak wielu klientów znajduje się w odległości 10 km od regionu sprzedaży SELECT count(*) FROM sales_regions r, customers c WHERE r.region_id = 'R1' AND sdo_within_distance ( c.location, r.geom, 'distance=10 unit=km') = 'TRUE';
Oracle Przetwarzanie przestrzenne Pomiary SDO_AREA, SDO_LENGTH, SDO_DISTANCE Bufory SDO_BUFFER Złączenie 2 geometrii SDO_UNION, SDO_INTERSECTION, SDO_DIFFERENCE, SDO_XOR Agregowanie geometrii SDO_AGGR_UNION, SDO_AGGR_CONVEXHULL, SDO_AGGR_MBR Geometrie wynikowe SDO_CENTROID, SDO_CONVEXHULL, SDO_MBR, SDO_CLOSEST_POINTS, SDO_TRIANGULATE Obsługa WKT, WKB, GML
Oracle GeoRaster CREATE TABLE RASTRY( GEORID NUMBER PRIMARY KEY, SOURCE_FILE VARCHAR2(80), DESCRIPTION VARCHAR2(32), GEORASTER SDO_GEORASTER ); Poziom 2 Poziom 1 Poziom 2 Poziom 1 Poziom 0 Poziom 0 Import: Mapbuilder, FME, GDAL
Oracle LRS (Linear Referencing System) Rodzaj nawierzchni od 5 do 20 km (55,20,60) (50,15,53.8) (5,10,0) (30,10,27) (45,8,44) (15,5,11.2) (40,5,38) Wypadek na 57 km
Oracle 3D 3D R-trees Zapytania przestrzenne Pomiary (kubatura) Modelowanie brył Zapis do formatu KML Chmury punktów
Oracle Chmury punktów Źródło danych: LiDAR Wolumen danych: miliardy punktów Operacje na danych: Transformacje Filtrowanie Generowanie TIN Analiza Backup i odtwarzanie liblas lasinfo las2oci las2las las2txt, txt2las
Oracle CityGML Standard OGC Poziomy szczegółów modelu Tekstury i fasady Ortofotomapy Wersjonowanie LOD1 Building LOD2 Building LOD3 Building LOD4 Building
Oracle Pozostałe funkcje Geokodowanie: Adres Współrzędne geograficzne Odwrotne geokodowanie: Współrzędne geograficzne Adres Sieci Web Services WMS, WFS CSW OpenLS Topologia
Oracle Podgląd danych przestrzennych QGIS 2.8 udig 1.5 Oracle SQL Developer 4.1
Oracle Monitorowanie zapytao SQL SQL Monitor firmy Quest Software Wireshark Network Protocol Analyzer Oracle Enterprise Monitor
Portale mapowe Serwery mapowe MapServer 6.4.1 (7.0 beta) MapGuide Open Source 2.6 (3.0 beta) GeoServer 2.7 Mapnik 2.2
Portale mapowe GeoServer Napisany w języku Java Bardzo dobre wsparcie dla standardów OGC Dobry system pluginów Wsparcie komercyjne: Boundless, GeoSolutions Problemy z wydajnością i stabilnością
Portale mapowe GeoServer Obsługiwane źródła danych: Oracle Spatial PostgreSQL / PostGIS Esri ArcSDE IBM DB2 Microsoft SQL Server Esri Shapefile MapInfo MIF/MID TIFF, GeoTIFF, BigTIFF, ECW, JPEG2000, MrSID, GTOPO30
Portale mapowe GeoServer Obsługiwane standardy OGC: Web Feature Service (WFS) 1.0, 1.1, 2.0 Web Map Service (WMS) 1.1.1, 1.3 Web Coverage Service (WCS) 1.1.0 Web Processing Service (WPS) 1.0.0 Styled Layer Descriptor (SLD) 1.0.0, 1.1.0 Geography Markup Language (GML) 2.1.2, 3.0, 3.1.1, 3.2.1 Keyhole Markup Language (KML) 2.2.0 SQL Simple Features 1.0 Filter Encoding 1.1 GeoPackage Wtyczka INSPIRE
Portale mapowe GeoServer stabilna konfiguracja Składniki JDK 1.7 x64 Apache HTTP 2.2 Apache Tomcat 7.0 x64 GeoServer 2.7.0 GeoWebCache 1.7.0 BMT ServiceMonitor (watchdog) Windows Server 2008 R2 Caused by: java.lang.outofmemoryerror: PermGen space %APACHE_DIR%\Tomcat 7.0 GS\bin & Tomcat7.exe //US//Tomcat7GS -- Jvm=%JAVA_DIR% --JvmMs=32 --JvmMx=1000 --JvmSs=50 ++JvmOptions=- XX:MaxPermSize=256m
Portale mapowe GeoServer poprawa stabilności i wydajności Wykorzystuj GeoWebCache lub cache wbudowany w GeoServer Shapefile jako źródło danych Używaj Oracle Java Virtual Machine Konieczna konfiguracja parametrów JVM: -server -Xms2048m -Xmx2048m -XX:+UseParallelOldGC -XX:+UserParallelGC -XX:NewRatio=2 -XX:+AggressiveOpt Wyświetlanie elementów zależne od powiększenia Źródła danych musza być indeksowane Unikaj złożonej stylizacji (przeźroczystość, halo, wiele stylów dla obiektu) Unikaj transformacji danych "w locie"
Portale mapowe GeoServer poprawa dostępności Konfiguracja klastrowa GeoServer 1 GeoServer 2 Użytkownik HTTP Load Balancer GeoServer 3
Portale mapowe GeoServer poprawa bezpieczeostwa Pamiętaj o zmianie domyślnego hasła dostępu do panelu administracyjnego, zablokuj do dostęp z zewnątrz do panelu, usuń dane testowe Pamiętaj o tworzeniu backupów Przeglądaj logi serwera, przestaw logi w tryb produkcyjny Wprowadź ograniczenia na serwisy Na liczbę zwracanych obiektów (np. dla WFS) Wyłącz transakcje dla WFS-T Wprowadź uprawnienia tylko do odczytu na źródła danych (problem SQL injection) Ukrywaj konfigurację serwerową (dla Apache plik httpds.conf) Z wykorzystaniem Reverse Proxy (klauzula ProxyPass) Ukrycie informacji o serwerze ServerTokens ProductOnly ServerSignature Off <IfModule mod_headers.c> Header set Server unknown </IfModule>
Portale mapowe Przeglądarka danych przestrzennych założenia ogólne Zgodność z najnowszymi standardami World Wide Web Consortium (W3C) HTML5, JS, jquery, Bootstrap, CSS3 Zgodność z najnowszymi standardami Open Geospatial Consortium WMS, WFS, WFS-T, SLD, GeoJSON, GML Responsywność interfejsu
Portale mapowe Biblioteka OpenLayers Biblioteka JavaScript pozwalająca na tworzenie i wyświetlanie interaktywnych map w przeglądarce Licencja BSD Typy obsługiwanych warstw: Rastrowe: WMS, Google, Mapguide, Image, itd. Wektorowe: WFS, GML, GeoJSON, itd. Działa na urządzeniach mobilnych Możliwość łatwej rozbudowy przez użytkownika Obsługa edycji, rysowanie precyzyjne Aktualna wersja 3.5
Przykład Portal miejski
Przykład Monitoring hałasu System monitoringu hałasu w Gdaosku Ok. 100 czujników hałasu w Gdańsku, ponad 177 000 000 rekordów w bazie Zdalne zarządzanie czujnikami, administracja użytkownikami Automatyczne generowanie raportów miesięcznych i rocznych: Informacje o czujniku Analiza statystyczna sygnału Wskaźnik niepewności wskaźników długookresowych Róża wiatrów
Przykład Monitoring hałasu System monitoringu hałasu w Opolu 15 czujników hałasu, 2 radary, 1 stacja meteorologiczna Funkcjonalność serwisu Podgląd danych źródłowych Tworzenie wykresów Generowanie raportów Część mapowa Panel administracyjny Zarządzanie użytkownikami Zarządzenie uprawnieniami i rolami Zarządzanie czujnikami Zdalne wykonywanie procedur
Przykład Monitoring hałasu Użytkownicy System monitoringu Serwer plików Czujniki emonitoringwebapp GeoServer Serwis monitoringu Baza ORACLE 11g Serwer FTP
Przykład Monitoring hałasu
Przykład Monitoring hałasu
Przykład Monitoring hałasu
Przykład Monitoring hałasu
Przykład Monitoring hałasu Dla programistów Wykorzystane technologie Platforma.NET, ASP.NET MVC 4 Biblioteki OpenLayers, Bootstrap Środowisko programistyczne Visual Studio 2012 + ReSharper Baza danych PostgreSQL 9.2, ORACLE 11g GeoServer 2.7 Server IIS, Apache Biblioteki autorskie
Przykład Geodezja Rozporządzenia w geodezji RMAiC z dnia 12 lutego 2013 r. w sprawie bazy danych geodezyjnej ewidencji sieci uzbrojenia terenu, bazy danych obiektów topograficznych oraz mapy zasadniczej RMAiC z dnia 29 listopada 2013 r. zmieniające rozporządzenie w sprawie ewidencji gruntów i budynków RMAiC z dnia 5 września 2013 r. w sprawie organizacji i trybu prowadzenia państwowego zasobu geodezyjnego i kartograficznego RMAiC z dnia 9 stycznia 2012 r. w sprawie ewidencji miejscowości ulic i adresów. ponad 40
Przykład Geodezja Rozporządzenia MAiC Co siedzi w środku: Przepisy ogólne Zawartość bazy danych Organizacja Tryb prowadzenia bazy Zasady tworzenia mapy Katalog tworzenia obiektów Klasyfikacja obiektów Schematy aplikacyjne UML Schematy aplikacyjne GML
Przykład Geodezja Dla programistów Wykorzystane technologie Przeglądanie diagramów UML (Enterprise Architect) Wydawanie danych w formacie GML (XmlWriter) Walidacja (XML Buddy) i wczytywanie danych GML (XmlReader) Środowisko programistyczne Visual Studio 2012 Platforma.NET Baza ORACLE, MS Access Wizualizacja danych graficznych Bentley Map PowerView Rejestracja czasu pracy Redmine
Przykład Inwentaryzacja obiektów w terenie Serwis MWS Urządzenie mobilne HTTP Baza danych MongoDB GeoServer Serwis NOMINATIM
Przykład Inwentaryzacja obiektów w terenie Zbieranie danych przestrzennych
Przykład Inwentaryzacja obiektów w terenie Zbieranie danych przestrzennych
Przykład Inwentaryzacja obiektów w terenie Baza MongoDB Wydajna baza danych typu NoSQL (Not only SQL) Bezschematowa, zorientowana dokumentowo (JSON) Posiada wsparcie dla indeksów przestrzennych 2D Zmiana terminologii: Tablica Kolekcja, Wiersz Dokument, Kolumna Pole Dobre mapowanie na model obiektowy Zapytania select * from users db.users.find() select * from users where status = A" and age = 50 db.users.find( { status: "A", age: 50 } ) delete from users db.users.remove() Wbudowany i rozwijany przez firmę sterownik do Linq
Zakończenie Dziękuję za uwagę krzysztof.binias@bmt.com.pl