GeoServer in action

Fortgeschrittene Möglichkeiten beim Einsatz des Geoservers


Nils Bühner
buehner@terrestris.de

terrestris GmbH & Co KG

Über uns




  • Informatiker
  • Java, Spring, Hibernate, Maven, Webtechnologien
  • Entwickler bei terrestris

  • OpenSource GIS aus Bonn
  • Projekte, Support, Schulung
  • Beratung, Planung, Implementierung & Wartung

GeoServer

  • Java-basierter Server für Geodaten
  • Standards des OGC
    (z.B. WMS, WFS(-T), WPS)
  • flexibel und erweiterbar
  • gute Dokumentation (user/dev)




  • Konfiguration über Weboberfläche
  • Arbeitsbereiche, Datenquellen, Layer, Stile
  • OGC-Dienste
  • Monitoring
    (Serverstatus, Logs)
  • erweiterte Features
    (z.B. GeoWebCache)

Fragestellungen


Wie gehe ich mit dem GeoServer-Quellcode um?


Wie kann ich den GeoServer um Funktionalität erweitern?


Lässt sich der GeoServer auch programmatisch konfigurieren?


Wie kann der GeoServer für den Produktivbetrieb optimiert werden?

Technologien


maven.apache.org

  • standardisierte Verwaltung von (Java-)Programmen
  • Lebenszyklus der Software
  • Validierung, Kompilierung, Paketierung, Installation und mehr
git-scm.com

  • verteilte Versionsverwaltung von Dateien
  • nicht zwingend benötigt, aber sicher sinnvoll

Quellcode auschecken

Mit git

							git clone https://github.com/geoserver/geoserver.git
						

In ein Verzeichnis mit einer pom.xml
(Maven-Konfiguration) wechseln, z.B. zur INSPIRE-Erweiterung

							cd geoserver/src/extension/inspire
						

Maven benutzen


						mvn package
					
paketiert den Code zu einer .jar-Datei im Unterordner target/

Beinhaltet die Validierung, Kompilierung und das Testen des Codes.

Schritte können auch einzeln ausgeführt werden, z.B.

						mvn compile
					
Der Verzicht auf Tests beschleunigt den Prozess:

						mvn package -DskipTests
					

Erweiterungen


geoserver.org/release/stable

Erweiterungen installieren

  1. Servlet-Container (z.B. Tomcat) stoppen
  2. .jar-Artefakt(e) in das WEB-INF/lib-Verzeichnis des GeoServers kopieren
  3. Servlet-Container starten
  4. Prüfen, ob Erweiterung vorhanden


Zwischenbilanz


Wie gehe ich mit dem GeoServer-Quellcode um?


Wie kann ich den GeoServer um Funktionalität erweitern?


Lässt sich der GeoServer auch programmatisch konfigurieren?


Wie kann der GeoServer für den Produktivbetrieb optimiert werden?

REST

(REpresentational State Transfer)
  • Adressierbarkeit
    Jede Ressource hat eine eindeutige URI
  • Zustandslosigkeit
    keine Zustandsinformationen; jede REST-Anfrage enthält alle Informationen, die zum Verständnis von Client/Server nötig sind
  • Repräsentation
    Jede Ressource kann in unterschiedlichen Repräsentationen (z.B. im HTML-, JSON- und XML-Format) existieren
  • Standardmethoden
    Der Zugriff auf jede Ressource muss über standardisierte Methoden erlangt werden können

REST mit HTTP

METHODE BESCHREIBUNG BEISPIEL
POST Erstelle eine Ressource (CREATE) Layer anlegen
GET Lese eine Ressource (READ) Arbeitsbereiche auslesen
PUT Aktualisiere eine Ressource (UPDATE) Layer aktualisieren
DELETE Entferne eine Ressource (DELETE) Layer entfernen

REST beim GeoServer

Umsetzung per HTTP mit Basis-URL:
http://my/geoserver/rest
  • Abruf in verschiedenen Formaten (Beispiel Arbeitsbereiche)
    • HTML (Standard):
      http://my/geoserver/rest/workspaces.html
    • JSON:
      http://my/geoserver/rest/workspaces.json
    • XML:
      http://my/geoserver/rest/workspaces.xml

Dokumentation: http://docs.geoserver.org/stable/en/user/rest/

Layer anlegen

Request:

curl \
  -v \
  -u admin:geoserver \
  -XPOST \
  -H "Content-type: text/xml" \
  -d "
        myft
        myftsource
        EPSG:4326
        true
      " \
  http://my/geoserver/rest/workspaces/myws/datastores/mydata/featuretypes
					
Response:

HTTP/1.1 201 Created
					

Arbeitsbereiche auslesen

Request:

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


  
    myws
    
  

					

				

Layer aktualisieren

Request:

curl \
  -v \
  -u admin:geoserver \
  -XPUT \
  -H "Content-type: text/xml" \
  -d "
        true
        EPSG:900913
        REPROJECT_TO_DECLARED
      " \
  http://my/geoserver/rest/workspaces/myws/datastores/myds/featuretypes/myft
					
Response:

HTTP/1.1 200 OK
					

Layer entfernen

Request:

curl \
  -v \
  -u admin:geoserver \
  -XDELETE \
  http://my/geoserver/rest/workspaces/myws/datastores/myds/featuretypes/myft?recurse=true
					
Response:

HTTP/1.1 200 OK
					

GeoServer optimieren

Wie kann der GeoServer für den Produktivbetrieb optimiert werden?

  • Integrierter GeoWebCache (GWC)
  • Einstellungen in der GeoServer-GUI
  • Java Virtual Machine (JVM) tunen
  • GeoServer-Datenverzeichnis auslagern


Schönes Whitepaper:
http://boundlessgeo.com/whitepaper/geoserver-production-2/

GeoWebCache (GWC)

  • Proxy zwischen Client und GeoServer
  • Kacheln einmalig berechnen, um Prozessierungszeit sparen
  • Verfügt ebenfalls über ReST-Schnittstelle


http://docs.geoserver.org/stable/en/user/geowebcache/

GeoWebCache (GWC)

Zwei Möglichkeiten zur Berechnung von Kartenkacheln:

  • On-The-Fly-Prozessierung
    • Berechnung (und Ablage im Cache) nur beim ersten Aufruf

  • Vorberechnung von Kartenkacheln
    • Die Kacheln eines Layers werden in definierten Zoomstufen und BBOX entlang eines Gridsets vorberechnet und abgelegt.

Quelle: http://geowebcache.org

GeoWebCache (GWC)

Einstellungen in der GUI

Java Virtual Machine (JVM)

JAVA_OPTS in Abhängigkeit der Systemumgebung setzen, z.B.

						JAVA_OPTS="-server -Xms2g -Xmx2g -XX:MaxPermSize=256m -XX:+UseParallelGC -Dfile.encoding=UTF-8"
					
PARAMETER BESCHREIBUNG BEISPIEL
-server Für Server optimierte JVM
-Xms Anfangsgröße des Java-Heap-Speichers. Empfehlung: 2-4GB -Xms2g
-Xmx Maximale Größe des Java-Heap-Speichers. Evtl: Xms=Xmx -Xmx2g
-XX:PermSize Anfangsgröße des Speichers für Objektgenerierung
(256m reichen)
-XX:PermSize=256m
-XX:MaxPermSize Maximalgröße des Speichers für Objektgenerierung
(256m reichen)
-XX:MaxPermSize=256m

Java Virtual Machine (JVM)

PARAMETER BESCHREIBUNG BEISPIEL
-Djavax.servlet.request.encoding Encoding eingehender Anfragen
(Standard: ISO 8559-1)
-Djavax.servlet.request.encoding=
UTF-8
-Djavax.servlet.response.encoding Kodierung ausgehender Antworten
(Standard: ISO 8559-1)
-Djavax.servlet.response.encoding=
UTF-8
-Dfile.encoding Zeichenkodierung beim Umgang mit statischen Dateien (Standard: Default des Betriebssystems) -Dfile.encoding=UTF-8
-XX:+UseParallelGC Garbage Collection für Mehrkern-Systeme (siehe hier)
-XX:+UseParallelOldGC s.o.

GeoServer-Datenverzeichnis

  • Das Datenverzeichnis liegt standardmäßig "im" GeoServer.
  • Es ist sinnvoll das Verzeichnis auszulagern, etwa für GS-Updates.
  • Umgebungsvariable GEOSERVER_DATA_DIR muss gesetzt werden.
  • Für den GWC kann auch GEOWEBCACHE_CACHE_DIR gesetzt werden.

Fazit

Wie gehe ich mit dem GeoServer-Quellcode um?

Maven und git

Wie kann ich den GeoServer um Funktionalität erweitern?

JAR-Artefakte ins WEB-INF/lib des GS

Lässt sich der GeoServer auch programmatisch konfigurieren?

ReST-API

Wie kann der GeoServer für den Produktivbetrieb optimiert werden?

GUI, GWC, JVM...

Vielen Dank für die Aufmerksamkeit!

Fragen?

Workshop: http://workshops.terrestris.de

Vortrag: http://rawgit.com/buehner/geoserver-in-action/master/index.html

Impressum