postgisAan de slag met postgis


Opmerkingen

PostGIS is een set extensies voor de PostgreSQL-database. Met PostGIS kunt u geospatiale gegevens opslaan en ruimtelijke zoekopdrachten uitvoeren in een postgres-database.

In tegenstelling tot de standaard datatypes op een normale postgres-database, moeten ruimtelijke gegevens anders worden behandeld. De query's die u op een ruimtelijke database kunt uitvoeren, worden meestal gedefinieerd door selectiekaders in 2 of 3 dimensies. Op te slaan, te indexeren en omgaan met deze datatypes PostGIS maakt gebruik van een concept genaamd R-Trees , welke geen deel uitmaakt van de standaard postgres-installatie.

Met een postGIS-database kunt u:

  • ruimtelijke gegevens opslaan
  • ruimtelijke zoekopdrachten uitvoeren om informatie (punten, gebieden) op te halen en te extraheren.
  • ruimtelijke informatie en metadata op tabellen beheren (zoals: gebruikt coorinate-reference-system).
  • geometrieën omzetten van het ene coördinatenstelsel naar het andere
  • geometrieën vergelijken en eigenschappen extraheren (zoals: randlengte van een weg of gebouw)
  • genereer nieuwe geometrieën van anderen.

versies

Nieuwste functies uitgebracht Officiële documentatie Publicatiedatum
2.3.0 HTML , PDF 2016/09/26
2.2.0 HTML , PDF 2015/10/07
2.1.0 HTML , PDF 2013/08/17
2.0.0 HTML , PDF 2012-04-03
1.5.0 2010-02-04
1.4.0 2009-07-24
1.3.0 2007-08-09
1.2.0 2006-12-08
1.1.0 2005-12-21
1.0.0 2005-04-19

Een georuimtelijke "Hallo wereld"

In dit voorbeeld zullen we een geospatiale database opzetten, gegevens importeren uit 2 verschillende bronnen en de resultaten bekijken in een applicatie genaamd QGIS. Deze gids is expliciet geschreven voor linux-machines, als u op een ander platform werkt, werken sommige opdrachten of paden mogelijk niet zoals verwacht.

Om de geïmporteerde gegevens te bekijken, gebruiken we een applicatie genaamd QGIS . Als u deze applicatie niet hebt, installeer deze dan eerst , als u een andere viewer of geo-applicatie (zoals ArcGIS) wilt gebruiken, kunt u de installatie van QGIS overslaan.

Onze bronnen zijn de New York City State Assembly Districts en de LION Street Map-database van New York City . Download de juiste bestanden van de gekoppelde locaties. Je moet ook een kijkje nemen in de Metadata-sectie van het materiaal, omdat het je informatie geeft over welk coördinaatreferentiesysteem deze bestanden gebruiken.

Maak om te beginnen een werkmap "nycgis" aan, kopieer de gedownloade bestanden naar de locatie en pak de archieven uit.

mkdir nycgis
cd nycgis
cp ~/Downloads/nyad_16d.zip .
unzip ~/Downloads/nyad_16d.zip
cp ~/Downloads/nylion_16d.zip .
unzip  ~/Downloads/nylion_16d.zip
 

In de map "nycgis" zou u nu 2 mappen moeten hebben: "nyad_16d", "lion" met verschillende bestanden.

Bij het werken met geodata is het van vitaal belang om het coördinatenreferentiesysteem (CRS) van uw brongegevens en van uw definitieve uitvoergegevens te kennen. In de Metadata-secties van de gekoppelde locaties hierboven ( Metadata: Assembly Districts , Metadata: LION Database ), zult u zien dat het CRS voor beide bestanden EPSG: 2263 is, een coördinatensysteem dat wordt gebruikt om naar het noordoosten van de VS te verwijzen.

Laten we aannemen dat we een ander CRS in onze database willen gebruiken. Dit kan verschillende redenen hebben, we kunnen bijvoorbeeld met een webgebaseerde geo-applicatie in de database werken. Een veel voorkomende CRS voor dit soort toepassingen is WGS: 84 (EPSG: 4326).

Om de coördinatensystemen te converteren gebruiken we een tool genaamd ogr2ogr die deel uitmaakt van het GDAL-pakket. In de werkmap maken we eerst 2 mappen die de opnieuw geprojecteerde gegevens vertegenwoordigen en converteren we vervolgens onze gegevens.

mkdir nyad_16d_proj_4326
ogr2ogr -f "ESRI Shapefile" ./nyad_16d_proj_4326/nyad_4326.shp ./nyad_16d/nyad_16d.shp -s_srs EPSG:2263 -t_srs EPSG:4326

mkdir nylion_16d_proj_4326
ogr2ogr -f "ESRI Shapefile" ./nylion_16d_proj_4326/ny_str_4326.shp ./nylion_16d/lion/lion.gdb/a0000000d.gdbtable -s_srs EPSG:2263 -t_srs EPSG:4326
 

Merk op dat we alleen het bestand "a0000000d.gdbtable" van de LION-database gebruiken voor onze doeleinden. De syntaxis van het ogr2ogr -commando is als volgt:

ogr2ogr -f [output-format] [output-file] [input-file] -s_srs [source crs] -t_srs [target crs]
 

We hebben nu 2 shapefiles, geprojecteerd in de juiste CRS. Om de gegevens in onze database te gebruiken, moeten we de shapefiles naar sql-statemens converteren. Hiervoor gebruiken we een tool genaamd shp2pgsql . Voer in de werkmap de volgende opdrachten uit:

shp2pgsql ./nyad_16d_proj_4326/nyad_4326.shp > nyad_4326.sql
shp2pgsql ./nylion_16d_proj_4326/ny_str_4326.shp > ny_streets_4326.sql
 

De bestanden nyad_4326.sql en ny_streets_4326.sql zijn nu klaar voor gebruik in postgis. Maak een ruimtelijk ingeschakelde database om door te gaan en de gegevens te importeren.

sudo su - postgres
createdb nycgis
psql -d nycgis
 

Voer in de psql-sessie het volgende uit:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
 

Sluit de psql- en postgres-gebruikerssessies af met (CTRL + D). En importeer de bestanden met:

psql -f nyad_4326.sql -d nycgis
psql -f ny_streets_4326.sql -d nycgis
 

De database nycgis heeft nu 2 tabellen waarin de opnieuw geprojecteerde bronnen met succes zijn geïmporteerd.

Om dit te verifiëren: open QGIS

  1. gebruik Laag > Laag toevoegen > PostGIS-laag
  2. maak verbinding met uw database
  3. selecteer uw tafels
  4. (optioneel) stel de stijl van de nieuw gemaakte lagen in.

QGIS-Screenshot

Et voilà: U hebt nu een ruimtelijk ingeschakelde database met geïmporteerde, opnieuw geprojecteerde geodata.

Installatie vanaf bron (met Postgres 9.1 of hoger)

Deze gids is expliciet voor PostgreSQL 9.1 of hoger op Linux-machines. Het maakt gebruik van de postgres extensies-functie die het importeren van extensies in een bestaande postgres-installatie aanzienlijk zal verbeteren. Als u met een oudere versie van postgres moet werken, raadpleegt u de officiële documentatie .

Afhankelijkheden oplossen

PostGIS is een complex project met een aantal afhankelijkheden. Om door te gaan met de handmatige configuratie- en buildprocedure, moet u deze afhankelijkheden oplossen en de volgende pakketten handmatig of via de pakketbeheerders installeren.

Minimale vereisten

  • PostgreSQL 9.1 of hoger. Het is belangrijk dat u de database installeert inclusief serverheaders, meestal te vinden in de dev- pakketten van de pakketmanager van uw repository.
  • De GNU C Compiler gcc .
  • GNU maken . Om het bouwproces te voltooien.
  • Proj4 . Een projectiebibliotheek voor coördinatieveranderingen.
  • GEOS . Een geometriebibliotheek die functiebeschrijvingen en eenvoudige geometrieën implementeert. Versie 3.5 of hoger wordt aanbevolen om nieuwere functies zoals ST_ClipByBox2D en ST_Subdivide te gebruiken .
  • GDAL , versie 1.9 of hoger. Een bibliotheek die abstracte data-indelingen implementeert voor raster- en vectorgebaseerde geospatiale gegevens.
  • LibXML2 , versie 2.5 of hoger. Een bibliothecaris om te werken met XML, XSLT en DTD.
  • JSON-C , versie 0.9 of hoger. Een bibliotheek om uitvoer te maken in het JSON-formaat

Optionele vereisten

  • GTK (vereist GTK + 2.0, 2.8+) om de shp2pgsql-gui te compileren.
  • SFCGAL , versie 1.1 (of hoger) kan worden gebruikt om PostGIS extra geavanceerde 2D- en 3D-analysefuncties te bieden.
  • PCRE . Een bibliotheek voor het matchen van reguliere expressiepatronen met behulp van de Perl 5-syntaxis. Deze bibliotheek is nodig als u met Adress Standardizer wilt werken.
  • CUnit . Een hulpprogramma voor het testen van eenheden, nodig voor regressietests.
  • DocBook (xsltproc) is vereist voor het samenstellen van de documentatie.
  • DBLatex is vereist voor het samenstellen van de documentatie in PDF-formaat.
  • ImageMagick is vereist om de afbeeldingen te genereren die in de documentatie worden gebruikt.

Verkrijg de bronnen

Download de nieuwste tarball om de broncode te verkrijgen:

wget http://postgis.net/stuff/postgis-2.3.2dev.tar.gz
tar -xvzf postgis-2.3.2dev.tar.gz
 

of gebruik de officiële SVN-repository:

svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-2.3.2dev
 

Configuratie

Als u de bronnen via SVN hebt verkregen, kunt u het config-script voorbereiden met:

./autogen.sh
 

Om het build-proces voor uw specifieke machine te configureren, voert u in de projectmap uit:

./configure
 

Er zijn verschillende optionele parameters voor de configuratiestap. Raadpleeg de officiële documentatie voor gedetailleerde instructies, dit is meestal optioneel en alleen voor servers die niet-standaardinstallaties gebruiken.

Bouwen

Nadat de configuratiestap met succes is voltooid, wordt een makefile gemaakt. Om het build-proces te starten:

make
 

De laatste uitvoer moet zijn:

"PostGIS was built successfully. Ready to install."
 

Vanaf versie 1.4.0 hebben alle functies opmerkingen gegenereerd uit de documentatie. Als u deze opmerkingen later in uw ruimtelijke databases wilt installeren, voert u de opdracht docbook uit.

make comments
 

Installatie

Installeer alle extensies met:

make install
 

De PostGIS-extensies worden automatisch gebouwd en geïnstalleerd als u PostgreSQL 9.1 of hoger gebruikt. U kunt de benodigde extensies handmatig installeren als u een andere configuratie hebt.

In de projectmap:

cd extensions
cd postgis
make clean
make
make install

cd ..
cd postgis_topology
make clean
make
make install

cd ..
cd postgis_sfcgal
make clean
make
make install

cd ..
cd address_standardizer
make clean
make
make install
make installcheck

cd ..
cd postgis_tiger_geocoder
make clean
make
make install
make installcheck
 

Als u de extensies handmatig op een andere machine wilt installeren, kopieert u de volgende bestanden van de extensions naar de PostgreSQL/share/extension -map van het doel. Voor elke extensie:

scp extensions/[EXTENSION]/sql/*.sql user@target:[POSTGIS_PATH]/share/extension
 

waarbij [EXTENSION] de geselecteerde extensie is (postgis, postgis_topology, postgis_sfcgal, address_standardizer, postgis_tiger_geocoder) en [POSTGIS_PATH] het PostGIS-installatiepad op uw doelmachine is.

Installatie verifiëren

Als u geen actieve postgres-databaseservice hebt, stelt u eerst uw postgres-database in . Maak verbinding met de database met behulp van:

su postgres -c psql
 

Om te controleren of de extensies toegankelijk zijn, voert u de volgende query's uit in een psql-sessie:

SELECT name, default_version,installed_version FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';
 

De uitvoer moet er zo uitzien:

             name             | default_version | installed_version
------------------------------+-----------------+-------------------
 address_standardizer         | 2.3.2dev        | 2.3.2dev
 address_standardizer_data_us | 2.3.2dev        | 2.3.2dev
 postgis                      | 2.3.2dev        | 2.3.2dev
 postgis_sfcgal               | 2.3.2dev        |
 postgis_tiger_geocoder       | 2.3.2dev        | 2.3.2dev
 postgis_topology             | 2.3.2dev        |

(6 rows)
 

Om een diepgaande test na de installatie uit te voeren, voert u de volgende opdracht in uw projectmap uit:

make check
 

Dit doorloopt verschillende controles en tests met behulp van de gegenereerde bibliotheek voor een echte PostgreSQL-database.

Installatie via Pakketbeheer

Boog:

Een officieel pacman-pakket is beschikbaar. Installeer het pakket als root met behulp van:

pacman -S postgis
 

OpenSuse:

Om de openSuse-opslagplaatsen voor geospatiale toepassingen te gebruiken, schakelt u de Geo-repository in als root:

zypper ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_[RELEASE]/ GEO 
 

waarbij [RELEASE] het officiële releasenummer van uw Suse-distributie is. Hierna kunt u postgis installeren met:

zypper install postgis
 

Een geospatiale database opzetten

Om een nieuwe lege database te maken, voer je uit als postgres-gebruiker:

createdb [yourdatabase]
 

Maak verbinding met de database met een psql-sessie:

psql -d [yourdatabase]
 

In de psql-sessie uitvoeren:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
 

om de nodige geospatiale extensies te maken. Zodra dit is gebeurd, is de database een geospatiaal ingeschakelde database en is deze klaar voor gebruik.