SlideShare a Scribd company logo
1 of 26
Download to read offline
POSTGIS
WPROWADZENIE DO
Michał Mackiewicz
GIS Support sp. z o.o.
Warszawa, 5.12.2018
"80% DANYCH POSIADA
ODNIESIENIE DO LOKALIZACJI"
Chwyt Marketingowy
WPROWADZENIE DO POSTGIS
WPROWADZENIE DO POSTGIS
PRZYKŁAD DANYCH
id track_fid time ele x y
1 1
2018-12-04
12:00:01
261,1 20,0001 50,001
2 1
2018-12-04
12:00:02
261,1 20,0002 50,002
3 1
2018-12-04
12:00:03
262,0 20,0003 50,003
4 1
2018-12-04
12:00:04
261,5 20,004 50,004
WPROWADZENIE DO POSTGIS
WSPÓŁRZĘDNE GEOGRAFICZNE
▸ 1 stopień szerokości geograficznej to ok. 110 km
▸ 1 stopień długości geograficznej to:
▸ 110 km na równiku,
▸ 72 km w Przemyślu,
▸ 66.5 km w Szczecinie,
▸ 55 km w Oslo,
▸ 36 km na Nordkapp
WPROWADZENIE DO POSTGIS
GEODEZJA WYŻSZA I ODWZOROWANIA
ODWZOROWANIE MERKATORA
HAVERSINE FORMULA
WPROWADZENIE DO POSTGIS
INSTALACJA
StackBuilder
brew install postgis
sudo apt-get install postgresql-11-postgis-2.5
WPROWADZENIE DO POSTGIS
NARZĘDZIA
QGIS
aplikacja GUI
wizualizacja danych i wyników zapytań
import / eksport
zarządzanie bazą
GDAL
biblioteka i narzędzia CLI
import/eksport danych
integracja w aplikacjach
WPROWADZENIE DO POSTGIS
DODANIE DO BAZY DANYCH
▸ CREATE EXTENSION
postgis;
▸ SELECT
postgis_full_version();
WPROWADZENIE DO POSTGIS
TYPY DANYCH I UKŁADY WSPÓŁRZĘDNYCH
▸ Dane mogą być przechowywane we współrzędnych
płaskich lub geograficznych
▸ Dla układów płaskich stosuje się typ GEOMETRY, dla
geograficznych - typ GEOGRAPHY
▸ Układ identyfikowany jest przez kod SRID
WPROWADZENIE DO POSTGIS
TYPY DANYCH I UKŁADY WSPÓŁRZĘDNYCH
▸ Praktyczne znaczenie w Polsce mają kody SRID:
▸ 4326 - układ współrzędnych geograficznych WGS84
▸ 3857 - globalny układ Merkatora
▸ 2180 - państwowy układ współrzędnych geodezyjnych
"1992" (ogólnopolski)
▸ 2176, 2177, 2178, 2179 - państwowy układ współrzędnych
geodezyjnych "2000" (podzielony na strefy, dla geodezji
szczegółówej)
WPROWADZENIE DO POSTGIS
KOMPOZYCJA GEOMETRII
▸ ALTER TABLE punkty_gps ADD COLUMN geom
geography;
▸ UPDATE punkty_gps SET geom =
ST_SetSRID(ST_MakePoint(x,y),4326)::geography;
WPROWADZENIE DO POSTGIS
KOMPOZYCJA GEOMETRII
▸ CREATE TABLE trasy_gps AS SELECT track_fid, min(time)
AS start_time, max(time) AS end_time,
ST_MakeLine(geom::geometry ORDER BY
time)::geography AS geom FROM punkty_gps GROUP BY
track_fid;
WPROWADZENIE DO POSTGIS
POMIARY GEOMETRII
▸ SELECT track_fid,ST_Length(geom) / 1000 ,
(ST_Length(geom)/1000) / (EXTRACT(EPOCH FROM
(end_time- start_time))/3600) AS speed FROM trasy_gps;
Dla typu GEOMETRY funkcja ST_Length zwraca
wyniki w jednostkach układu współrzędnych
Dla typu GEOGRAPHY - w metrach
WPROWADZENIE DO POSTGIS
IMPORT DANYCH REFERENCYJNYCH
▸ Państwowy Rejestr Granic:
▸ http://www.gugik.gov.pl/pzgik/dane-bez-oplat/dane-z-
panstwowego-rejestru-granic-i-powierzchni-jednostek-
podzialow-terytorialnych-kraju-prg
▸ Państwowy Rejestr Nazw Geograficznych:
▸ http://www.gugik.gov.pl/pzgik/dane-bez-oplat/dane-z-
panstwowego-rejestru-nazw-geograficznych-prng
WPROWADZENIE DO POSTGIS
IMPORT DANYCH REFERENCYJNYCH
▸ QGIS
▸ posiada GUI
▸ obsługuje wiele formatów
▸ powolny przy dużych danych
▸ ogr2ogr
▸ linia komend
▸ obsługuje wiele formatów
▸ stosunkowo szybki
▸ shp2pgsql
▸ linia komend, dostarczany razem z PostGIS
▸ obsługuje tylko format SHP
▸ najszybszy
WPROWADZENIE DO POSTGIS
ZAPYTANIE PRZESTRZENNE
▸ Przez które dzielnice przebiegają poszczególne trasy?
ST_INTERSECTS - FUNKCJA "CATCH ALL"
SPRAWDZA, CZY GEOMETRIE MAJĄ COKOLWIEK WSPÓLNEGO
MOGĄ SIĘ NAKŁADAĆ, PRZECINAĆ, ZAWIERAĆ, STYKAĆ 1 PUNKTEM
WPROWADZENIE DO POSTGIS
WYDAJNOŚĆ
"Sort (cost=640087.00..640088.96 rows=782 width=45) (actual time=23290.650..23290.652 rows=13 loops=1)"
" Sort Key: tr.track_fid"
" Sort Method: quicksort Memory: 25kB"
" -> Nested Loop (cost=0.00..640049.43 rows=782 width=45) (actual time=2883.022..23290.604 rows=13 loops=1)"
" Join Filter: ((tr.geom && (je.geom)::geography) AND (_st_distance(tr.geom, (je.geom)::geography, '0'::double precision, false) <
'1.0000000000000001e-05'::double precision))"
" Rows Removed by Join Filter: 9377"
" -> Seq Scan on jednostki_ewidencyjne je (cost=0.00..336.30 rows=3130 width=30593) (actual time=0.027..1.663 rows=3130 loops=1)"
" -> Materialize (cost=0.00..21.25 rows=750 width=64) (actual time=0.000..0.001 rows=3 loops=3130)"
" -> Seq Scan on trasy_gps tr (cost=0.00..17.50 rows=750 width=64) (actual time=0.013..0.018 rows=3 loops=1)"
"Planning time: 0.542 ms"
"Execution time: 23290.736 ms"
WPROWADZENIE DO POSTGIS
INDEKS PRZESTRZENNY
▸ Na podstawie zasięgu przestrzennego (bounding box)
tworzy krótką listę geometrii, które potencjalnie mogłyby
się przecinać
▸ CREATE INDEX ON jednostki_ewidencyjne USING
gist(geom);
WPROWADZENIE DO POSTGIS
INDEKS PRZESTRZENNY
▸ "Sort (cost=1711.70..1713.66 rows=782 width=45) (actual time=4876.105..4876.106 rows=13 loops=1)"
▸ " Sort Key: tr.track_fid"
▸ " Sort Method: quicksort Memory: 25kB"
▸ " -> Nested Loop (cost=0.15..1674.12 rows=782 width=45) (actual time=2277.404..4876.049 rows=13 loops=1)"
▸ " -> Seq Scan on trasy_gps tr (cost=0.00..17.50 rows=750 width=64) (actual time=1.756..1.759 rows=3
loops=1)"
▸ " -> Index Scan using jednostki_ewidencyjne_geom_idx on jednostki_ewidencyjne je (cost=0.15..2.20 rows=1
width=45) (actual time=1565.788..1624.319 rows=4 loops=3)"
▸ " Index Cond: (tr.geom && geom)"
▸ " Filter: (_st_distance(tr.geom, geom, '0'::double precision, false) < '1.0000000000000001e-05'::double
precision)"
▸ " Rows Removed by Filter: 5"
▸ "Planning time: 3.491 ms"
▸ "Execution time: 4876.194 ms"
WPROWADZENIE DO POSTGIS
OPENSTREETMAP
▸ "Wikipedia wśród map"
▸ Projekt udostępniający wysokiej jakości dane geograficzne
każdemu, kto ich potrzebuje
▸ Używa PostgreSQL
▸ Możliwość pobrania danych dla świata, kontynentów,
krajów
▸ Możliwość wykonywania zapytań z użyciem wtyczki do
QGIS "QuickOSM" lub usługi Overpass
WPROWADZENIE DO POSTGIS
INFORMACJE O SKLEPACH W ZASIĘGU MAPY
WPROWADZENIE DO POSTGIS
POSZUKIWANIE W PROMIENIU
▸ SELECT tr.track_fid, sh.name, sh.shop,
ST_Distance(sh.geom,tr.geom) FROM shop sh, trasy_gps tr
WHERE ST_DWithin(tr.geom,sh.geom,100);
DLA TYPU GEOMETRY
FUNKCJE ST_DWITHIN
I ST_DISTANCE
UŻYWAJĄ JEDNOSTEK
UKŁADU WSPÓŁRZĘDNYCH
DLA TYPU GEOGRAPHY
- METRÓW
WPROWADZENIE DO POSTGIS
WIZUALIZACJA STREFY BUFOROWEJ
▸ SELECT track_fid, ST_Buffer(geom,100) AS geom FROM
trasy_gps;
WPROWADZENIE DO POSTGIS
ANALIZA SKUPIEŃ
▸ SELECT cid,ST_Centroid(ST_Collect(geom))AS geom,
count(*) as n_points FROM (SELECT
ST_ClusterDBSCAN(ST_Transform(geom::geometry,2180),
eps := 50, minpoints := 5) over () AS cid,
ST_Transform(geom::geometry,2180) as geom FROM
punkty_gps) sq GROUP BY cid;
WPROWADZENIE DO POSTGIS
ANALIZA SKUPIEŃ
DZIĘKUJĘ ZA
UWAGĘ

More Related Content

Featured

Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 

Wprowadzenie do PostGIS

  • 1. POSTGIS WPROWADZENIE DO Michał Mackiewicz GIS Support sp. z o.o. Warszawa, 5.12.2018
  • 2. "80% DANYCH POSIADA ODNIESIENIE DO LOKALIZACJI" Chwyt Marketingowy WPROWADZENIE DO POSTGIS
  • 3. WPROWADZENIE DO POSTGIS PRZYKŁAD DANYCH id track_fid time ele x y 1 1 2018-12-04 12:00:01 261,1 20,0001 50,001 2 1 2018-12-04 12:00:02 261,1 20,0002 50,002 3 1 2018-12-04 12:00:03 262,0 20,0003 50,003 4 1 2018-12-04 12:00:04 261,5 20,004 50,004
  • 4. WPROWADZENIE DO POSTGIS WSPÓŁRZĘDNE GEOGRAFICZNE ▸ 1 stopień szerokości geograficznej to ok. 110 km ▸ 1 stopień długości geograficznej to: ▸ 110 km na równiku, ▸ 72 km w Przemyślu, ▸ 66.5 km w Szczecinie, ▸ 55 km w Oslo, ▸ 36 km na Nordkapp
  • 5. WPROWADZENIE DO POSTGIS GEODEZJA WYŻSZA I ODWZOROWANIA ODWZOROWANIE MERKATORA HAVERSINE FORMULA
  • 6. WPROWADZENIE DO POSTGIS INSTALACJA StackBuilder brew install postgis sudo apt-get install postgresql-11-postgis-2.5
  • 7. WPROWADZENIE DO POSTGIS NARZĘDZIA QGIS aplikacja GUI wizualizacja danych i wyników zapytań import / eksport zarządzanie bazą GDAL biblioteka i narzędzia CLI import/eksport danych integracja w aplikacjach
  • 8. WPROWADZENIE DO POSTGIS DODANIE DO BAZY DANYCH ▸ CREATE EXTENSION postgis; ▸ SELECT postgis_full_version();
  • 9. WPROWADZENIE DO POSTGIS TYPY DANYCH I UKŁADY WSPÓŁRZĘDNYCH ▸ Dane mogą być przechowywane we współrzędnych płaskich lub geograficznych ▸ Dla układów płaskich stosuje się typ GEOMETRY, dla geograficznych - typ GEOGRAPHY ▸ Układ identyfikowany jest przez kod SRID
  • 10. WPROWADZENIE DO POSTGIS TYPY DANYCH I UKŁADY WSPÓŁRZĘDNYCH ▸ Praktyczne znaczenie w Polsce mają kody SRID: ▸ 4326 - układ współrzędnych geograficznych WGS84 ▸ 3857 - globalny układ Merkatora ▸ 2180 - państwowy układ współrzędnych geodezyjnych "1992" (ogólnopolski) ▸ 2176, 2177, 2178, 2179 - państwowy układ współrzędnych geodezyjnych "2000" (podzielony na strefy, dla geodezji szczegółówej)
  • 11. WPROWADZENIE DO POSTGIS KOMPOZYCJA GEOMETRII ▸ ALTER TABLE punkty_gps ADD COLUMN geom geography; ▸ UPDATE punkty_gps SET geom = ST_SetSRID(ST_MakePoint(x,y),4326)::geography;
  • 12. WPROWADZENIE DO POSTGIS KOMPOZYCJA GEOMETRII ▸ CREATE TABLE trasy_gps AS SELECT track_fid, min(time) AS start_time, max(time) AS end_time, ST_MakeLine(geom::geometry ORDER BY time)::geography AS geom FROM punkty_gps GROUP BY track_fid;
  • 13. WPROWADZENIE DO POSTGIS POMIARY GEOMETRII ▸ SELECT track_fid,ST_Length(geom) / 1000 , (ST_Length(geom)/1000) / (EXTRACT(EPOCH FROM (end_time- start_time))/3600) AS speed FROM trasy_gps; Dla typu GEOMETRY funkcja ST_Length zwraca wyniki w jednostkach układu współrzędnych Dla typu GEOGRAPHY - w metrach
  • 14. WPROWADZENIE DO POSTGIS IMPORT DANYCH REFERENCYJNYCH ▸ Państwowy Rejestr Granic: ▸ http://www.gugik.gov.pl/pzgik/dane-bez-oplat/dane-z- panstwowego-rejestru-granic-i-powierzchni-jednostek- podzialow-terytorialnych-kraju-prg ▸ Państwowy Rejestr Nazw Geograficznych: ▸ http://www.gugik.gov.pl/pzgik/dane-bez-oplat/dane-z- panstwowego-rejestru-nazw-geograficznych-prng
  • 15. WPROWADZENIE DO POSTGIS IMPORT DANYCH REFERENCYJNYCH ▸ QGIS ▸ posiada GUI ▸ obsługuje wiele formatów ▸ powolny przy dużych danych ▸ ogr2ogr ▸ linia komend ▸ obsługuje wiele formatów ▸ stosunkowo szybki ▸ shp2pgsql ▸ linia komend, dostarczany razem z PostGIS ▸ obsługuje tylko format SHP ▸ najszybszy
  • 16. WPROWADZENIE DO POSTGIS ZAPYTANIE PRZESTRZENNE ▸ Przez które dzielnice przebiegają poszczególne trasy? ST_INTERSECTS - FUNKCJA "CATCH ALL" SPRAWDZA, CZY GEOMETRIE MAJĄ COKOLWIEK WSPÓLNEGO MOGĄ SIĘ NAKŁADAĆ, PRZECINAĆ, ZAWIERAĆ, STYKAĆ 1 PUNKTEM
  • 17. WPROWADZENIE DO POSTGIS WYDAJNOŚĆ "Sort (cost=640087.00..640088.96 rows=782 width=45) (actual time=23290.650..23290.652 rows=13 loops=1)" " Sort Key: tr.track_fid" " Sort Method: quicksort Memory: 25kB" " -> Nested Loop (cost=0.00..640049.43 rows=782 width=45) (actual time=2883.022..23290.604 rows=13 loops=1)" " Join Filter: ((tr.geom && (je.geom)::geography) AND (_st_distance(tr.geom, (je.geom)::geography, '0'::double precision, false) < '1.0000000000000001e-05'::double precision))" " Rows Removed by Join Filter: 9377" " -> Seq Scan on jednostki_ewidencyjne je (cost=0.00..336.30 rows=3130 width=30593) (actual time=0.027..1.663 rows=3130 loops=1)" " -> Materialize (cost=0.00..21.25 rows=750 width=64) (actual time=0.000..0.001 rows=3 loops=3130)" " -> Seq Scan on trasy_gps tr (cost=0.00..17.50 rows=750 width=64) (actual time=0.013..0.018 rows=3 loops=1)" "Planning time: 0.542 ms" "Execution time: 23290.736 ms"
  • 18. WPROWADZENIE DO POSTGIS INDEKS PRZESTRZENNY ▸ Na podstawie zasięgu przestrzennego (bounding box) tworzy krótką listę geometrii, które potencjalnie mogłyby się przecinać ▸ CREATE INDEX ON jednostki_ewidencyjne USING gist(geom);
  • 19. WPROWADZENIE DO POSTGIS INDEKS PRZESTRZENNY ▸ "Sort (cost=1711.70..1713.66 rows=782 width=45) (actual time=4876.105..4876.106 rows=13 loops=1)" ▸ " Sort Key: tr.track_fid" ▸ " Sort Method: quicksort Memory: 25kB" ▸ " -> Nested Loop (cost=0.15..1674.12 rows=782 width=45) (actual time=2277.404..4876.049 rows=13 loops=1)" ▸ " -> Seq Scan on trasy_gps tr (cost=0.00..17.50 rows=750 width=64) (actual time=1.756..1.759 rows=3 loops=1)" ▸ " -> Index Scan using jednostki_ewidencyjne_geom_idx on jednostki_ewidencyjne je (cost=0.15..2.20 rows=1 width=45) (actual time=1565.788..1624.319 rows=4 loops=3)" ▸ " Index Cond: (tr.geom && geom)" ▸ " Filter: (_st_distance(tr.geom, geom, '0'::double precision, false) < '1.0000000000000001e-05'::double precision)" ▸ " Rows Removed by Filter: 5" ▸ "Planning time: 3.491 ms" ▸ "Execution time: 4876.194 ms"
  • 20. WPROWADZENIE DO POSTGIS OPENSTREETMAP ▸ "Wikipedia wśród map" ▸ Projekt udostępniający wysokiej jakości dane geograficzne każdemu, kto ich potrzebuje ▸ Używa PostgreSQL ▸ Możliwość pobrania danych dla świata, kontynentów, krajów ▸ Możliwość wykonywania zapytań z użyciem wtyczki do QGIS "QuickOSM" lub usługi Overpass
  • 21. WPROWADZENIE DO POSTGIS INFORMACJE O SKLEPACH W ZASIĘGU MAPY
  • 22. WPROWADZENIE DO POSTGIS POSZUKIWANIE W PROMIENIU ▸ SELECT tr.track_fid, sh.name, sh.shop, ST_Distance(sh.geom,tr.geom) FROM shop sh, trasy_gps tr WHERE ST_DWithin(tr.geom,sh.geom,100); DLA TYPU GEOMETRY FUNKCJE ST_DWITHIN I ST_DISTANCE UŻYWAJĄ JEDNOSTEK UKŁADU WSPÓŁRZĘDNYCH DLA TYPU GEOGRAPHY - METRÓW
  • 23. WPROWADZENIE DO POSTGIS WIZUALIZACJA STREFY BUFOROWEJ ▸ SELECT track_fid, ST_Buffer(geom,100) AS geom FROM trasy_gps;
  • 24. WPROWADZENIE DO POSTGIS ANALIZA SKUPIEŃ ▸ SELECT cid,ST_Centroid(ST_Collect(geom))AS geom, count(*) as n_points FROM (SELECT ST_ClusterDBSCAN(ST_Transform(geom::geometry,2180), eps := 50, minpoints := 5) over () AS cid, ST_Transform(geom::geometry,2180) as geom FROM punkty_gps) sq GROUP BY cid;