proč byste se měli starat o PostGIS? – Jemný úvod do prostorových databází

databází? To není moc zajímavé.

tak by si mohl myslet průměrný člověk pracující s GIS nebo vizualizacemi dat. Musím se přiznat, že databáze není ta nejvíc sexy věc na světě (omlouvám DBA), ale pokud jste tvrdil (nebo cílem) dělat analytics nebo vizualizace s (prostorová) data ve více vážným způsobem, byste rozhodně neměli ignorovat. Doufám, že tento blogový příspěvek vám může poskytnout představu o tom, jaké výhody vám může nabídnout efektivní využití prostorových databází.

humbuk termíny přicházejí a odcházejí v něm a tam byl velký humbuk kolem velkých dat ještě před několika lety, ale to je nyní pomalu mizí. No, data jsou stále velká a ve skutečnosti je větší než kdy jindy. Velikost souborů roste a v“ datové vědě “ a geovědách se lidé musí vypořádat s daty, která mohou být snadno v rozsahu gigabajtů. Čím větší jsou data, více pozornosti musíme věnovat způsobu, jakým je ukládáme a analyzujeme.

to je místo, kde databáze přichází do obrazu.

při vývoji softwaru je práce s databázemi nutností. Ale pro lidi v jiných subdoménách informatiky (jako je GIS) nemusí být výhody databáze vždy tak zřejmé. Lidé mají samozřejmě tendenci používat nástroje, které jsou jim nejznámější, i když by to nebyl nejúčinnější způsob, jak dosáhnout cílů. Ale někdy vystoupit ze své zóny pohodlí může opravdu přinést velké výhody. Sám jsem si pomalu uvědomoval potenciál, který spočívá v prostorovém SQL.

týden letů v Brazílii. Původní soubor byl jen csv s původními a cílovými souřadnicemi. Nahrál jsem data do PostGIS, vytvořený bod geometrie z souřadnice, pak vytvořil čáry mezi body a nakonec vizualizovat data s QGISU Time Manager.

tento blogový příspěvek je určen hlavně pro lidi, kteří pracují s geoprostorovými daty, ale nedotkli se PostGIS, nebo o tom možná ani neslyšeli. Nebudu procházet, jak nainstalovat PostgreSQL / PostGIS, ale spíše se pokusím poskytnout vám přehled o tom, co to je a k čemu je dobré.

Můj pracovní postup a příklady jsou především se zaměřením na QGISU + PostGIS kombinace, ale měli byste si uvědomit, že můžete také pracovat pouze s PostGIS, svůj vlastní kód, nebo s jiným GIS klienty.

příspěvek … co?

již během studia GIS jsem několikrát slyšel frázi „PostGIS je prostorové rozšíření Postgres“. To neznamená, že jsem měl tušení, co to znamená. Neměl jsem ponětí, co je Postgres, natož prostorové rozšíření.

zkusme to brzdit co nejjednodušeji.

Někteří lidé by mohli nenávidět mě za to srovnání, ale risknu to: pokud jste nikdy nepracovali s databází, můžete si databázových tabulek jako masivní listy aplikace Excel. Ale masivní inteligentní Excel list, odkud můžete v milisekundě zjistit, jaká hodnota je ve třetím sloupci na řádku číslo 433 285. A místo zápisu funkcí uvnitř listu do jedné buňky je zapíšete do okna příkazu SQL. Takže místo pro ukládání dat a odkud je můžete efektivně získat.

PostGIS je open source, volně k dispozici prostorové databáze extender pro PostgreSQL Database Management System (.k.DBMS). Takže PostgreSQL (také znám jako Postgres) je databáze a PostGIS je jako doplněk k této databázi. Nejnovější verze PostGIS je nyní dodáván s PostgreSQL.

Stručně řečeno PostGIS přidává do PostgreSQL prostorové funkce, jako jsou datové typy vzdálenosti, plochy, spojení, křižovatky a speciální geometrie.Prostorové databáze ukládají a manipulují s prostorovými objekty jako jakýkoli jiný objekt v databázi.

Takže v normální databáze ukládat data různých typů (číselné, textové, časová razítka, obrázky…) a v případě potřeby můžete dotaz (fetch), které odpovídat na otázky s daty. Otázky se mohou týkat „kolik lidí se přihlásilo na váš web „nebo“ kolik transakcí bylo provedeno v internetovém obchodě“. Prostorové funkce mohou místo toho odpovědět na otázky jako ‚jak daleko je nejbližší obchod“, „je tento bod uvnitř této oblasti“, nebo „jaká je velikost této země‘.

takže data jsou uložena v řádcích a sloupcích. Protože PostGIS je prostorová databáze, data mají také sloupec geometrie s daty ve specifickém souřadnicovém systému definovaném prostorovým referenčním identifikátorem (SRID). Nezapomeňte však, že ačkoli byste PostGIS používali hlavně pro prostorová data, je zde také možné ukládat neprostorová data, protože stále má všechny funkce normální PostgreSQL databáze!

to je databáze. V IT architektuře je databáze reprezentována jako válec. Je to místo, kde můžete ukládat svá data.

vynikající Boundless PostGIS intro, zavádí tři základní pojmy, které spojují prostorová data s databází. Kombinované tyto poskytují flexibilní strukturu pro optimalizovaný výkon a analýzu.

  1. prostorové datové typy, jako je bod, čára a mnohoúhelník. Pro efektivní zpracování prostorových operací se používá vícerozměrné prostorové indexování;
  2. prostorové funkce položené v SQL jsou pro dotazování prostorových vlastností a vztahů.

SQL, nebo „strukturovaný dotazovací jazyk“, je prostředek kladení otázek a aktualizace dat v relačních databázích. Výběrový dotaz (který můžete použít k klást otázky) je obecně příkaz následující podobu

SELECT some_columns FROM some_data_source WHERE some_condition;

PostGIS specifické funkce jsou obvykle ve formě ST_functionName.

napíšete tyto příkazy na příkazovém řádku po přihlášení do vaší databáze, nebo v databázi GUI nástroj (např. pgAdmin nebo QGISU DB Manager). Takže ano, SQL vyžaduje, abyste něco opravdu napsali. Kliknutí pravým tlačítkem myši může být obecně podceňováno, ale pro někoho, kdo nepíše žádný kód, je SQL dobrým prvním krokem k napsání vlastních příkazů a možná i pozdějšího kódu.

kromě PostGIS existují i další prostorové databáze. SQL Server Spatial, ESRI ArcSDE, Oracle Spatial a GeoMesa jsou několik dalších možností pro správu a analýzu prostorových dat. PostGIS má však více funkcí a obecně lepší výkon. Také ostatní zmíněné (kromě GeoMesa) nejsou open source.

pokud jste v tomto novém, můžete být nyní zmateni: takže je to místo pro ukládání dat a musíte získat informace složitým způsobem tím, že na příkazový řádek napíšete nějaké divné věci? Počkej si na to. Existují také některé skutečné výhody, které vám PostGIS může nabídnout, pokud se k tomu opravdu zavážete.

zeptal jsem se některých nápadů na blogový příspěvek z Twitteru a dostal jsem spoustu dobré zpětné vazby. Odtud jsem dostal nápad rozdělit to na dvě části. V první části se podívám na výhody, které může PostGIS přinést vaší každodenní práci. Ve druhé části se budu více věnovat prostorovému SQL.

PostGIS vám umožní přijmout nový způsob práce. Tento nový způsob může být snadněji reprodukovatelný, můžete začít používat správu verzí snadněji a umožňuje pracovní postupy pro více uživatelů.

soubory často vyžadují speciální software pro čtení a zápis. SQL je abstrakce pro náhodný přístup k datům a analýzu. Bez této abstrakce budete buď potřebovat konkrétní software k provádění operací, nebo budete muset sami napsat veškerý přístupový a analytický kód.

Dělat svou analýzu v SQL, spíše než jen dělat náhodné operace pro soubory s náhodnou nástroje s náhodnými parametry, umožňuje sdílet a rozmnožovat své výsledky snadněji. Možná máte ten“ master Shapefile “ v současné době někde, kde jste provedli několik prostorových spojení a klipových operací do Shapefile, aby to bylo tak, jak to má být. Co když to zmizí?

Johnny napsal dobrý příklad, na Twitteru na to, jak si omylem vymazal všechny jeho data, ale byl schopen reprodukovat s minimálním úsilím s SQL skripty zachránil GIT.

lidé pracující s vývojem softwaru jsou pravděpodobně (nebo snad) obeznámeni s řízením verzí. Nechystám se jít hlouběji do toho v tomto blogu, ale jsou schopni (a měli byste) mít SQL skripty v systému pro správu verzí jako GIT. Přemýšlejte o tom jako o kuchařce, kterou uchováváte ve své knihovně a neustále se aktualizujete, abyste vždy našli ty nejlepší recepty pro chutnou analýzu dat. Pouze to, že si můžete znovu koupit novou kopii této přesné kuchařky od Amazonu, pokud váš dům shoří.

databáze vám také může pomoci udržet vaše prostorová data v lepším pořadí. Nikdo z nás není dokonalý a asi se vám bude stále vytvářet tabulky jako temp_1, final_final, ale stále databáze nabízí lepší příležitost pro vás, aby standardizovat datové struktury, než jen soubory (např. standardizace datových typů v tabulkách).

a co ty velké datové soubory? S prostorovou databází je možné pracovat s velkými datovými soubory. Nejen jednodušší, ale někdy je téměř nemožné pracovat na větších datových sadách bez databáze. Pokusili jste se někdy otevřít soubor csv 2 gb? Nebo se pokusil udělat nějaké geoprocessing pro 800 mb GeoJSON? Věděli jste dokonce, že Shapefiles mají limit velikosti? Samozřejmě můžete řešit některé z těchto problémů pomocí Geopackage nebo jiných formátů souborů, ale obecně je PostGIS optimálním nástrojem pro zpracování velkých (geoprostorových) dat.

22 milionů bodů z lodi GPS lokace poskytnuté z PostGIS s QGISU. Vidíte, kde se lodě pohybují na řekách a kde jsou na otevřeném moři?

Jedna velmi pěkná vlastnost, s databází je, že můžete snadněji automatizovat procesy, které normálně dělat ručně. Například pomocí funkce PostgreSQL NOTIFY můžete automaticky aktualizovat své mapy QGIS. FME) pro automatizaci práce, čtení / zápis z / do tabulek PostGIS je mnohem jednodušší než u souborů.

pokud nejste jako já (v současné době dělám tyto věci sám a pro zábavu), můžete mít věc zvanou tým. Také známý jako spolupracovníci. Mohou mít potřebu přistupovat ke stejným datům jako vy. Použití databáze ve vašem pracovním postupu umožňuje paralelní práci zcela na jiné úrovni, než jen mít soubory na sdílené jednotce.

jedním z hlavních důvodů je to, že souběžní uživatelé mohou způsobit poškození. Je sice možné psát zvláštní kód, aby zajistily, že se více píše na stejný soubor není poškozen dat, v době, kdy jste problém vyřešil a také vyřešit související problém s výkonem, by napsal lepší část databáze systému.

samozřejmě existují výhody i nevýhody při přijímání nového pracovního postupu. Stejně jako udržování souborů v pořádku, na konci dne může být také údržba databáze hodně práce. Například aktualizace PostGIS na novou verzi může být skutečnou bolestí, jak bylo zdůrazněno na Twitteru. S velkou mocí přichází velká odpovědnost.

ale promluvme si více o této mocenské části.

Část 2: magický svět prostorového SQL

prostorový SQL může skutečně urychlit vaše zpracování(při použití moudře). Níže je srovnání mezi provedením stejného procesu se zpracováním Shapefile a QGIS a poté v PostGIS se ST_GeneratePoints.

databáze týkající blogu musí mít vždy barchart srovnání doby zpracování. PostGIS = velmi rychle. Barcharts nelžou.

pro toto srovnání jsem měl údaje o poštovních směrovacích číslech z Finska a počet obyvatel v každé oblasti poštovních směrovacích čísel. Měl jsem to jako Shapefile a tabulku v mé místní databázi. Vytvořil jsem náhodné body uvnitř každého polygonu, abych reprezentoval populaci. Použil jsem QGISU zpracování (Náhodné body uvnitř polygonu z Vektorové Zpracování) pro Shapefile a v PostGIS SQL bylo opravdu tak jednoduché, jak to:

SELECT ST_GeneratePoints(geom, he_vakiy) from paavo.paavo

Jak můžete vidět z grafu dříve, trvalo PostGIS méně než 10 % času udělat stejnou analýzu ve srovnání s QGISU a Shapefile. Pokud jste analytik GIS a děláte takové procesy každý den, může vám to ušetřit spoustu času za rok.

kromě rychlejšího zpracování si můžete vychutnat obrovský výběr prostorových funkcí, které PostGIS nabízí. Které funkce jsou pro vás nejužitečnější, zcela závisí na případu použití. Kromě analýzy Voronoi a tradičnější analýzy GIS (buffer, overlay, intersect, clip atd..) můžete dělat pokročilejší věci:

  • směrování. S pgRouting a silniční data můžete najít optimální trasy a dělat různé síťové analýzy;
  • Polygon skeletonization. Tato funkce umožňuje vytvořit střední osu mnohoúhelníku za běhu;
  • dělení geometrie. Rozdělení geometrií pro další zpracování může výrazně urychlit Vaše procesy;
  • shlukování. Najděte klastry a vzory z vašich dat. S humbukem AI na vrcholu, k-prostředky mohou být pro některé ještě zajímavější než dříve…

na co potřebujete věci, jako je polygonová skeletonizace? Může to být platná otázka pro většinu,ale jednou, když to vaše prostorová analýza potřebuje, budete nesmírně potěšeni, že za vás někdo udělal tvrdou práci (=matematiku). Kombinace různých prostorových funkcí dohromady a použití Postgres vestavěné funkce s nimi vám umožní dělat pokročilé prostorové analýzy v databázi.

Složité a zajímavé otázky (prostorové spojení, agregace, atd.), které jsou vyjádřitelné v jednom řádku SQL v databázi vyžadují hodně výpočetního výkonu, a to je něco, co PostGIS nabízí. Odpovědi na stejné otázky s vlastním kódem, může trvat stovky řádků specializovaného kódu odpovědět při programování proti souborům.

PostGIS pro dataviz

V mnoha vizualizací mám ve svém portfoliu, PostGIS hrál nějakou roli v procesu vizualizace. V mém workflow většinou jsem pre-proces data a pak dělat skutečné vizualizaci v QGISU.

podívejme se na příklad jednoho z těchto procesů.

vlak voronoi linky. Podivně uspokojující.

animace o vlacích a voronois výše poskytují hravý příklad síly PostGIS. V místní databázi jsem měl několik milionů vlakových GPS bodů a už jsem vytvořil animace s body, které se právě pohybovaly. Ale chtěl jsem vyzkoušet, jak by vypadala animace s liniemi Voronoi.

nejprve proto, že jsem měl několik GPS bodů pro každý vlak za minutu, chtěl jsem je seskupit tak, abych měl jeden reprezentativní bod pro každou minutu na vlak. Nejprve jsem vytvořil tabulku ručně pro výsledné body. Napsal jsem následující dotaz

INSERT INTO trains.voronoipoints 
SELECT '2018–01–15 09:00:00' AS t,
geom
FROM (SELECT St_centroid(St_collect(geom)) AS geom,
trainno
FROM (SELECT geom,
trainno
FROM trains.week
WHERE time > '2018–01–15 09:00:00'
AND time < '2018–01–15 09:01:00') AS a
GROUP BY trainno) AS b

pokud zabrzdíme dotaz v kusech, můžeme vidět následující kousky skládačky:

  • můžete vidět některé běžné prvky SQL dotaz (INSERT, SELECT, JAKO, Z, KDE A, GROUP BY)
  • geom, trainno a čas jsou názvy sloupců v mém týden tabulky ve schématu nazývá vlaky
  • poddotaz vrátí všechny GPS body, které byly sledovány v rámci požadované lhůty.
  • protože vybírám všechny GPS body sledované během jedné minuty, mohu získat několik bodů za každý vlak. Chtěl jsem jen jednu, aby voronoi linky vypadaly rozumněji. Proto používám ST_Collect k seskupení bodů a k vytvoření vícebodové geometrie z nich. ST_Centroid nahrazuje vícebodovou geometrii jediným bodem umístěným v těžišti (poddotaz b) a data jsou seskupena podle čísel vlaků.

Chcete-li udělat to samé vícekrát, měl jsem jednoduchý Python skript pro smyčku přes stejný dotaz pro několik stokrát, kde jsem měl počáteční a koncové časy jako parametry. Po úspěšném nalezení jednoho reprezentativního bodu za každou minutu jsem spustil následující příkaz (za 11,5 sekundy):

SELECT t, ST_VoronoiLines(geom) from trains.voronoipoints

pak jsem přidal výsledek do QGIS a vizualizoval jej pomocí Správce času. Může to být trochu hacky způsob, jak dosáhnout výsledku a zkušenější uživatel SQL to mohl udělat úplně jediným příkazem SQL, ale s výsledkem jsem stále docela spokojený. I když by to mohlo být zbytečné.

nakonec docela jednoduché, ale výsledek vypadá jako vyšší úroveň matematiky (a to je!), protože veškerou tvrdou práci provádí PostGIS. Také proto, že jsem byl schopen provést analýzu Voronoi pouze pro jeden bod na vlak, doba zpracování byla jen sekundy pro stovky tisíc bodů.

doba zpracování Vašich dotazů často roste exponenciálně, jak rostou objemy dat. To je důvod, proč musíte být chytří se svými dotazy.

Hej, podívej! Udělal jsem SQL mem!

obecně platí, že čím více dat musí dotaz načíst a více operací musí databáze provést (řazení, seskupování atd.), tím je pomalejší a tím méně efektivní. Efektivní SQL dotaz načte pouze řádky a sloupce, které skutečně potřebuje. SQL může fungovat jako logická hádanka, kde si opravdu musíte důkladně promyslet, čeho chcete dosáhnout.

musím také poznamenat, že ladění výkonu dotazů je na šikmé ploše a můžete se ztratit ve světě nekonečné optimalizace. Nalezení rovnováhy mezi „optimálním dotazem“ a optimálním dotazem je opravdu důležité. Zvláště pokud nevytváříte aplikaci pro milion uživatelů, několik milisekund sem nebo tam pravděpodobně nebude houpat vaši loď.

jak začít?

troufám si říci, že učení SQL je pro průměrného uživatele GIS ještě výhodnější než učení JavaScriptu, Pythonu nebo R. syntaxe SQL měla v průběhu let jen drobné změny a dovednosti SQL jsou velmi dobře přenosné.

zjistil jsem, že křivka učení v SQL není opravdu strmé dělat základy, ale to může trvat nějaký čas, aby skutečně vidět výhody, které může přinést do vašeho prostorové analýzy. Doporučuji však být trpělivý a zkoušet složitější analytiku a usilovat o rychlejší zpracování. Nakonec uvidíte rozdíl.

nejprve, když se učíte základy SQL, naučíte se dotazovat data z jedné tabulky pomocí základních technik výběru dat, jako je výběr sloupců, třídění výsledků a Filtrování řádků. Poté se dozvíte o pokročilých dotazech, jako je spojení více tabulek, použití operací sady a vytvoření poddotazu. Nakonec se naučíte, jak spravovat databázové tabulky, jako je vytvoření nové tabulky nebo úprava struktury existující tabulky.

ale existují také nástroje, které vám pomohou!

QGIS má skvělý nástroj s názvem DB Manager. Nabízí podobné GUI pro vaši databázi, ale mnohem komprimovanějším způsobem a uvnitř QGIS. Můžete upravovat a přidávat tabulky, přidávat indexy a provádět mnoho základních operací pravým tlačítkem myši.

screenshot z QGISU DB Manager.

měli byste také zkontrolovat pgAdmin, což je nejoblíbenější platforma pro správu a vývoj PostgreSQL. Existuje několik způsobů, jak dostat vaše data do PostGIS (např. ogr2ogr, shp2pgsql). Obecně doporučuji vyzkoušet různé nástroje a metody práce s daty.

udělal jsem několik malých experimentů v kombinaci Python a PostGIS. Práce s Pythonem (nebo R) a PostGIS společně může skutečně posunout vaše zpracování a automatizaci dat na další úroveň. Jen kombinace základních skriptovacích schopností Pythonu a připojení k PostGIS pomocí psycopg2 jsou dobré způsoby, jak začít.

máte pocit, že chcete začít s PostGIS?

  1. stačí stáhnout instalátory a nainstalovat PostGIS do místního počítače. Postupujte podle pokynů v tutoriálech;
  2. načtěte tam některá data. Začněte s jedním Shapefile pomocí QGIS DB Manager nebo chech například tento tutoriál o tom, jak získat přirozená data země do PostGIS;
  3. začněte hrát s SQL. Začněte se základy (výběr, filtrování a úprava dat) a pomalu uvidíte, jaké výhody by to mohlo přinést vašemu pracovnímu postupu.

Závěry

Pokud váš způsob práce je v současné době neefektivní, jen mění své nástroje, nebude váš výsledek lepší nebo proces méně bolestivé. Musíte změnit způsob, jakým přemýšlíte o správě dat. Existuje mnoho způsobů, jak používat databáze neefektivně. Věř mi, viděl jsem je a dokonce jsem pár vyzkoušel.

také měnit věci jen kvůli změně, nedává smysl. Pokud vaše každodenní práce jen vykresluje několik bodů na mapě každou chvíli, můžete to udělat s Shapefiles a csv soubory i v budoucnu. Mohlo by to být dokonce efektivnější.

ale.

Pokud si chcete udělat nějaké vážné prostorové analýzy, automatizaci procesů a v každém způsob, jak přesunout svůj způsob práce s spatal dat na další úroveň, vřele doporučuji k seznámení se s PostGIS a především prostorovým SQL. Učení SQL může být také zábavné. Vážně.

v neposlední řadě rozhodně ne. Jak tom zdůraznil: používání PostGIS vám dává geohipster cred!

měl jsem v New Yorku bikeshare dat s počáteční a koncové body. S Graphhopperem jsem vypočítal optimální trasy mezi původem a cílem, načetl jsem tisíce výsledných souborů gpx do PostGIS s ogr2ogr. V PostGIS jsem vytvořil řádky z bodů a vizualizoval data pomocí QGIS.

jedna věc, kterou jsem zmínil jen krátce, bylo, že PostGIS je open source a volně dostupný. To znamená, že lidé pracující s malým nebo žádným rozpočtem (jako já) nemají žádnou překážku vstupu. Komerční prostorové databáze mohou být nesmírně drahé. Velké poděkování patří všem aktivním vývojářům pracujícím na projektu!

Díky za přečtení! Podívejte se na mé webové stránky pro více informací o mně, nebo mi hodit komentář na Twitteru.

chcete se dozvědět více? Zdroje pro tento blogový příspěvek a další PostGIS čtení

RTFD. Dokumentace PostGIS je opravdu dobrá.

PostGIS guru Paul Ramsey má několik prezentací na téma z jiného úhlu pohledu na jeho místě

Skvělé materiály z Bezbřehé na úvod do PostGIS.

Anita Graser napsala skvělou sérii blogových příspěvků o manipulaci s údaji o pohybu v PostGIS.

Podívejte se na PostGIS knihy z Regina Obe

použil jsem tento Bostonu GIS tutorial, když jsem první instalaci PostGIS lokálně

Navíc pro lidí, kteří dělají dataviz: zajímavý experiment o uložení barvy jako 3D bodů v PostGIS

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.