16.1. Lesson: PostGIS-Einrichtung

Die Einrichtung von PostGIS Funktionen erlaubt den Zugriff auf räumliche Funktionen innerhalb von PostgreSQL.

Ziel dieser Lektion: Die Installation von räumlichen Funktionen und eine kurze Demonstration der Auswirkungen.

Bemerkung

Wir gehen in dieser Übung von der PostGIS Verison 2.1 aus. Die Installation und Konfiguration der Datenbank weicht für ältere Versionen ab, aber der Rest des hier vorgestellten funktioniert trotzdem. Sehen Sie sich zur Hilfe bei der Installation und zur Konfiguration der Datenbank die Dokumentation für Ihre Plattform an.

16.1.1. Installation unter Ubuntu

Postgis kann leicht mit Hilfe von apt installiert werden.

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

Wirklich, es ist nicht schwer…

Bemerkung

In Abhängigkeit von der Version Ubuntus und den eingestellten Repositories wird mit diesen Kommandos PostGIS 1.5 oder 2.x installiert. Sie können die installierte Version mit Hilfe der Abfrage select PostGIS_full_version(); unter psql oder einem anderen Tool herausfinden.

Um die aktuellste Version von PostGIS zu installieren, nutzen Sie die folgenden Kommandos.

$ 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. Installation unter Windows

Die Installation unter Windows ist etwas komplizierter aber nicht schwer. Beachten Sie, dass Sie online sein müssen, um das Postgis Paket zu installieren.

Besuchen Sie zuerst die Seite the download page.

Folgen Sie dann dieser Anleitung: this guide.

Weitere Informationen zur Installation unter Windows finden Sie hier: PostGIS website.

16.1.3. Installation auf anderen Plattformen

Unter PostGIS website download findet man Informationen zur Installation auf anderen Plattformen darunter MacOS und andere Linux-Distributionen.

16.1.4. Konfiguration von Datenbanken zur Nutzung von PostGIS

Nachdem PostGIS installiert wurde, muss Ihre Datenbank zur Nutzung der Erweiterungen konfiguriert werden. Wenn Sie PostGIS in der Version > 2.0 installiert haben, ist das mit dem folgenden Kommando, hier für die Adressendatenbank aus der vorherigen Übung, ganz einfach.

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

Bemerkung

Wenn Sie PostGIS 1.5 und eine Version von PostgreSQL kleiner als 9.1 verwenden, müssen Sie eine andere Vorgehensweise wählen, um die Postgis-Erweiterungen für Ihre Datenbank zu installieren. Bitte beachten Sie die PostGIS-Dokumentation für Anweisungen, wie dies zu tun ist.

16.1.5. Die installierten PostGIS Funktionen

PostGIS kann man als eine Sammlung von in der Datenbank integrierten Funktionen sehen, die die Kernfunktionalität von PostgreSQL für den Umgang mit räumlichen Daten erweitern. Unter ‚Umgang mit räumlichen Daten‘ verstehen wir das speichern, abrufen, abfragen und verändern von Daten. Um das zu erreichen, werden eine Reihe von Funktionen in der Datenbank installiert.

Unsere PostgreSQL address Datenbank ist jetzt dank PostGIS für räumliche Daten vorbereitet. Wir werden das in den kommenden Kapiteln noch vertiefen, aber hier erst einmal eine kleine Kostprobe. Sagen wir, wir wollen einen Punkt aus einem Text erstellen. Wir verwenden zuerst das psql Kommando, um Funktionen mit Bezug zu Punkten zu finden. Wenn Sie noch nicht mit der Datenbank address verbunden sind, stellen Sie die Verbindung jetzt her. Starten sie dann:

\df *point*

Dieses Kommando haben wir gesucht: st_pointfromtext. Benutzen Sie die Pfeil-nach-unten-Taste um die Liste durchzublättern. Drücken Sie danach Q, um zur psql Kommandozeile zurückzukehren.

Probieren Sie dieses Kommando:

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

Ergebnis:

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

Drei wichtige Dinge:

  • Mit Hilfe von POINT(1 1) haben wir einen Punkt an der Position 1,1 (Annahme: EPSG:4326) definiert,

  • Wir haben eine SQL Anweisung ausgeführt, aber nicht an einer Tabelle, sondern nur über Daten, die in der Kommandozeile eingegeben wurden,

  • Die Ausgabezeile ergibt nicht viel Sinn.

Die Ausgabe erfolgte im OGC Format ‚Well Known Binary‘ (WKB). Wir werden uns dieses Format im nächsten Kapitel genauer ansehen.

Um die Ergebnisse in Textform zu sehen, durchsuchen wir kurz die Funktionsliste nach etwas, das Text ausgibt:

\df *text

Die Abfrage nach der wir suchen ist st_astext. Wir kombinieren sie mit der vorherigen Abfrage:

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

Ergebnis:

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

Wir gaben die Zeichenkette POINT(1,1) ein, wandelten sie mit Hilfe von st_pointfromtext() in einen Punkt, um sie anschließend mit Hilfe von st_astext() zurück in eine vom Menschen lesbare Form zu bringen, d.h. in unsere anfängliche Zeichenkette.

Ein letztes Beispiel bevor wir uns eingehend mit PostGIS beschäftigen:

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

Was passiert hier? Es wird ein Puffer von 1 Grad um unseren Punkt erstellt und das Ergebnis als Text ausgegeben.

16.1.6. Räumliche Bezugssysteme

Zusätzlich zu den PostGIS Funktionen enthält die Erweiterung eine Sammlung an Definitionen von räumlichen Bezugssystemen (RBS) entsprechend der European Petroleum Survey Group (EPSG). Sie werden für Operationen wie z.B. Transformation von Koordinatenbezugssystemen (KBS) verwendet.

Wir können die RBS Definitionen untersuchen. Sie sind in normalen Datenbanktabellen gespeichert.

Lassen Sie uns zuerst das Schema der Tabelle mit Hilfe des folgenden Kommandos am psql Prompt ansehen:

\d spatial_ref_sys

Das Ergebnis sollte wie folgt aussehen:

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)

Man kann normale SQL Abfragen (die wir in den einleitenden Kapiteln gelernt haben) verwenden, um die Tabelle anzusehen oder zu verändern. Es ist allerdings keine gute Idee Datensätze in der Tabelle zu verändern oder zu löschen, außer man weiß genau was man tut.

Eine interessante SRID ist EPSG:4326 - das geographische Referenzsystem mit Längen- und Breitengraden, das den WGS 84 Ellipsoid verwendet. Sehen wir es uns genauer an:

select * from spatial_ref_sys where srid=4326;

Ergebnis:

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

srtext enthält die Definition der Projektion im well known text format (ähnlich der .prj Datei bei shape-Dateien).

16.1.7. In Conclusion

Wir haben nun PostGIS Funktionen in unserer PostgreSQL Datenbank installiert. Damit sind wir in der Lage die umfangreichen räumlichen Funktionen von PostGIS zu nutzen.

16.1.8. What’s Next?

Als nächstes lernen wir, wie räumliche Objekte in einer Datenbank abgebildet werden.