PostGIS-Einrichtung

Siehe auch: PostGIS-Manual

Die empfohlene Vorgehensweise ist, eine neue Template-Datenbank mit den PostGIS-Funktionen anzulegen. Wir wechseln dazu als postgres-user ins Verzeichnis, in dem die Installationsdateien von PostGIS liegen, und arbeiten von dort:

cd /usr/share/postgresql/9.1/contrib/postgis-1.5
psql

create database gis_template;
\connect gis_template;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO gis;
ALTER DEFAULT PRIVILEGES GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO gis;
ALTER DEFAULT PRIVILEGES GRANT EXECUTE ON FUNCTIONS TO gis;
\i postgis.sql
\i spatial_ref_sys.sql
\i ../postgis_comments.sql
create extension hstore;

\connect bewirkt, daß man von der standardmäßig ausgewählten Datenbank “postgres” zur neu angelegten Datenbank “gis_template” wechselt. \i bedeutet include, also das Einlesen und Ausführen einer Datei, die SQL-Anweisungen enthält.

Wir binden auch noch die hstore-Extension ein, die PostgreSQL erlaubt, alle Tags der OpenStreetMap-Objekte zu speichern.

Nun haben wir eine “Vorlage-Datenbank” mit allen PostGIS-Prozeduren, aber ohne Daten. Jetzt können wir die echte GIS-Datenbank anlegen, mit der wir dann arbeiten werden. Immer noch in “psql”:

create database gis with template gis_template owner gis;
\l+

Die gis-Datenbank mit dem User gis als Besitzer wurde als Kopie von gis_template angelegt. \l+ listet die Datenbanken auf, man sieht hier die neue Datenbank mit gis als Owner.

In den meisten Fällen möchte man den Datenbankserver noch so konfigurieren, daß er im lokalen Netzwerk erreichbar ist; standardmäßig erlaubt er nur Zugriffe vom gleichen Computer.

Als root ändert man dafür in /etc/postgresql/9.1/main/postgresql.conf:

#listen_addresses = 'localhost'

in

listen_addresses = '*'

Also das Kommentarzeichen am Anfang der Zeile wegnehmen, und localhost in * ändern.

Dann wird in /etc/postgresql/9.1/main/pg_hba.conf noch der Zugriff aus dem eigenen Netzwerk erlaubt, indem man am Ende der Datei eine Zeile hinzufügt:

host    all       all      192.168.0.0/24       md5

(Statt 192.168.0 das eigene private Netzwerk einsetzen.)

Nach einem “service postgresql restart” oder “/etc/init.d/postgresql restart” ist PostgreSQL im eigenen Netzwerk erreichbar, man kann also auch von anderen Computern aus in der Datenbank arbeiten.

Standard-Tabellen in PostGIS-Datenbanken

Wenn wir uns in der neu angelegten gis-Datenbank umschauen, werden wir entdecken, daß neben vielen Funktionen auch zwei Tabellen angelegt sind:

Unsere Daten werden wir in neuen Tabellen speichern. In jeder Tabelle kann nur jeweils eine Art von Geodaten (Punkt, Linie, Fläche) stehen. Das hört sich nach einer Einschränkung an, ist aber ganz vernünftig: Auf die verschiedenen Geometrie-Arten können nämlich unterschiedliche Operationen angewendet werden, und es ist nur konsequent, wenn das Datenbanksystem von homogenen Daten ausgehen kann.

Damit Werkzeuge, die aus PostGIS lesen, wissen, welche Struktur diese Daten haben und wo sie zu finden sind, wird in geometry_columns jeweils auf die Tabelle und das Feld verwiesen.

Es ist empfehlenswert, das Feld mit den Geodaten einheitlich zu benennen. Ich nenne es immer “geo”.

Weiter: Einlesen der OpenStreetMap-Daten