terrestris GmbH & Co. KG

GeoServer in action

Inhalt

Vorheriges Thema

3.1. Katalog auslesen

Nächstes Thema

3.3. Katalogeinträge editieren

3.2. Katalogeinträge erzeugen

Nachdem wir die REST-API kennengelernt und über die GET-Operation einige Informationen unseres GeoServers abgerufen haben, werden wir im nächsten Schritt einen neuen Arbeitsbereich inklusive eines Datenspeichers und Feature Types über REST anlegen.

3.2.1. Arbeitsbereich erstellen

Öffnen Sie das Terminal (falls noch nicht geschehen) und geben Sie den folgenden Befehl zum Erstellen eines neuen Workspaces namens fossgis ein:

curl \
  -v \
  -u admin:geoserver \
  -XPOST \
  -H "Content-type: text/xml" \
  -d "<workspace>
        <name>fossgis</name>
      </workspace>" \
  http://localhost:8082/geoserver/rest/workspaces

Der obige Aufruf unterscheidet sich in zwei wesentlichen Punkten von den bisherigen Read-Operationen: Wir nutzen für das Erstellen einer neuen Ressource im Gegensatz zur HTTP-Operation GET die Operation POST und schicken einen XML Content <workspace>...</workspace> an eine eindeutige URL der REST-API. Die Adresse haben wir durch die bisherigen Schritte identifizieren können. Nach Aufruf des Befehls sollte im Terminal folgende Ausgabe erscheinen:

* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8082 (#0)
* Server auth using Basic with user 'admin'
> POST /geoserver/rest/workspaces HTTP/1.1
> Authorization: Basic YWRtaW46Z2Vvc2VydmVy
> User-Agent: curl/7.35.0
> Host: localhost:8082
> Accept: */*
> Content-type: text/xml
> Content-Length: 69
>
* upload completely sent off: 69 out of 69 bytes
< HTTP/1.1 201 Created
< Date: Tue, 24 Feb 2015 10:03:56 GMT
< Location: http://localhost:8082/geoserver/rest/workspaces/fossgis
* Server Noelios-Restlet-Engine/1.0..8 is not blacklisted
< Server: Noelios-Restlet-Engine/1.0..8
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
An dieser Stelle sind zwei Informationen für uns entscheidend:
  1. HTTP/1.1 201 Created: Der Aufruf wurde erfolgreich bearbeitet und die Ressource erstellt.
  2. http://localhost:8082/geoserver/rest/workspaces/fossgis: Die (eindeutige) URL unseres neuen Arbeitsbereichs.

Wir können nun überprüfen, ob der Arbeitsbereich tatsächlich angelegt wurde, indem wir

  • klassisch die GeoServer GUI öffnen und dort über den Menüeintrag Arbeitsbereiche alle vorhandenen Arbeitsbereiche auflisten oder

  • über die REST-API eine Auflistung aller Arbeitsbereiche anfordern (im XML -Format):

    curl \
      -v \
      -u admin:geoserver \
      -XGET \
      -H "Accept: text/xml" \
      http://localhost:8082/geoserver/rest/workspaces
    

In beiden Fällen werden wir erkennen, dass ein neuer Arbeitsbereich namens fossgis vorhanden ist.

3.2.2. Datenspeicher erstellen

Nachdem wir einen neuen Arbeitsbereich erstellt haben, werden wir diesem einen neuen Datenspeicher hinzufügen. Der folgende Befehl erzeugt (Operation POST!) einen neuen PostGIS Datenspeicher (dbtype) mit den Namen natural_earth und den folgenden DB-Verbindungsparametern:

  • Hostadresse: localhost (host)
  • Hostport: 5432 (port)
  • Datenbankname: natural_earth2 (database)
  • Benutzer: user (user)
  • Passwort: user (passwd)
curl \
  -v \
  -u admin:geoserver \
  -XPOST \
  -H "Content-type: text/xml" \
  -d "<dataStore>
        <name>natural_earth</name>
          <connectionParameters>
            <host>localhost</host>
            <port>5432</port>
            <database>natural_earth2</database>
            <user>user</user>
            <passwd>user</passwd>
            <dbtype>postgis</dbtype>
          </connectionParameters>
      </dataStore>" \
  http://localhost:8082/geoserver/rest/workspaces/fossgis/datastores

Bemerkung

Die hier genutzte Datenbank natural_earth2 ist auf der OSGeoLive vorinstalliert und entstammt dem Natural Earth Projekt. Weiterführende Informationen zum Datensatz sowie die Daten selbst finden Sie unter http://www.naturalearthdata.com/.

Die erfolgreiche Anlage des Datenspeichers wird uns erneut über den Statuscode HTTP/1.1 201 Created bestätigt und kann wiederum über die GUI oder das Auslesen über die API kontrolliert werden:

curl \
  -v \
  -u admin:geoserver \
  -XGET \
  -H "Accept: text/xml" \
  http://localhost:8082/geoserver/rest/workspaces/fossgis/datastores/natural_earth.xml

Die Antwort sollte wie folgt aussehen:

<dataStore>
  <name>natural_earth</name>
  <type>PostGIS</type>
  <enabled>true</enabled>
  <workspace>
    <name>fossgis</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8082/geoserver/rest/workspaces/fossgis.xml" type="application/xml"/>
  </workspace>
  <connectionParameters>
    <entry key="port">5432</entry>
    <entry key="passwd">crypt1:36+tgAgu2EC0mGyPR7MNkQ==</entry>
    <entry key="dbtype">postgis</entry>
    <entry key="host">localhost</entry>
    <entry key="user">user</entry>
    <entry key="database">natural_earth2</entry>
    <entry key="namespace">http://fossgis</entry>
  </connectionParameters>
  <__default>false</__default>
  <featureTypes>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8082/geoserver/rest/workspaces/fossgis/datastores/natural_earth/featuretypes.xml" type="application/xml"/>
  </featureTypes>
</dataStore>

3.2.3. Stil erstellen und hochladen

Nachdem Arbeitsbereich und Datenspeicher angelegt wurden, können wir im nächsten Schritt einen neuen Stil mit dem Namen states_provinces im Arbeitsbereich fossgis anlegen, der die Stildatei (SLD, Styled Layer Descriptor) states_provinces.sld assoziiert. Führen Sie dazu zunächst den folgenden Befehl aus:

curl \
  -v \
  -u admin:geoserver \
  -XPOST \
  -H "Content-type: text/xml" \
  -d "<style>
        <name>states_provinces</name>
        <filename>states_provinces.sld</filename>
      </style>" \
  http://localhost:8082/geoserver/rest/workspaces/fossgis/styles

Erneut wird uns die erfolgreiche Anlage mit dem Status HTTP/1.1 201 Created bestätigt und wir prüfen dies wiederum über die GUI

Nachdem die Ressource im GeoServer publiziert wurde, können wir über REST den Stil selbst (states_provinces.sld) an die Ressource binden. Hierzu können wir die HTTP-Operation PUT nutzen, um eine Datei auf den Server zu kopieren:

curl \
  -v \
  -u admin:geoserver \
  -XPUT \
  -H "Content-type: application/vnd.ogc.sld+xml" \
  -d @states_provinces.sld \
  http://localhost:8082/geoserver/rest/workspaces/fossgis/styles/states_provinces

Wichtig: Der obige Befehl setzt zwei Dinge voraus:

  1. Es existiert eine SLD-Datei mit dem Namen states_provinces.sld und einem validen SLD Inhalt. Die entsprechende Datei kann hier heruntergeladen werden.
  2. Der Pfad zur Datei states_provinces.sld ist korrekt. Im obigen Beispiel liegt die Datei im gleichen Ordner aus dem cURL aufgerufen wurde. Wechseln Sie also ggf. im Terminal zum Ordner der Datei oder passen Sie den cURL-Aufruf an.

War der Befehl erfolgreich, enthält die Antwort im Terminal den Teilstring < HTTP/1.1 200 OK.

3.2.4. Layer anlegen

Der nächste logische Schritt ist das Anlegen eines Layers auf Basis einer Geometrietabelle aus unserem neuen Datenspeichers natural_earth. Als Beispiel werden wir die Tabelle ne_10m_admin_1_states_provinces_shp mit dem folgenden Befehl im Arbeitsbereich fossgis veröffentlichen:

curl \
  -v \
  -u admin:geoserver \
  -XPOST \
  -H "Content-type: text/xml" \
  -d "<featureType>
        <name>states_provinces</name>
        <nativeName>ne_10m_admin_1_states_provinces_shp</nativeName>
        <nativeCRS>EPSG:4326</nativeCRS>
        <enabled>true</enabled>
      </featureType>" \
  http://localhost:8082/geoserver/rest/workspaces/fossgis/datastores/natural_earth/featuretypes

Und erneut begrüßt uns nach erfolgreichem Hinzufügen der Ressource die Statusmeldung HTTP/1.1 201 Created und selbstverständlich können wir an dieser Stelle erneut das Ergebnis über die GUI oder die REST-API begutachten:

curl \
  -v \
  -u admin:geoserver \
  -XGET \
  http://localhost:8082/geoserver/rest/workspaces/fossgis/datastores/natural_earth/featuretypes/states_provinces.xml

Die XML-Repräsentation des Layers ist demnach wie folgt (gekürzt):

<featureType>
  <name>states_provinces</name>
  <nativeName>ne_10m_admin_1_states_provinces_shp</nativeName>
  <namespace>
    <name>fossgis</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8082/geoserver/rest/namespaces/fossgis.xml" type="application/xml"/>
  </namespace>
  <title>ne_10m_admin_1_states_provinces_shp</title>
  <keywords>
    <string>ne_10m_admin_1_states_provinces_shp</string>
    <string>features</string>
  </keywords>
  <nativeCRS>
    GEOGCS["WGS 84",
      DATUM["World Geodetic System 1984",
      SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
      AUTHORITY["EPSG","6326"]
    ],
    PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
    UNIT["degree", 0.017453292519943295],
    AXIS["Geodetic longitude", EAST],
    AXIS["Geodetic latitude", NORTH],
    AUTHORITY["EPSG","4326"]]
  </nativeCRS>
  <srs>EPSG:4326</srs>
  <nativeBoundingBox>
    <minx>-181.800003051758</minx>
    <maxx>181.800018310547</maxx>
    <miny>-60.1882858276367</miny>
    <maxy>84.3496398925781</maxy>
    <crs>EPSG:4326</crs>
  </nativeBoundingBox>
  <latLonBoundingBox>
    <minx>-181.800003051758</minx>
    <maxx>181.800018310547</maxx>
    <miny>-60.1882858276367</miny>
    <maxy>84.3496398925781</maxy>
    <crs>GEOGCS[&quot;WGS84(DD)&quot;,
  DATUM[&quot;WGS84&quot;,
    SPHEROID[&quot;WGS84&quot;, 6378137.0, 298.257223563]],
  PRIMEM[&quot;Greenwich&quot;, 0.0],
  UNIT[&quot;degree&quot;, 0.017453292519943295],
  AXIS[&quot;Geodetic longitude&quot;, EAST],
  AXIS[&quot;Geodetic latitude&quot;, NORTH]]</crs>
  </latLonBoundingBox>
  <projectionPolicy>FORCE_DECLARED</projectionPolicy>
  <enabled>true</enabled>
  <store class="dataStore">
    <name>natural_earth</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8082/geoserver/rest/workspaces/fossgis/datastores/natural_earth.xml" type="application/xml"/>
  </store>
  <maxFeatures>0</maxFeatures>
  <numDecimals>0</numDecimals>
  <overridingServiceSRS>false</overridingServiceSRS>
  <circularArcPresent>false</circularArcPresent>
  <attributes>
    <attribute>
      <name>adm1_code</name>
      <minOccurs>0</minOccurs>
      <maxOccurs>1</maxOccurs>
      <nillable>true</nillable>
      <binding>java.lang.String</binding>
    </attribute>

    (...)

    <attribute>
      <name>the_geom</name>
      <minOccurs>0</minOccurs>
      <maxOccurs>1</maxOccurs>
      <nillable>true</nillable>
      <binding>com.vividsolutions.jts.geom.MultiPolygon</binding>
    </attribute>
  </attributes>
<featureType>

Bereits zu diesem Zeitpunkt können wir den Layer über die Layervorschau des GeoServers oder über einen beliebigen Client (z.B. QGIS) aufrufen. Öffnen Sie hierzu die Weboberfläche vom GeoServer und rufen Sie dort die Layervorschau (layer_preview_icon) auf. Öffnen Sie dort den Layer in der interaktiven Vorschau durch einen Klick auf OpenLayers (openlayers_icon). Die Startansicht der Vorschau sollte dabei in etwa der folgenden Abbildung entsprechen.

../_images/create1.png

Hallo Welt!

3.2.5. Layerstil zuordnen

Vergessen wir jedoch nicht unseren Layerstil states_provinces aus den vorherigen Kapiteln, den wir im Folgenden dem Layer states_provinces zuweisen wollen:

curl \
  -v \
  -u admin:geoserver \
  -XPUT \
  -H "Content-type: text/xml" \
  -d "<layer>
        <defaultStyle>
          <name>states_provinces</name>
          <workspace>fossgis</workspace>
        </defaultStyle>
      </layer>" \
  http://localhost:8082/geoserver/rest/layers/fossgis:states_provinces

Bestätigt durch den Status HTTP/1.1 200 OK können wir die Layervorschau erneut aufrufen und werden sehen, dass der neue Stil (hellgraue Landesflächen, dunkelgraue Landesgrenzen und Beschriftung) dem Layer zugeordnet wurde:

../_images/create2.png

Layer states_provinces mit zugehörigem Stil und zentriert auf Nordrhein- Westfalen

Herzlichen Glückwunsch! Sie haben mit nur wenigen Befehlen im Terminal einen Layer im GeoServer angelegt!

Lernen wir nun im nächsten Kapitel das Editieren von Katalogkonfigurationen.