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

We will assume the use of PostGIS version 2.1 or newer in this exercise. The installation and database configuration are different for older versions, but the rest of this material in this module will still work. Consult the documentation for your platform for help with installation and database configuration.

16.1.1. Installation unter Ubuntu

Postgis kann leicht mit Hilfe von apt installiert werden.

$ sudo apt install postgresql
$ sudo apt install postgis

Wirklich, es ist nicht schwer…

Bemerkung

The exact versions that will be installed depend on which version of Ubuntu you are using and which repositories you have configured. After installing you can check the version by issuing a select PostGIS_full_version(); query with psql or another tool.

To install a specific version (eg, PostgreSQL version 13 and PostGIS 3), you can use the following commands.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. Installation unter Windows

Installing on Windows can be done from binary packages using a normal Windows installation dialogs.

First Visit the download page. Then follow this guide.

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

16.1.3. Installation auf anderen Plattformen

The PostGIS website download has information about installing on other platforms including macOS and on other Linux distributions

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

Depending on your version, you could find more instructions on how to spatially enable a database at https://postgis.net/docs/postgis_administration.html#create_spatial_db.

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.