So installieren und konfigurieren Sie PostGIS unter Ubuntu 14.04

Einführung

PostGIS ist die räumliche Erweiterung der relationalen PostgreSQL-Datenbank. Mit PostGIS können Sie räumliche Daten mithilfe von Geometrie- und Geografiedatentypen speichern, räumliche Abfragen mit räumlichen Funktionen ausführen, um Fläche, Entfernung, Länge und Umfang zu bestimmen, und räumliche Indizes für Ihre Daten erstellen, um räumliche Abfragen zu beschleunigen.

In diesem Handbuch installieren Sie PostGIS, konfigurieren PostgreSQL für räumliche Daten, laden einige räumliche Objekte in Ihre Datenbank und führen eine grundlegende Abfrage durch.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

Schritt 1 - PostGIS installieren

PostGIS ist nicht in den Standard-Repositorys für Ubuntu enthalten, kann jedoch über UbuntuGIS abgerufen werden, ein externes Repository, das eine Reihe von Open-Source-GIS-Paketen verwaltet. Obwohl das PostGIS-Paket in diesem Repository nicht immer die neueste Version ist, ist es gut gepflegt und es ist nicht mehr erforderlich, PostGIS aus dem Quellcode zu kompilieren. Um PostGIS zu installieren, fügen wir dieses Repository zu unseren Quellen hinzu und installieren es dann mit unserem Paketmanager.

Melden Sie sich bei Ihrem Server mit Ihrem Nicht-Root-Benutzer an:

ssh @

Da wir Ubuntu 14.04 verwenden, benötigen wir den instabilen Zweig des Repositorys. Führen Sie den folgenden Befehl aus, um das Repository zu Ihren Quellen hinzuzufügen:

sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable

Sie sehen die folgende Ausgabe:

OutputUnstable releases of Ubuntu GIS packages. These releases are more bleeding edge and while generally they should work well, they dont receive the same amount of quality assurance as our stable releases do.
More info: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable
Press [ENTER] to continue or ctrl-c to cancel adding it

Drücken Sie + ENTER +, um die Warnung zu akzeptieren, und die Quelle wird hinzugefügt:

Outputgpg: keyring `/tmp/tmpintg192h/secring.gpg' created
gpg: keyring `/tmp/tmpintg192h/pubring.gpg' created
gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpintg192h/trustdb.gpg: trustdb created
gpg: key 314DF160: public key "Launchpad ubuntugis-stable" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

Bevor Sie PostGIS installieren können, aktualisieren Sie Ihre Liste der verfügbaren Pakete, damit die Pakete aus dem neuen Repository zur Liste hinzugefügt werden.

sudo apt-get update

Installieren Sie nach dem Update Ihrer Quellen PostGIS.

sudo apt-get install postgis

Geben Sie "+ Y +" ein, wenn Sie aufgefordert werden, PostGIS zusammen mit den erforderlichen Abhängigkeiten zu installieren.

Wir können uns nun mit PostgreSQL verbinden und PostGIS integrieren.

Schritt 2 - Aktivieren von räumlichen Merkmalen mit PostGIS

PostGIS-Funktionen müssen für jede Datenbank einzeln aktiviert werden, bevor Sie räumliche Daten speichern können. Wir werden mit der + test1 + Datenbank und dem + postgres + Benutzer von https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu- arbeiten. 14-04 [So installieren und verwenden Sie PostgreSQL unter Ubuntu 14.04] Tutorial, dem Sie gefolgt sind, bevor Sie dieses Tutorial gestartet haben.

Wechseln Sie mit dem Befehl + sudo + zum Benutzer + postgres +:

sudo -i -u postgres

Dann verbinden Sie sich mit der + test1 + Datenbank:

psql -d test1

Aktivieren Sie als Nächstes die PostGIS-Erweiterung für die Datenbank:

CREATE EXTENSION postgis;

Vergewissern wir uns, dass alles richtig funktioniert hat. Führen Sie den folgenden Befehl aus:

SELECT PostGIS_version();

Sie sehen diese Ausgabe:

Output            postgis_version
---------------------------------------
2.2 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

Wir sind fertig. Type

\q

um die SQL-Sitzung zu beenden und zur Eingabeaufforderung Ihres Terminals zurückzukehren.

Wechseln Sie dann zurück zu Ihrem Hauptbenutzerkonto:

su

Wir haben jetzt eine Datenbank mit PostGIS installiert, aber lassen Sie uns einige PostgreSQL-Einstellungen anpassen, um einen reibungslosen Ablauf zu gewährleisten.

Schritt 3 - Optimieren von PostgreSQL für GIS-Datenbankobjekte

PostgreSQL kann auf allen Systemen, von integrierten Systemen bis hin zu großen Unternehmensdatenbanken, ausgeführt werden, ist jedoch standardmäßig sehr konservativ konfiguriert. GIS-Datenbankobjekte sind im Vergleich zu Textdaten groß. Lassen Sie uns PostgreSQL so konfigurieren, dass es mit diesen Objekten besser funktioniert.

Wir konfigurieren PostgreSQL, indem wir die Datei + postgresql.conf + bearbeiten. Öffnen Sie diese Datei:

sudo nano /etc/postgresql/9.3/main/postgresql.conf

An dieser Datei müssen einige Änderungen vorgenommen werden, um Geodaten zu unterstützen.

Zunächst sollte "+ shared_buffers " auf etwa 75% des RAM Ihres Servers geändert werden. " 200MB " ist also ein guter Wert für einen Server mit 512MB RAM. Suchen Sie die Zeile ` shared_buffers +` und ändern Sie sie wie folgt:

/etc/postgresql/9.3/main/postgresql.conf

shared_buffers =                   # min 128kB

Suchen Sie als nächstes die Zeile, die mit + # work_mem + beginnt. Diese Zeile ist standardmäßig auskommentiert. Kommentieren Sie diese Zeile aus und erhöhen Sie ihren Wert auf "+ 16MB +":

/etc/postgresql/9.3/main/postgresql.conf

work_mem =                          # min 64kB

Suchen Sie dann "+ # maintenance_work_mem ", kommentieren Sie es aus und erhöhen Sie seinen Wert auf " 128MB +":

/etc/postgresql/9.3/main/postgresql.conf

maintenance_work_mem =             # min 1MB

Suchen Sie nach "+ checkpoint_segments ", entfernen Sie das Kommentarzeichen und ändern Sie den Wert in " 6 +":

/etc/postgresql/9.3/main/postgresql.conf

checkpoint_segments = 6         # in logfile segments, min 1, 16MB each

Suchen Sie abschließend nach "+ # random_page_cost ". Wenn Sie es finden, kommentieren Sie es aus und setzen Sie seinen Wert auf " 2.0 +":

/etc/postgresql/9.3/main/postgresql.conf

random_page_cost = 2.0                 # same scale as above

Drücken Sie zum Beenden die Tastenkombination "+ STRG + X ", gefolgt von " Y " und " ENTER +", um die Änderungen in dieser Datei zu speichern.

Weitere Informationen zu diesen Einstellungen finden Sie im Tutorial Tuning PostgreSQL for Spatial.

Starten Sie PostgreSQL neu, damit die folgenden Änderungen wirksam werden:

sudo service postgresql restart

Wir haben jetzt PostGIS installiert und PostgreSQL konfiguriert. Lassen Sie uns einige Daten in die Datenbank aufnehmen, damit wir sie testen können.

Schritt 4 - Laden von Geodaten

Laden Sie einige räumliche Daten in unsere Datenbank, damit wir uns mit den Tools und dem Verfahren zum Abrufen dieser Daten in PostgreSQL vertraut machen und später einige räumliche Abfragen durchführen können.

Natural Earth bietet eine großartige Basisdatenquelle für die ganze Welt in verschiedenen Maßstäben. Das Beste ist, dass diese Daten gemeinfrei sind.

Navigieren Sie zu Ihrem Basisordner und erstellen Sie einen neuen Ordner mit dem Namen "+ nedata +". In diesem Ordner werden die von uns heruntergeladenen Natural Earth-Daten gespeichert.

cd ~
mkdir nedata

Navigieren Sie dann in diesen neuen Ordner:

cd nedata

Wir werden den 1: 110m Länderdatensatz von Natural Earth herunterladen. Verwenden Sie "+ wget +", um diese Datei auf Ihren Server zu ziehen:

wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip

Die soeben heruntergeladene Datei ist komprimiert. Sie benötigen daher den Befehl "+ unzip +", den Sie über den Paket-Manager installieren können. Installieren Sie es mit dem folgenden Befehl:

sudo apt-get install unzip

Dann entpacke die Datei:

unzip ne_110m_admin_0_countries.zip

Sie haben jetzt sechs zusätzliche Dateien im Ordner:

  • + ne_110m_admin_0_countries.README.html

  • + ne_110m_admin_0_countries.VERSION.txt +

  • + ne_110m_admin_0_countries.dbf +

  • + ne_110m_admin_0_countries.prj +

  • + ne_110m_admin_0_countries.shp +

  • + ne_110m_admin_0_countries.shx +

Die Dateien * .dbf *, * .prj *, * .shp * und * .shp * bilden eine http://help.arcgis.com/de/arcgisdesktop/10.0/help/index.html#/Shapefile_file_extensions/ 005600000003000000 / [ShapeFile], ein beliebtes Geodatenformat, das von der GIS-Software verwendet wird. Wir können dies in unsere + test1 + Datenbank laden.

Dazu installieren wir GDAL, die Geospatial Data Abstraction Library. Bei der Installation von GDAL erhalten wir auch OGR (OpenGIS Simple Features Reference Implementation) und den Befehl "+ ogr2ogr +". Dies ist eine Vektordaten-Übersetzungsbibliothek, mit der wir das Shapefile in Daten übersetzen, die PostGIS verwenden kann.

Installieren Sie GDAL mit dem Paketmanager:

sudo apt-get install gdal-bin

Wechseln Sie nun wieder zum Benutzer + postgres +:

sudo -i -u postgres

Konvertieren Sie nun das Shapefile, das Sie von Natural Earth erhalten haben, mit + ogr2ogr + in eine PostGIS-Tabelle:

ogr2ogr -f PostgreSQL PG:dbname=test1 -progress -nlt PROMOTE_TO_MULTI /home//nedata/ne_110m_admin_0_countries.shp

Lassen Sie uns diesen Befehl aufschlüsseln und jede Option im Detail betrachten. Als erstes spezifizieren wir diese Option:

-f PostgreSQL

Dieser Schalter gibt an, dass der Ausgabedateityp eine PostgreSQL-Tabelle ist.

Als nächstes haben wir diese Option:

PG:dbname=test1

Dadurch wird die Verbindungszeichenfolge zu unserer Datenbank festgelegt. Wir geben hier nur den Datenbanknamen an. Wenn Sie jedoch einen anderen Benutzer, Host und Port verwenden möchten, können Sie die folgenden Optionen festlegen:

PG:"dbname='databasename' host='addr' port='5432' user='x' password='y'"

Als nächstes in unserer Liste der Optionen ist dies:

-progress

Diese Option zeigt einen Fortschrittsbalken an, damit wir den Prozess visualisieren können.

Als nächstes übergeben wir dieses Argument:

-nlt PROMOTE_TO_MULTI

PostgreSQL ist streng auf Objekttypen. Mit dem Befehl "+ ogr2ogr +" wird basierend auf den ersten Features in einer Datei eine Annahme über den Geometrietyp getroffen. Die Daten, die wir importieren, enthalten eine Mischung aus * Polygon * -Typen und mehrteiligen Polygonen oder * MultiPolygons *. Diese können nicht in dasselbe Feld eingefügt werden. Daher werden alle Features in mehrteilige Polygone umgewandelt, und das Geometriefeld wird als * MultiPolygon * erstellt.

Zuletzt geben wir den Pfad zur Eingabedatei an:

/home//nedata/ne_110m_admin_0_countries.shp

Besuchen Sie die Website ogr2ogr, um alle Optionen anzuzeigen.

Wenn Sie den vollständigen Befehl ausführen, wird die folgende Ausgabe angezeigt:

Output0...10...20...30...40...50...60...70...80...90...100 - done.

Wir können überprüfen, ob die Daten importiert wurden, indem wir den Befehl "+ ogrinfo +" verwenden. Führen Sie den folgenden Befehl aus:

ogrinfo -so PG:dbname=test1 ne_110m_admin_0_countries

Dies zeigt die folgende Ausgabe an:

OutputINFO: Open of `PG:dbname=test1'
     using driver `PostgreSQL' successful.

Layer name:
Geometry:
Feature Count: 177
Extent: (-180.000000, -90.000000) - (180.000000, 83.645130)
Layer SRS WKT:
GEOGCS["WGS 84",
   DATUM["WGS_1984",
       SPHEROID["WGS 84",6378137,298.257223563,
           AUTHORITY["EPSG","7030"]],
       AUTHORITY["EPSG","6326"]],
   PRIMEM["Greenwich",0,
       AUTHORITY["EPSG","8901"]],
   UNIT["degree",0.0174532925199433,
       AUTHORITY["EPSG","9122"]],
   AUTHORITY["EPSG","4326"]]
FID Column = ogc_fid
Geometry Column = wkb_geometry
scalerank: Integer (4.0)
featurecla: String (30.0)

...

region_wb: String (254.0)
name_len: Real (16.6)
long_len: Real (16.6)
abbrev_len: Real (16.6)
tiny: Real (16.6)
homepart: Real (16.6)

Wir haben jetzt räumliche Daten in unserer Datenbank. Schauen wir uns also an, wie wir sie zur Lösung von Problemen verwenden können.

Schritt 5 - Abfragen von räumlichen Daten

Angenommen, wir wurden gebeten, die zehn nördlichsten Länder der Welt zu finden. Mit PostGIS und den von uns importierten Daten ist das ganz einfach.

Loggen Sie sich wieder in die + test1 + Datenbank ein.

psql -d test1

Listen Sie die Tabellen in der Datenbank auf:

\dt

Dies gibt zwei Tabellen zurück:

Output                   List of relations
Schema |           Name            | Type  |  Owner
--------+---------------------------+-------+----------
public | ne_110m_admin_0_countries | table | postgres
public | spatial_ref_sys           | table | postgres
(2 rows)

Wir verwenden die Tabelle "+ ne_110m_admin_0_countries ", die die Daten enthält, die uns bei der Beantwortung unserer Frage helfen. Diese Tabelle enthält eine Spalte " admin " mit dem Namen des Landes und eine Spalte " wkb_gemoetry " mit geometrischen Daten. Wenn Sie alle Spalten in der Tabelle ` ne_110m_admin_0_countries +` anzeigen möchten, können Sie den folgenden Befehl ausführen:

\d ne_110m_admin_0_countries

Sie sehen die Spalten und ihre Datentypen. Der Datentyp der Spalte "+ wbk_geometry +" sieht folgendermaßen aus:

wkb_geometry | geometry(MultiPolygon,4326) |

Die Spalte "+ wbk_geometry " enthält Polygone. Wir haben es mit Ländern und ihren irregulären Grenzen zu tun, und daher hat jedes Land in unserer Datenbank keinen einzigen Wert für den Breitengrad. Um den Breitengrad für jedes Land zu ermitteln, ermitteln wir zunächst den Schwerpunkt jedes Landes mit der Funktion ` ST_Centroid ` von PostGIS. Dann extrahieren wir den Y-Wert des Schwerpunkts mit der Funktion " ST_Y +". Wir können diesen Wert als Breitengrad verwenden.

Hier ist die Abfrage, die wir ausführen:

SELECT admin, ST_Y(ST_Centroid(wkb_geometry)) as latitude
FROM ne_110m_admin_0_countries
ORDER BY latitude DESC
LIMIT 10;

Wir ordnen die Ergebnisse in absteigender Reihenfolge, da das nördlichste Land den höchsten Breitengrad hat.

Wenn Sie diese Abfrage ausführen, werden die zehn nördlichsten Länder angezeigt:

Output   admin   |    latitude
-----------+------------------
Greenland | 74.7704876939899
Norway    | 69.1568563971328
Iceland   |  65.074276335291
Finland   | 64.5040939185674
Sweden    | 62.8114849680803
Russia    | 61.9808407507127
Canada    | 61.4690761453491
Estonia   |  58.643695240707
Latvia    | 56.8071751342793
Denmark   | 56.0639344617945
(10 rows)

Nachdem Sie Ihre Antwort erhalten haben, können Sie die Datenbank mit beenden

\q

Weitere Informationen zu den verschiedenen PostGIS-Funktionen finden Sie im Abschnitt PostGIS Reference der PostGIS-Dokumentation.

Fazit

Sie haben jetzt eine räumlich aktivierte Datenbank, die für räumliche Abfragen konfiguriert ist, und Sie haben einige Daten in dieser Datenbank, die Sie für die weitere Untersuchung verwenden können.

Eine ausführlichere Anleitung zum Erstellen räumlicher Abfragen finden Sie unter Boundless PostGIS Tutorial.