Viac

Ako previesť / obsadiť z polygónu na multipolygón v PostGIS?


Existuje nejaký spôsob, ako obsadiť polygóny typom Multipolygon?

Napríklad som vytvoril kruh pomocou ST_Buffer () v bode. Návratový typ tejto funkcie je typu Polygon. Problém je v tom, že na stĺpci geometrie existuje obmedzenie, ktoré ho obmedzuje na typ Multipolygon. Nemôžem teda vložiť jednoduchý mnohouholník.

Použil som funkciu ST_MPolyFromText (), ale ako obvykle sa na ňu vracia null a ST_Dump () neposkytuje správny výstup.

Obmedzenie je:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype (geom) = 'MULTIPOLYGON' :: text ALEBO geom JE NULL),

ST_Multi - Vráti geometriu ako geometriu MULTI *. Ak je geometria už MULTI *, vráti sa nezmenená.

Príklad:

SELECT ST_AsText (ST_Multi (ST_GeomFromText ('POLYGON ((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))))))); st_astext ------------------------------------------------- ------------------------------------------------- MULTIPOLYGON ((((743238 2967416,743238 2967450,743265 2967450,743265,625 2967416, 743238 2967416)))) (1 riadok)

AdaBase

AdaBase poskytuje prirodzenú podporu využívania priestorových údajov OpenGIS koncepcie. Podpora je špeciálne poskytovaná pre MySQL (prípony priestorových údajov) a PostgreSQL (prípony PostGIS).

Načítanie údajov o geometrii nie je potrebné venovať osobitnú pozornosť. Ak AdaBase zistí typ geometrie, prevedie interné údaje do formátu „Well Known Binary“ (WKB) a interne ich uloží. Ak je požadovaný reťazcový prevod, AdaBase prevádza WKB do formátu „Well Known Text“, ktorý je vhodný na použitie v iných dotazoch. Dôležitejšie je, že možno extrahovať primitívne geometrické tvary, ako sú body, čiary a polygóny, a súradnice bodov, čo sú 16-miestne reálne čísla, sú v prípade potreby priamo k dispozícii. Podporované sú aj kolekcie homogénnej geometrie, ktoré obsahujú neurčitý počet podobných prvkov, ako sú viacbodové, viacriadkové reťazce a viacnásobné mnohouholníky. Nakoniec sú podporované „kolekcie geometrie“, ktoré môžu obsahovať heterogénnu zmes ľubovoľných geometrií. V prípade PostGIS môže zbierka obsahovať ďalšie zbierky na mnohých rekurzívnych úrovniach - zbierka môže obsahovať až 23 ďalších zbierok. Na serveri MySQL to nie je podporované a typ kolekcie geometrie môže obsahovať iba 6 typov (tri jednotlivé typy a analogické viaceré typy).

Na získanie a manipuláciu s údajmi geometrie

Po načítaní riadku použite štandardný prevod poľa „as_geometry“ na vrátenie súkromného geometria typu. Ak chcete získať reprezentáciu známeho textu geometrie, použite štandardnú konverziu poľa „as_string“ alebo odovzdajte geometriu Well_Known_Text funkcia, obe vracajú štandardné reťazce.

Možno už viete, aký typ geometrie je v poli, ale je možné, že databázová tabuľka je skonštruovaná tak, aby umožňovala akýkoľvek tvar. Na určenie Typ zbierky geometrie, odovzdať ju typ_zberu funkcie. Na určenie, koľko komponentov obsahuje geometria, použite size_of_collection funkcie. Jednotlivé geometrie (bod, čiarový reťazec, mnohouholník) pre túto funkciu vždy vrátia hodnotu 1. Ak Typ zbierky je heterogénny, môže byť žiaduce vedieť, aký druh geometrie je každý prvok zbierky. Pre tieto informácie použite kolekcia_položka_typu funkcie.

Každá geometria sa dá rozdeliť na najzákladnejší prvok, dvojrozmerný bod. Zatiaľ čo body pozostávajú zo súradníc X, Y Geometric_Real 18-ciferný typ, pri prevodoch sa hodnota zaokrúhli na 16 platných číslic. Ak chcete získať bod z adresy single_point alebo multi_point geometrie, použite načítať_bod funkcie.

Podobne je riadkový reťazec iba radom bodov. Ak chcete získať reťazec riadku (zadajte Geometric_Line_String, Použi načítať_riadok funkcia zapnutá single_line_string a multi_line_string typy geometrie.

Polygóny sú zložitejšie. Štrukturálne sú podobné líniovým reťazcom, ale prvý a posledný bod musia byť totožné (tvar je teda uzavretý) a ich konštrukčné prvky sú známe ako prstence. Prvý je vonkajší krúžok. Polygón môže mať nula až neurčitý počet „vnútorných“ krúžkov známych aj ako diery. Existujú určité pravidlá týkajúce sa otvorov (napr. Nemôžu sa dotknúť, musia byť uzavreté atď.), Takže mnohouholník je v podstate pole poľa bodov. Jeden extrahuje polygóny ako typ Geometric_Polygon pomocou retrieve_polygon odovzdaním tejto funkcie geometriu typu single_polygon alebo multi_polygon. Polygón je súkromného typu. Ak chcete zistiť, koľko má krúžkov (1 alebo viac), použite znak number_of_rings funkcie. Na získanie krúžku typu Geometric_Ring, ktorý je podobný reťazcu riadkov, použite retrieve_ring funkcie.

Zbierky geometrie sú geometrami typu heterogénny. Po určení, koľko prvkov obsahuje, použite načítať_odbierka funkcia na odlepenie prvku kolekcie ako novej geometrie. Ak je napríklad tretím prvkom kolekcie polygón, potom pomocou funkcie načítania extrahujte geometriu polygónu, ktorú je možné ďalej rozdeliť pomocou retrieve_polygon funkcie. Na PostGIS, rozšíreniach PostgreSQL GIS, môže byť extrahovaná geometria ďalšou heterogénnou kolekciou, ktorá musí mať extrahované aj svoje vlastné podkolekcie.

Ako vytvárať geometrie

Z rôznych dôvodov, napríklad z dôvodu želania produktu Well-Known-Text ako produktu na účely podpory vkladacieho alebo aktualizačného dotazu, môže byť potrebné vytvoriť geometrie, ktoré sa zvyčajne dosiahnu ich vytvorením.

Ako vytvoriť jednobodovú geometriu

To je ľahké. Stačí odovzdať premennú typu Geometric_Point do initialize_as_pointfunkcia a vráti sa geometria obsahujúca tento bod.

Ako vytvoriť viacbodovú geometriu

Toto sa deje presne rovnakým spôsobom ako jeden bod, ale namiesto toho initialize_as_multi_point funkcia sa používa. Táto geometria sa vyžaduje iba na udržanie jedného bodu, takže rozdiel medzi jednobodovou a viacbodovou geometriou je v klasifikácii iba vtedy, ak ide o jediný bod.

Ako vytvoriť geometriu s jedným riadkom a reťazcom

Najskôr vytvorte a Geometric_Line_String premennej (pole bodov) alebo len odovzdajte pole bodov priamo do initialize_as_line funkcia a vráti sa správna geometria.

Ako vytvoriť geometriu s viacerými riadkami

Proces je identický s jednoriadkovým reťazcom, ibaže initialize_as_multi_line namiesto toho sa použije funkcia. Táto geometria sa vyžaduje iba na uchytenie jedného reťazca.

Ako vytvoriť geometriu mnohouholníka

Polygón je možné zostaviť iba po jednom prstenci a geometriu je potrebné skonštruovať v dvoch krokoch. Prvým krokom je vytvorenie súkromného Geometric_Polygon typ absolvovaním a Geometric_Ring (pole bodov) k start_polygon funkcie. Ak má mnohouholník otvory, je potrebné ich definovať pomocou postupu append_inner_ring s použitím existujúceho mnohouholníka a iného krúžku. Keď je mnohouholník úplne skonštruovaný, je možné pomocou neho vytvoriť geometriu initialize_as_polygon alebo initialize_as_multi_polygon funkcie.

Ako pridať body do viacbodovej geometrie

The augment_multi_point postup sa používa na pripojenie ďalších bodov k existujúcim viacbodovým geometriám.

Ako pridať čiary do geometrie s viacerými čiarami

The augment_multi_line postup sa používa na pripojenie ďalších reťazcov čiar k existujúcim geometriám viacerých čiar-reťazcov.

Ako pridať čiary do geometrie s viacerými polygónmi

The augment_multi_polygon postup sa používa na pripojenie ďalších polygónov k existujúcim viacpolygónovým geometriám.

Ako vytvárať heterogénne geometrie

Ak chcete zostaviť kolekcie geometrie, musíte najskôr získať geometriu pomocou jednej z vyššie spomenutých metód a potom pomocou nej inicializovať novú kolekciu. initialize_as_collection. Ďalšie geometrie sa pridávajú pomocou augment_collection podľa potreby.


GIS na koľajniciach

Nakladanie s geopriestorovými údajmi je ťažkopádne a zároveň zábavné. Vývojári, ktorí to urobia prvýkrát, môžu vstúpiť do niektorých blokovačov cestnej premávky, ale keď budete postupovať, bude to radosť z učenia. GIS znamená Geografický informačný systém, ktorý sa zaoberá zhromažďovaním, mapovaním a analýzou geopriestorových údajov. Ale nie je to také ľahké, ako to znie. Dovoľte mi, aby som vás sprevádzal výzvami, ktorým som nedávno čelil vo svojom projekte:

Požiadavka: Importujte existujúce informácie o polygónoch a pomocou polygónu mapujte dané zemepisné šírky a dĺžky.

Úloha 1: Pochopenie základných vecí a žargónu

Keďže robím prvýkrát, napríklad čo by som mal použiť SRID, aký dátový typ by som mal použiť, aký súradnicový systém by som mal použiť? Po dôkladnom výskume nakoniec používam srid 4326, multipolygónový dátový typ a súradnicový systém WGS 84.

Mnohí z vás možno nechápu, čo znamená WGS 84? WGS 84 je skratka pre World Geodetic System je druh prieskumu (štandardu), ktorý sa uskutočnil v roku 1984. V súčasnosti existujú rôzne druhy štandardov, ako napríklad WGS 72, WGS 66 a WGS 60 atď. Toto sú prieskumy (štandardy) ktoré sa uskutočňujú v príslušných rokoch vytvorením určitých predpokladov o Zemi. Napríklad, ak vypočítame umiestnenie Indie pomocou WGS 84, môže sa líšiť, ak vypočítame pomocou WGS 72.

SRID znamená Spatial Reference System Identifier, ktorý nám hovorí o súradnicovom systéme, ktorý sme používali pri zhromažďovaní priestorových údajov.

Výzva 2: Import údajov

Pretože používame koľajnice napájané z postgresql, import dát do databázy je celkom jednoduchý, ale v tomto prípade nie, pretože sme dostali informácie v geojsonformate, ktoré som nikdy predtým nevidel. Našťastie, rubín poskytuje klenot s názvom rgeo-json, ktorý uľahčuje náš život. Nasleduje úryvok kódu, ktorý som napísal na import údajov geojsonu.

kde mnohouholník je náš model. Tu je náš migračný súbor, ktorý vyzerá takto:

Úloha 3: Namapujte bod pomocou Polygónu pomocou dotazu sql

PostGIS je rozšírenie databázy postgres, ktoré umožňuje postgresu vykonávať priestorové výpočty. Aby sme zistili, že daný bod leží, ktorý polygón musíme použiť, je potrebné použiť funkciu st_contains. Ak chcete použiť st_contains, najskôr sa musíme uistiť, či by dve geometrie mali používať rovnaký SRID alebo nie, tj. V našom prípade je to 4326. Pretože v mojej databáze ukladáme zemepisnú šírku a dĺžku ako plávajúce stĺpce, je potrebné ich najskôr obsadiť ako BOD a nastavte SRID na 4326 takto:

Teraz posledný dopyt na vyhľadanie vhodného mnohouholníka:

Aj keď to trvalo dlho, kým som splnil požiadavku, ale nakoniec som cítil, že som urobil niečo iné, ako to, čo robím zvyčajne. Dúfam, že tento článok vrhne trochu svetla na GIS.


AsGML ¶

Dostupnosť: Oracle, PostGIS, SpatiaLite

Prijíma jedno geografické pole alebo výraz a vracia geometrickú reprezentáciu jazyka GML (Geographic Markup Language).

Argument kľúčového slova Popis
presnosť Určuje počet platných číslic pre súradnice v reprezentácii GML - predvolená hodnota je 8. V systéme Oracle je ignorovaný.
verzia Určuje verziu GML, ktorá sa má použiť: 2 (predvolená) alebo 3.

Otvorené geopriestorové technológie

Funkcia readOGR v balíku rgdal sa používa na prenos vektorových zdrojov priestorových údajov do R. readOGR () sa pri konverzii formátu spolieha na OGR (súčasť knižnice GDAL / OGR). Zatiaľ čo OGR bohužiaľ podporuje schopnosť podmnožiny stĺpcov (s prepínačom -select) alebo riadkov (s prepínačom -where) alebo dokonca požadovať vrstvu pomocou úplného príkazu SQL, žiadna z týchto funkcií nie je v readOGR k dispozícii. Toto sa často diskutuje v e-mailových zoznamoch, ale táto funkcia ešte nebola implementovaná.

Ak sú vaše údaje už v databáze SQL, máte šťastie. To isté môžete dosiahnuť v rámci R vytvorením priestorového zobrazenia v databáze, načítaním priestorového pohľadu pomocou readOGR a následným zrušením zobrazenia. Vytvoril som funkciu, ktorá robí presne to pre zdroje údajov PostGIS.

Pretože readOGR nedokáže odoslať ľubovoľný SQL do zdroja údajov, vyžaduje táto funkcia aj balíček RPostgreSQL. Pretože som chcel, aby sa funkcia readOgrSql čo najviac zhodovala s readOGR, táto funkcia vezme DSN ako reťazec znakov a potom ho rozdelí, aby odovzdal parametre DSN dbConnect. readOGR očakáva DSN v tomto formáte:

Používateľ vyžaduje oprávnenie na vytváranie objektov vo verejnej schéme.

Potom možno readOgrSql vyvolať nasledovne:

(Posledný riadok nie je nevyhnutne potrebný, ale predstavuje malý trik, ktorý používam na uľahčenie odkazovania na konkrétne funkcie podľa názvu.)

Momentálne to funguje iba pre PostGIS 2.0+. Spolieha sa na skutočnosť, že v posledných verziách PostGIS sa priestorové zobrazenia automaticky registrujú, pretože geometry_columns & # 8220table & # 8221 je vlastne zobrazenie, ktoré nachádza všetky stĺpce geometrie vo všetkých tabuľkách. Ale aby pohľad fungoval ako úplná priestorová vrstva, musí byť stĺpec geometrie v príkaze SELECT explicitne obsadený pomocou typmodded geometrie. V príklade sa to dosiahne pomocou :: geometry (MultiPolygon, 2263), ale všeobecne :: geometry (& ltgeometry type & gt, & ltsrid & gt). Ak na geometrii nie sú žiadne transformácie, je možné sa vyhnúť explicitnému obsadeniu, pokiaľ je podkladová tabuľka definovaná pomocou stĺpcov geometrie typu PostGIS 2.0+ typmodded:

bude fungovať iba čiastočne, pretože transformovaná geometria je všeobecná. Podrobnosti nájdete v časti Ručná registrácia stĺpcov geometrie v geometry_columns. Všimnite si, že rgdal je dosť inteligentné na to, aby vrstvu načítalo do vhodného priestorového dátového rámca * (napr. SpatialPolygonsDataFrame pre polygón OGC alebo MultiPolygon), ale stratí priestorové referenčné informácie (t. j. projekčný alebo súradnicový systém). Vykreslí sa to dobre, ale pokiaľ to neopravíte v R, nebudete ho môcť kombinovať s vrstvami v rôznych referenčných systémoch súradníc.

Rozšírenie na prácu pre PostGIS pre-2.0 alebo pre SpatiaLite by nemalo byť príliš náročné, ale bude vyžadovať manuálnu registráciu priestorového zobrazenia v geometry_columns.


Bol by niekto ochotný odpovedať na moju otázku týkajúcu sa SO ohľadne PostGIS?

Áno, takže v podstate vždy, keď robím nejaké výpočty na viacnásobnom polygóne, napríklad keď vypočítam, či sa konkrétny bod nachádza v (viac) polygóne, bude to mať viacnásobný polygón ako 1 vlastnosť, je to tak?

Znamená to, že to tiež počíta tieto veci rýchlejšie na 1 multipolygóne oproti rovnakému výpočtu na zbierke polygónov?

Najzákladnejší spôsob, ako to vysvetliť:

Polygon - Poskytne rýchlejší prístup k jednotlivým polygónom vo vyhľadávaní, pretože to budú riadky, a preto budú každý indexovaný.

Multipolygon - Ak nehľadáte veľa a vždy potrebujete všetky polygóny naraz, bude to hustejšie úložisko, pretože nebudete musieť opakovať žiadne ďalšie informácie o poli.

Najdôležitejšou vecou, ​​ktorú musíte pri týchto rozhodnutiach vziať do úvahy, sú vaše údaje a to, ako k nim budete mať prístup. Benchmarking je vždy váš priateľ, ale upozorňujeme vás, že sa drasticky zmení na základe vašich údajov a toho, čo požadujete.


Úvod do PostGIS: 1. časť

PostGIS je sľubné rozšírenie pre databázu PostgreSQL, ktoré do databázy pridáva priestorové objekty. Jednoducho povedané, PostGIS pridáva do databázy geografické možnosti. S rastúcim významom systémov založených na umiestnení (LBS) v našom každodennom živote je PostGIS požehnaním v prestrojení pre vývojárov a architektov, ktorí vytvárajú geo-vedomé aplikácie.

PostGIS odstraňuje metódu ukladania, načítania a vyhľadávania obsahu založeného na umiestnení založenom na pokusoch a omyloch poskytovaním stručného a presného rozhrania na vykonávanie takýchto výpočtov.

Vývojári s pozadím MySQL by vedeli, aké ťažké je vytvoriť a škálovať databázu založenú na umiestnení v MySQL. Aj keď má MySQL určité priestorové rozšírenia, ani zďaleka neponúkajú výhody a rýchlosť, ktoré poskytuje PostGIS.

S nedávnym vydaním PostGIS 2.1 sa sila PostGIS strojnásobila, od podpory Raster a Vector analýzy v databáze po podporu 3D geometrií (zemepisná šírka, dĺžka a výška / nadmorská výška).

V časti 1 tohto tutoriálu sa budeme venovať:

  1. Inštalácia nevyhnutných knižníc pre PostGIS.
  2. Nastavenie PostGIS v systéme Linux.
  3. Vytvorenie vašej prvej priestorovej databázy - TestGIS.
  4. Import údajov do TestGIS

V 2. časti sa budeme venovať ďalej

  1. Pripojenie k TestGIS pomocou PHP
  2. Pripojenie k TestGIS pomocou Java
  3. Pripojenie k TestGIS pomocou .Net
  4. Vizualizácia údajov z TestGIS na mape

Inštalácia nevyhnutných knižníc pre PostGIS

PostGIS je komplexná prípona - ak nebude správne nakonfigurovaná, databáza nebude poskytovať požadovaný výstup. PostGIS sa spolieha na niekoľko projektov open source, ktoré je potrebné nainštalovať pred inštaláciou PostGIS.

Nasledujúce sú nevyhnutné predpoklady pre našu inštaláciu PostGIS:

  • PROJ4 4.8
  • GEOS 3.3.3+
  • GDAL 1.9
  • PostgreSQL 9.1+
  • LibXML2 alebo vyšší.
  • JSON-C 0,9 ​​alebo vyšší.
  • Kompilátor GNU C a značka GNU - Ak inštalujete zo zdroja.

Voliteľné knižnice, ktoré by bolo dobré nainštalovať, sú:

Pripravovať sa

Použijeme zariadenie VirtualBox nainštalované na najnovšiu verziu Ubuntu Linux a to isté nakonfigurujeme aj pre našu inštaláciu PostGIS 2.1.

Ako to spraviť

Stiahnite a nainštalujte VirtualBox z adresy http://www.virtualbox.org/. Stiahnite si ISO najnovšej verzie Ubuntu Linux (14.04) a vytvorte nové zariadenie VirtualBox s názvom Ubuntu a dokončite inštaláciu operačného systému Ubuntu.

V rámci operačného systému Ubuntu vytvorte používateľa s menom postgis s heslom ako postgis tiež. Skontrolujte, či má používateľ oprávnenie správcu.

Ďalej otvorte Terminál a nasledujúcim príkazom nainštalujte knižnicu PROJ4

Ďalej nainštalujte knižnicu GEOS do

Teraz nainštalujeme PostgreSQL RDBMS 9.3 do

Potrebujeme tiež vývojové balíčky serverov PostgreSQL, takže si ich nainštalujte pomocou

Knižnicu JSON-C inštaluje

Je dobré inštalovať vyššie uvedené knižnice z ich príslušných zdrojov, pretože repozitáre Ubuntu môžu mať staršiu verziu knižníc. Ak chcete zostaviť vyššie uvedené knižnice zo zdroja, uistite sa, že máte nainštalovanú zbierku GNU Compiler Collection (GCC) a GNU C ++ kompilátor (G ++).

Ak ste si ho ešte nenainštalovali, urobte to pomocou nasledujúceho príkazu.

Aby sme sa uistili, že máme najnovšie knižnice, stiahneme si zdroje pre PROJ4 z http://trac.osgeo.org/proj/, GEOS z http://trac.osgeo.org/geos/ a GDAL z http: // trac.osgeo.org/gdal/wiki/DownloadSource. Ak chcete nainštalovať najnovšie knižnice, budete musieť rozbaliť stiahnuté balíčky a spustiť nasledujúce príkazy

Ako to funguje

OSGeo: Open Source Geospatial Foundation (osgeo.org) je spoločným úsilím spojiť všetky otvorené geopriestorové projekty pod jeden dáždnik. Udržuje najnovšiu verziu a vývojové verzie popredných geopriestorových knižníc. Poskytuje tiež právnu, finančnú a infraštruktúrnu podporu týmto projektom. Používame najnovšie verzie týchto knižníc, aby sme sa uistili, že máme ich najnovšie zostavenie, aby naša inštalácia PostGIS nenarážala na problémy.

Je dobré nainštalovať pgAdmin3 - grafické používateľské rozhranie na správu databázy PostgreSQL, ktoré môžete urobiť pomocou sudo apt-get install pgadmin3 na svojom termináli.

Ak narazíte na problémy s inštaláciou vyššie uvedených predpokladov, uistite sa, že máte nainštalovanú knižnicu libxml2 (XML C Parser), ak už vo vašej distribúcii Ubuntu nie je. Nainštalujte to isté, ak je to potrebné do

Nastavenie PostGIS v systéme Linux

PROJ, GEOS a GDAL sú kľúčové knižnice potrebné pre fungovanie PostGIS. Okrem týchto knižníc je databázou, ktorú použijeme na konfiguráciu PostGIS, PostgreSQL 9.3. Počnúc PostgreSQL 9.1 a PostGIS 2.0 existujú dva spôsoby pridania knižnice PostGIS do PostgreSQL - pomocou rozšírení alebo pomocou skriptov umožňujúcich PostGIS (súbory .sql). Použijeme metódu rozšírenia.

Pripravovať sa

Stiahnite si najnovší zdrojový kód knižnice PostGIS zo stránky http://download.osgeo.org/postgis/source/postgis-2.1.2.tar.gz

Ako to spraviť

Otvorte terminál a rozbaľte stiahnutý zdrojový kód postgis pomocou príkazu gunzip, čím sa vytvorí súbor postgis-2.1.2.tar spis.

Extrahujte obsah súboru tar pomocou príkazu tar

Teraz zmeňte na postgis-2.1.2 adresár a spustením nasledujúcich príkazov nainštalujete knižnicu postgis do vášho systému.

Ak všetko funguje úplne v poriadku, mali by ste na konci príkazu make install vidieť nasledujúce dva riadky

  1. Opustenie adresára / home / postgis / postgis - 2.1. 2 / rozšírenia / postgis / topológia
  2. Opustenie adresára / home / postgis / postgis - 2.1. 2 / rozšírenia

Aktualizujte svoju PATH tak, aby obsahovala programy príkazového riadku PostGIS, ako je shp2pgsql, pod Linuxom upravte svoje .bashrc súbor a pripojte nasledujúci riadok export PATH = $: /usr/lib/postgresql/9.3/bin/.

Ak používate iný operačný systém, nezabudnite sťahovať správne súbory. Niektorí dobrí vývojári vydali neoficiálne súbory RPMS, DEB a ďalšie úložiská pre inštaláciu PostGIS 2.1, pretože aktualizácia oficiálneho distribučného kanála chvíľu trvá. verzovanie balíkov na základe ich vlastného harmonogramu vydávania a testovania.

Posledná stabilná verzia PostGIS v úložisku Ubuntu 14.04 je postgis-2.1, ktorú je možné nainštalovať pomocou jedného príkazu sudo apt-get install postgresql-9.3-postgis-2.1.

Vytvorenie vašej prvej priestorovej databázy - TestGIS

S konfiguráciou PostGIS 2.1 v našej distribúcii Ubuntu vytvorme novú databázu s povoleným PostGIS nazvanú TestGIS. Túto databázu použijeme v celom výučbe na znázornenie scenára použitia v reálnom svete pre porozumenie čitateľom.

Pripravovať sa

pgAdmin3 je dobrý nástroj GUI na prácu so serverom PostgreSQL. Ak ste si ho ešte nenainštalovali, je na to vhodný čas. Nie je to však nevyhnutná podmienka, dokážeme sa prepracovať iba pomocou príkazového riadku.

Predtým, ako vytvoríme databázu PostGIS, musíme upraviť predvolené nastavenie pg_hba.conf konfiguračný súbor pre náš server PostgreSQL tak, aby prijímal pripojenia z nášho lokálneho hostiteľa a / alebo vzdialených hostiteľov (podľa potreby).

Otvor tvoj pg_hba.conf (v našej konfigurácii Ubuntu je súbor umiestnený na /etc/postgresql/9.3/main/ a prejdite na riadky autentifikácie klienta, ako je to znázornené nižšie, a zmeňte SPÔSOB dôveryhodnosti pre všetky miestne pripojenia.

Reštartujte server PostgreSQL zadaním nasledujúceho príkazu do terminálu

Ďalej pridajte nového používateľa PostgreSQL s menom postgis s heslom postgis pomocou interaktívneho príkazu createuser.

  1. sudo createuser postgis - Upostgres - str
  2. Zadajte heslo pre novú rolu:
  3. Zadajte to znova:
  4. Bude nová rola superužívateľom? (r / n) r

Novo vytvoreného používateľa môžete potvrdiť navštívením balíka Webmin GUI v miestnom prehliadači. Webmin je webový nástroj na správu systému pre Linux - už nemusíte hľadať konfiguračné súbory, Webmin poskytuje všetky služby v jednom bohatom grafickom používateľskom rozhraní. Stiahnite si ho z adresy http://www.webmin.com/. Tu je náš úchop obrazovky z modulu PostgreSQL, ktorý zobrazuje nášho novo vytvoreného používateľa ako položku.

Ako to spraviť

Prvým krokom k vytvoreniu našej prvej databázy PostGIS je vytvorenie bežnej databázy PostgreSQL pomocou príkazu createdb. Na vašom termináli spustite nasledujúci príkaz na vytvorenie novej databázy s názvom TestGIS.

Zadajte heslo postgis na výzvu príkazového riadku.

Teraz z konzoly PostgreSQL (psql) vyberte novovytvorenú vytvorenú databázu TestGIS zadaním nasledujúceho príkazu

Ďalej povoľte rozšírenie postgis pre databázu TestGIS pomocou

Môžeme použiť pgAdmin3 na overenie našej novo vytvorenej databázy TestGIS, otvoriť nástroj pgAdmin3 a vytvoriť nový server s používateľským menom a heslom ako „postgis“ a portom nastaveným na 5432 (predvolený port PostgreSQL). Pripojenie pomenujte ako TestGIS. Príklad nájdete na snímke obrazovky nižšie.

Akonáhle kliknete Ok, rozbaľte strom kliknutím na uzol Databases- & gtTestGIS a overte, či je postgis uvedený ako prípona, ako je to znázornené na obrázku nižšie.

Ako to funguje

PostgreSQL 9.1 a vyšší obsahuje smernicu CREATE EXTENSION, ktorá nám umožňuje jednoduchým príkazom načítať novú príponu do aktuálnej databázy. PostGIS 2.1 podporuje tento mechanizmus, takže keď sme v našej databáze TestGIS použili CREATE EXTENSION postgis, systém naimportoval geometriu, geografiu, raster, priestorrefsys a všetko, čo súvisí s našou databázou. Podobne je topologická funkcia v PostGIS 2.1 ďalším rozšírením, ktoré je možné načítať pomocou CREATE EXTENSION postgis_topology.

Načítanie prípony sa rovná spusteniu prípony .sql súbor. Postgresonline.com má skvelý článok o rozšíreniach na stránke http://www.postgresonline.com/journal/archives/216-PostgreSQL-9.1-Exploring-Extensions.html. Ak chcete získať viac informácií o rozšíreniach, navštívte odkaz.

Import údajov do TestGIS

Po vytvorení našej prvej databázy s povoleným serverom postgis je čas importovať niektoré údaje z reálneho sveta. Keď hovoríme o skutočnom svete, máme na mysli údaje zo skutočného sveta. Tieto informácie čerpáme z prehľadávača Flickr Geo API Yahoo a konkrétne z tohto odkazu obsahujúceho geografickú hranicu pre Spojené štáty - http://www.flickr.com/places/info/23424977

Všimnite si odkaz na súbor Tvar (na nasledujúcej snímke obrazovky v obdĺžniku). Shapefile je formát súboru s otvoreným zdrojom na ukladanie geopriestorových údajov. Tento formát vyvinul a reguloval ESRI - inštitút pre výskum environmentálnych systémov (http://www.esri.com/).

Pripravovať sa

Na uloženie geografickej hranice krajiny definujeme tabuľku krajín v databáze TestGIS pomocou nasledujúcich príkazov SQL:

  1. psql - Upostgis - W TestGIS
  2. TestGIS = # CREATE TABLE country (id integer NOT NULL, name text, boundary geography (MultiPolygon, 4326), name_alias text, CONSTRAINT & # 34countryId & # 34 PRIMARY KEY (id))

Všimnite si dátový typ stĺpca s názvom „hranica“, ktorý nie je vašim tradičným databázovým stĺpcom typu int, varchar alebo datetime, ale geografickým dátovým typom. V tomto stĺpci sa môžu ukladať údaje o viacerých polygónoch (ako je vidieť aj na snímke obrazovky vyššie). Číslo 4326 je SRID (Spatial Reference System Identifier) ​​zodpovedajúci WGS-84 (World Geodetic System). Mapovanie toho istého možno skontrolovať v tabuľke spatial_ref_sys v našej databáze TestGIS.

Pamätajte, že WGS-84 je najskôr zemepisná dĺžka a potom zemepisná šírka, takže pri práci s údajmi sa uistite, že ukladáte a načítavate údaje v pároch lon / lat a nie v pároch lat / lon.

Ako to spraviť

Znova spustite svoj terminál a spustite príkaz shp2pgsql na súbore tvarov, aby ste konvertovali súbor tvarov na SQL, a potom selektívne vložte prevedené údaje do tabuľky krajín.

Prejdite do priečinka, do ktorého sme stiahli súbor Shape, v našom prípade je to $ USER / Downloads / Geo-Data / country / US

Teraz spustite príkaz shp2pgsql o

Otvor US.sql takto vygenerovaný súbor by mal vyzerať takto.

Zo súboru skopírujte prvý príkaz vloženia, a to

  1. INSERT INTO & # 3423424977 & # 34 (& # 34tag & # 34, & # 34count & # 34, & # 34area & # 34, & # 34perimeter & # 34, & # 34hustota & # 34, geog)
  2. HODNOTY
  3. (& # 3923424977 a # 39, a # 395738246 a # 39, a # 393.986.508,50 & # 39, a # 3.917.812,86 & # 39, a # 391,44 & # 39, a # 390106000020E6100000010000000103000000010000002D010000000000406B555EC0000000C02C804840000000C0EA495EC0000000E0188048400000008026445EC0000000A0518048400000000074315EC0000000C0C5824840000000E057295EC0000000A0BA7F484000000080BF0B5EC000000020AD7F484000000040FAFB5DC000000080F67F4840000000009DEA5DC000000080FE814840000000C05DD35DC000000040D2814840000000E0ACCC5DC0000000000000809FE15CC0000000009A794840000000001AC95CC000000000047E48400000000048C35CC0000000A00B8148400000002078AC5CC00000004089914840000000204FAC5CC000000080A49148400000004044AC5CC000000000AA914840000000203CAC5CC000000080A491484000000060E5825CC000000080818248400000004029795CC0000000E01F804840000000A0606A5CC0000000A0F27F4840000000404B585CC00000006001804840000000C033585CC000000060F87F48400000004070325CC0000000A0D17 .......... & # 39)

Potrebujeme iba hodnoty z posledného stĺpca s názvom „density“, čo je v podstate iba jeden polygón zo súboru hraničných tvarov USA, ktorý sme si predtým stiahli. Pomocou tohto nespracovaného textu skonštruujeme náš príkaz vloženia ako

  1. INSERT INTO country (id, name, boundary, name _alias) VALUES (1, & # 39United
  2. Štáty & # 39, & # 390106000020E6100000010000000103000000010000002D010000000000406B555EC0000000C02C804840000000C0EA495EC0000000E0188048400000008026445EC0000000A051804840000000007. & # 39, & # 39spojené štáty & # 39)

Uložiť tento súbor ako vložiť.sql a importujte to isté do svojej databázy TestGIS.

Ak chcete overiť údaje, otvorte grafické rozhranie pgAdmin3 a spustite nasledujúci dotaz v editore SQL

Mali by ste vidieť nasledujúci výstup.

Ako to funguje

Príkaz shp2pgsql dodávaný s PostGIS 2.0 ponúka jednoduchý spôsob importu geopriestorových údajov z ESRI Shapefiles. Aj pre príkaz existuje GUI s názvom shp2pgsql-gui ktorý umožňuje import / export dát súboru tvaru. Existujú knižnice a programy na čítanie súborov Shapefiles v rôznych jazykoch a na rôznych platformách: ďalšie informácie nájdete na stránke http://en.wikipedia.org/wiki/Shapefile alebo v priateľskom vyhľadávacom nástroji susedstva.

Ďalším lepším spôsobom, ako získať hranice krajín zo služby Flickr, je rozhranie API. Na tej istej stránke v Spojených štátoch v aplikácii Flickr Geo API Explorer kliknite na pole flickr.places.getInfo v okne Prieskumník API, nespracovaný odkaz na API je http: //api.flickr.com/services/rest/?method=flickr.places.getInfo&api_key=907997443d2d8f1f06aa5073c4d9dfeb&woe_id=23424977, ktoré je možné analyzovať v akomkoľvek populárnom programovacom jazyku a údaje vložiť do tabuľky našich krajín.

V predchádzajúcom príklade sme sa naučili importovať údaje Shapefile do našej databázy PostGIS. Išlo však o manuálnu prácu s kopírovaním a vkladaním a neimportovala všetky polygóny potrebné na úplné hranice USA. Navyše, ak potrebujeme tento proces automatizovať a chceme do našej databázy importovať všetky krajiny sveta, stane sa z toho herkulovská úloha, ktorú je potrebné robiť spôsobom kopírovania a vkladania.

Aby sme to vyriešili, používame funkcie PostgreSQL pre PHP, JDBC pre Java a Npgsql pre .Net.

V časti 2 tohto tutoriálu sa dozviete, ako sa spojiť s TestGIS pomocou PHP, Java a .NET.


Viacero vonkajších prvkov

V súčasnosti text uvádza, že je povolený iba jeden vonkajší prvok.

Toto by sa malo upraviť na viac prvkov, pokiaľ tvoria 1 obrys. Napr. pre veľké jazerá využívajúce pobrežie je vonkajšia forma rozdelená na viac spôsobov, ale aj tak by malo byť možné použiť rovnaký multipolygónový vzťah (najmä na účely pomenovania,.).

Navrhované úpravy sú teda:

  • Povoľte viac vonkajších ciest, pokiaľ sa pri spojení vytvoria na jednu uzavretú cestu
  • Povoliť tiež viac rozdelených vnútorných spôsobov (nikde nie je uvedené, že to nie je povolené, malo by to byť však výslovné)

Týmto by sa zaoberal #Suggestion for advanced multipolygons, uvedený nižšie. --achadwick 11:07, 27. novembra 2008 (UTC)


Výukový program¶

Táto časť obsahuje krátky úvod a návod na používanie GEOSGeometria predmety.

Vytvorenie geometrie¶

GEOSGeometria objekty môžu byť vytvorené niekoľkými spôsobmi. Prvým je jednoduché vytvorenie inštancie objektu na nejakom priestorovom vstupe. Nasledujú príklady vytvorenia rovnakej geometrie z formátov WKT, HEX, WKB a GeoJSON: # 8211:

Ďalšou možnosťou je použiť konštruktor pre konkrétny typ geometrie, ktorý chcete vytvoriť. Napríklad a Bod objekt je možné vytvoriť odovzdaním súradníc X a Y do jeho konštruktora:

Konečne sú fromstr () a fromfile () továrenské metódy, ktoré vracajú a GEOSGeometria objekt zo vstupného reťazca alebo súboru:

Geometrie sú pytónske¶

GEOSGeometry objects are ‘Pythonic’, in other words components may be accessed, modified, and iterated over using standard Python conventions. For example, you can iterate over the coordinates in a Point :

With any geometry object, the GEOSGeometry.coords property may be used to get the geometry coordinates as a Python tuple:

You can get/set geometry components using standard Python indexing techniques. However, what is returned depends on the geometry type of the object. For example, indexing on a LineString returns a coordinate tuple:

Whereas indexing on a Polygon will return the ring (a LinearRing object) corresponding to the index:

In addition, coordinates/components of the geometry may added or modified, just like a Python list:


Package Structure

Features:
The Features package contains the basic building block features of the GIS. These are the features such as Point, MultiPoint, LineString, MultiLineString, Polygon, and MultiPolygon. There is also a RasterShape for displaying images. There are a couple of sub packages of Features that are used for manipulating the features.

Common:
This pacakge contains all of the non feature classes that are used for the operation of the system. The only class contained in common at the moment is the "Node" class. This class is used to save configuration information from all layers of the toolkit, and is used by the application to generate configuration files using the Config package.

Config:
Config is used to convert the "Node" information into configuration information. It reads and writes to an XML file at the moment, but configuration information could presumably be stored in any persistent storage that supports trees of named value pairs.

Projection:
Projections are used in several layers of the toolkit. This is mostly for performance reasons, and to enable the support of database level projection features. There are two levels of projection, the projection the map uses, and the projection the data resides within. This allows the toolkit to display data in a dynamic projection, while reading data in a static projection. A common use of this functionality is the storing of imagery in a UTM projection, but displaying it in a Connic Conformal Projection. Most common projections are cuurently supported, and adding more can be done fairly easilly.

Datasources:
Data can be read from a variety of data sources. Each data source has it's own package, with the generic base classes and interfaces residing in the root. Datasources include ESRI shapefile, ARCSDE, IBM DB2, Image, PostGIS, memory (kind of a scratch data source), seamless, terraserver, and webservice. It is expected that more datasources will be added in the future. The AGCSDE and ARCIMS datasources are kept in a separate package under proprietary, because they statically links to a priprietary ESRI jar file, these packages are "proprietary.datasources.arcsde" and "proprietary.datasources.arcims".

Display:
All Elements associated with displaying geographic objects are stored in the display class. The basic element is the GISDisplay which is a swing widget for embedding GIS functionality into swing GUIs. The basic building block of the display package is the Layer object. Each layer object is responsible for drawing it's data on to the graphics context it is sent. Assisting it is a Converter object which is responsible for converting pixel screen coordinates to World coordinates and back. Each layer has a single data source, and contains the Style object which tells actually renders the data.

Style objects contain multiple Labelers and Renderers but only a single Shader. The Renderers determine how the features should be drawn, the Labelers determine how the labels should be drawn, and the Shader provids the colors, patterns, and other information required by the Labelers and Shaders for them to render the objects.

Drawmodels are used bye the GISDisplay to add behavior. They determine what happens when a user clicks on a map, drags a map, etc. They provide the select tools, and add highlight information to the map. Mostly they react to mouse movement on the map.

Shapeeditors are gui classes that can be used to modify a shape. They allow the user to type in exact coordinates to a shape, as well as modify shape contents from a tabular point of view, instead of a geographical one.

In addition, there is a scale bar that allows the user interface to represent distances on the map, and some commonly used gui widgets that may help in generating an application with this toolkit.

Application:
The application package contains the classes that are used to create the GISToolkitEditor. This package has become rather large, and uses every other part of the GISToolkit, except for the Server. It serves as an example of how an applicaiton could be created using this toolkit.

Server:
These are the classes that are used to create the WebMapService. They are an example of how this toolkit can be used to create a server side application that generates maps for a client.


Pozri si video: creating database and table with postgresqlpgAdmin (Október 2021).