16.1. Lesson: Instellen van PostGIS

Instellen van functies voor PostGIS zal u in staat stellen toegang te verkrijgen tot ruimtelijke functies binnen PostgreSQL.

Het doel voor deze les: Ruimtelijke functies installeren en in het kort hun effecten demonstreren.

Notitie

We gaan er van uit dat we voor deze oefening PostGIS versie 2.1 gebruiken. De installatie en configuratie van de database zijn anders voor oudere versies, maar de rest van dit materiaal in deze module zal nog steeds werken. Consulteer de documentatie voor uw platform voor hulp bij de installatie en de configuratie van de database.

16.1.1. Installeren onder Ubuntu

Postgis wordt eenvoudig geïnstalleerd vanuit apt.

$ sudo apt install postgis
$ sudo apt install postgresql-9.1-postgis

Echt, zo eenvoudig is dat…

Notitie

Afhankelijk van welke versie van Ubuntu u gebruikt en welke afhankelijkheden u heeft geconfigureerd, zullen deze opdrachten PostGIS 1.5, of 2.x installeren. U kunt de geïnstalleerde versie zoeken door een query select PostGIS_full_version(); uit te voeren met psql of een ander gereedschap.

U kunt de volgende opdrachten gebruiken om de absoluut laatste versie van PostGIS te installeren.

$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt update
$ sudo apt install postgresql-9.1-postgis-nightly

16.1.2. Installeren onder Windows

Installeren op Windows is iets meer gecompliceerd, maar nog steeds niet moeilijk. Onthoud dat u online moet zijn om de opgeslagen Postgis te installeren.

Bezoek eerst de downloadpagina.

Volg dan deze gids.

Meer informatie over het installeren op Windows kan worden gevonden op de website van PostGIS.

16.1.3. Installeren op andere platformen

De website van PostGIS bevat informatie over de installatie op andere besturingssystemen en platformen waaronder MacOS en andere distributies van Linux.

16.1.4. Databases configureren om PostGIS te gebruiken

Als PostGIS eenmaal is geïnstalleerd, zult u uw database moeten configureren om de extensies te gebruiken. Als u PostGIS versie > 2.0 heeft geïnstalleerd, is dit zo simpel als de volgende opdracht met psql uit te voeren met behulp van de adresdatabase uit onze vorige oefening.

$ psql -d address -c "CREATE EXTENSION postgis;"

Notitie

Wanneer u PostGIS 1.5 gebruikt en een versie van PostgreSQL lager dan 9.1, zult u een aantal andere stappen moeten volgen om de extensies voor PostGIS te installeren voor uw database. Bekijk de PostGIS Documentation voor instructies over hoe dit te doen.

16.1.5. Kijken naar de geïnstalleerde functies van PostGIS

Aan PostGIS kan worden gedacht als aan een collectie van functies binnen de database die de bronmogelijkheden van PostgreSQL uitbreiden zodat het ruimtelijke gegevens kan afhandelen. Met ‘afhandelen’ bedoelen we opslaan, ophalen, bevragen en bewerken. Een aantal functies worden in de database geïnstalleerd om dit te kunnen doen.

Onze PostgreSQL database address is nu geo-ruimtelijk ingeschakeld, dankzij PostGIS. We gaan hier in de komende gedeelten een stuk dieper op in, maar laten we u een klein voorproefje geven. Laten we zeggen dat we een punt uit tekst willen maken. Eerst gebruiken we de opdracht voor psql om functies te zoeken in relatie tot punten. Als u nog niet verbonden bent met de database address, doe dat dan nu. Voer dan uit:

\df *point*

Dit is de opdracht waar we naar zoeken: st_pointfromtext. Gebruik de pijl naar beneden om door de lijst te gaan en druk op Q om terug te gaan naar de shell van psql.

Probeer deze opdracht uit te voeren:

select st_pointfromtext('POINT(1 1)');

Resultaat:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

Drie dingen om te onthouden:

  • We definieerden een punt op de positie 1,1 (we gaan uit van EPSG:4326) met behulp van POINT(1 1),

  • We voerden een argument van sql uit, maar niet op een tabel, alleen maar op gegevens ingevoerd vanuit de SQL-prompt,

  • De resulterende rij heeft weinig betekenis.

De resulterende rij is in de indeling OGC, genaamd ‘Well Known Binary’ (WKB). We zullen in het volgende gedeelte in detail naar deze indeling kijken.

We kunnen een snelle scan doen door de functielijst naar iets dat tekst teruggeeft om de resultaten als tekst terug te krijgen:

\df *text

De query waar we nu naar zoeken is st_astext. Laten we die combineren met de vorige query:

select st_astext(st_pointfromtext('POINT(1 1)'));

Resultaat:

 st_astext
------------
  POINT(1 1)
  (1 row)

Hier voerden we de tekenreeks POINT(1,1) in, maakten daar een punt van met behulp van st_pointfromtext(), en maakten er weer een door mensen te lezen vorm van met st_astext(), wat ons onze originele tekenreeks teruggaf.

Een laatste voorbeeld voor we echt naar de details gaan van het gebruiken van PostGIS:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

Wat deed dat? Het maakte een buffer van 1 graad rondom ons punt, en gaf het resultaat als tekst terug.

16.1.6. Ruimtelijke referentiesystemen

In aanvulling op de functies van PostGIS, bevat de extensie een verzameling definities voor ruimtelijke referentiesystemen (SRS) zoals gedefinieerd door de European Petroleum Survey Group (EPSG). Deze worden gebruikt tijdens bewerkingen zoals conversies van coördinaten referentiesystemen (CRS).

We kunnen deze definities voor SRS inspecteren in onze database omdat zij zijn opgeslagen in normale databasetabellen.

Laten we eerst eens kijken naar het schema van de tabel door de volgende opdracht in te voeren bij de psql prompt:

\d spatial_ref_sys

Het resultaat zou dit moeten zijn:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

U kunt standaard SQL-queries gebruiken (zoals we hebben geleerd uit onze gedeelten ter introductie), om deze tabel t ebekijken en te bewerken - hoewel het geen goed idee is om records te bewerken of te verwijderen, tenzij u weet waar u mee bezig bent.

Eén SRID waarin u misschien geïnteresseerd bent is EPSG:4326 - het geografische / lat lon referentiesysteem dat de ellipsoïde WGS 84 gebruikt. Laten we er eens naar kijken:

select * from spatial_ref_sys where srid=4326;

Resultaat:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

De srtext is de definitie van de projectie in well known text (u zou dit kunnen herkennen van de bestanden .prj in uw verzameling shapefiles).

16.1.7. In Conclusion

U heeft nu functies van PostGIS geïnstalleerd in uw kopie van PostgreSQL. Hiermee bent u in staat gebruik te maken van de uitgebreide ruimtelijke functies van PostGIS.

16.1.8. What’s Next?

Vervolgens zult u leren hoe ruimtelijke objecten worden weergegeven in een database.