Zarządzanie danymi przestrzennymi Rozwiązywanie problemów przestrzennych
Przykładowe problemy przestrzenne Analiza bliskości obiektów Etykietowanie danych Rzutowanie punktów do najbliższych linii Rozdzielanie linii i łączenie obiektów w linie Rozdzielanie i łączenie poligonów Zmienianie, skalowanie i obracanie obiektów geometrycznych Analizy sieciowe Analizy w oparciu o języki skryptowe Analizy rastrowe
Analiza bliskości obiektów (proximity analysis) Wyszukiwanie najbliższych obiektów np. jeziora w odległości do 1000 m od Katedry select distinct point.name, lake.name, ST_Distance(point.way,lake.way) from planet_osm_polygon as lake inner join planet_osm_point as point on ST_DWithin(point.way, lake.way,10000) where point.name='katedra' and lake.natural='water' and lake.name like '%Jezioro%'
Analiza bliskości obiektów Wyszukiwanie dróg przecinających się z Wartą (mosty) select r.name from planet_osm_line as l inner join planet_osm_roads as r on ST_Intersects(l.way, r.way) where l.name='warta' and r.bridge='yes' and r.oneway='yes'
Generowanie losowych danych Utworzenie tabeli do przechowywania losowych danych:
Generowanie losowych danych Wstawienie zbioru losowych danych
Usuwanie zbędnych danych
Etykietowanie danych
Przyciąganie punktów do najbliższych linii
Przyciąganie punktów do najbliższych linii
Tworzenie linii z punktów ST_MakeLine
Rozdzielanie wielolinii na mniejsze segmenty
Analiza poligonów Tworzenie multipoligonu z wielu multipoligonów Funkcje ST_Multi i ST_Union
Analiza poligonów Rozdzielanie poligonów ST_SymDifference i ST_Dump
Skalowanie obiektów ST_Scale
Analiza sieciowa - algorytmy rozszerzenia pgrouting Najkrótsza droga (algorytm Dijkstra) Problem komiwojażera (TSP - ang. travelling salesman problem) Wyznaczanie izochron i inne przykłady: http://planet.qgis.org/planet/tag/pgrouting/ http://workshop.pgrouting.org/
Aktualizacja rozszerzeń CREATE EXTENSION postgis; ALTER EXTENSION postgis UPDATE TO "2.3.0"; CREATE EXTENSION pgrouting; ALTER EXTENSION pgrouting UPDATE TO "2.3.0";
PgRouting przygotowanie danych do analizy sieciowej Do tabeli z drogami dodać specjalne kolumny source, target i length: ALTER TABLE blok_2.drogi ADD COLUMN source integer; ALTER TABLE blok_2.drogi ADD COLUMN target integer; ALTER TABLE blok_2.drogi ADD COLUMN length double precision; Załadować dane do kolumn sorce i target: SELECT pgr_createtopology('blok_2.drogi', 0.00001, 'geom_d', 'id_d'); Wyliczyć długości odcinków UPDATE blok_2.drogi SET length = ST_Length(geom_d); ALTER TABLE blok_2.drogi ADD COLUMN reverse_cost double precision; UPDATE blok_2.drogi SET reverse_cost = length;
Kontrola danych sieciowych SELECT pgr_analyzegraph('blok_2.drogi', 0.00001,'geom_d','id_d');
Generowanie poprawionej sieci SELECT pgr_nodenetwork('blok_2.drogi', 0.00001, 'id_d', 'geom_d'); SELECT pgr_createtopology('blok_2.drogi_noded', 0.00001, 'geom_d', 'id'); SELECT pgr_analyzegraph('blok_2.drogi_noded', 0.00001,'geom_d','id'); ALTER TABLE blok_2.drogi_noded ADD COLUMN length double precision; UPDATE blok_2.drogi_noded SET length = ST_Length(geom_d);
pgrouting: Algorytm Dijkstra Uruchomiamy obliczenia najkrótszej drogi wg schematu pgr_costresult[] pgr_dijkstra(text sql, integer source, integer target, boolean directed, boolean has_rcost); SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('select id_d AS id, source::integer, target::integer, length::double precision AS cost FROM blok_2.drogi_noded',14,8, false,false);
pgrouting: Algorytm Dijkstra trasowanie przy pomocy wtyczki QGIS (pgroutinglayer)
PgRouting: Algorytm Dijkstra- trasowanie przy pomocy zapytania w QGIS DB Manager
pgrouting: Algorytm DijkstraVia SELECT seq, node, edge, cost, geom_d FROM pgr_dijkstravia('select id, source::integer, target::integer, length::double precision AS cost FROM blok_2.drogi_noded', ARRAY[110, 106, 49])as di join blok_2.drogi_noded pt on di.edge=pt.id;
pgrouting: problem komiwojażera Algorytm TSP (travelling salesman problem) Macierz odległości między wybranymi punktami: SELECT dmatrix, ids FROM pgr_makedistancematrix('select cast(id as integer), ST_X(the_geom)as x, ST_Y(the_geom) as y FROM blok_2.drogi_vertices_pgr where id=6 or id=10 or id =11 or id=2');
pgrouting: Algorytm TSP SELECT seq, id1, id2, round(cost::numeric, 2) AS cost FROM pgr_tsp('select cast(id as integer), ST_X(the_geom)as x, ST_Y(the_geom) as y FROM blok_2.drogi_vertices_pgr where id=6 or id=10 or id =11 or id=2', 6,2);
pgrouting: Algorytm TSP (zapytanie w QGIS)
Trasowanie warunkowe wtyczka QGIS
Trasowanie warunkowe wtyczka QGIS
Trasowanie warunkowe aplikacja web
Wyznaczanie izochron
Wyznaczanie izochron aplikacja web
Łączenie PostGIS z innymi narzędziami Łączenie z językiem PL/R Łączenie z językiem Python Łączenie z serwerami Web-GIS
Łączenie PostGIS z PL/R CREATE EXTENSION plr SELECT gis.save_postgis_rdata()
Łączenie PostGIS z PL/Python
Łączenie PostGIS z PL/Python (geokodowanie)