Geospatial – News

Mapserver und GDAL/OGR mit PROJ4.8.0 und dem neuen Schweizer Referenzsystem

6 November 2015

EINLEITUNG

Vor einigen Wochen haben wir in einem Artikel die Neuheiten der Programmbibliothek PROJ4 vorgestellt: die Möglichkeit Daten vom alten Referenzsystem CH1903/LV03 ins neue (CH1903+/LV95) mithilfe eines Transformationsgrids von Swisstopo zu projizieren.

Dieser Artikel geht nun auf die technischen Details ein. Wir werden beschreiben, wie dieses Projektionsgrid mit den geläufigsten Open Source Tools gebraucht werden kann.Dieser Artikel hat nicht zum Ziel, die interne Funktionsfähigkeit der Programmbibliotheken und der Open Source Anwendungen zu beschreiben, ebenfalls wird das Referenzsystem nicht ausführlich behandelt werden.

INSTALLATION

Um das Transformationsgrid von Swisstopo zu benutzen, wird eine aktuelle Version von PROJ4 (<= 4.8.0) und das Grid von Swisstopo benötigt. Die Datei CH enthält die Projektionsdefinition mit der Angabe des Transformationsgrids, und eine Beschreibung des Vorgehens im Header der Datei.

Das Transformationsgrid muss heruntergeladen und in ein Verzeichnis, welches von libproj gelesen wird, kopiert werden. Mehrere Möglichkeiten stehen hierbei zur Verfügung:

  • Kopieren der Datei in den Ordner /usr/share/proj/ (Standardinstallation unter Linux)
  • Kopieren in irgendeinen Ordner und die Umgebungsvariable PROJ_LIB entsprechend definieren.

ABLAUF DER PROJEKTION

Mehrere Fragen tauchen jeweils im Zusammenhang mit der Projektion mittels Transformationsgrid auf.

Die erste und offensichtlichste: Wieso erlaubt die Projektion mittels EPSG-Code keine genaue Ergebnisse? Der Grund liegt darin, dass die Definition von OGP nicht das Transformationsgrid benutzt. Um das Transformationsgrid dennoch zu gebrauchen, müsste die Projektionsdefinition von EPSG entsprechend geändert werden (und dies bei jeder Aktualisierung der Codesammlung erneut getan werden) oder aber eine alternative, nationale Projektionsdefinition angelegt werden. Genau dies haben wir hier für die Schweizer Projektionen gemacht, dem Beispiel von IGN France folgend.

Die zweite Frage stellt sich ein wenig später, wenn der Geomatiker anfängt mit seinen präferierten Werkzeugen zu arbeiten und die Datei mit der neuen Projektion genauer betrachtet:

# CH1903/LV03
<1903_LV03>  +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +nadgrids=chenyx06etrs.gsb +no_defs

Nur das alte Referenzsystem enthält den Parameter +nadgrids=chenyx06etrs.gsb, also benutzt das Transformationsgrid (eben das angegebene gsb-File). Die Erklärung ist einfach: PROJ4 projiziert die Koordinaten, indem es systematisch über das WGS84-Ellipsoid rechnet. Da das neue Referenzsystem der Schweiz mit WGS84 kompatibel ist, gründet der Qualitätsverlust auf der Projektion von CH1903 zu WGS84. Durch den Gebrauch des Transformationsgrids wird dieses Problem behoben.

GDAL / OGR

Bevor genauer auf die Konfiguration in MapServer eingegangen wird, möchten wir zuerst zeigen, wie man die Daten in das neue Referenzsystem projiziert. Dazu reicht es, das alte Projektionssystem anzugeben indem die entsprechende Schweizer Projektionsdefinition gebraucht wird:

ogr2ogr -s_srs "+init=CH:1903_LV03" -t_srs "EPSG:2056" PLZO_OSNAMEPOS_lv95ogr2 PLZO_OSNAMEPOS.shp$

Die Definition des EPSG-Codes ist insofern speziell, da sie keine Definition mittels “+init=” benötigt, denn für diese Projektion wurde ein Alias erzeugt um die Schreibweise zu vereinfachen. Normalerweise (also wenn kein Alias vorhanden ist) muss das Referenzsystem in PROJ4 mit “+init=” angegeben werden.

MAPSERVER

Wir werden nun zwei Fälle von WMS-Services behandeln. Der erste hat zum Ziel, einen WMS-Dienst im neuen Referenzsystem zur Verfügung zu stellen, ausgehend von Daten im alten Referenzsystem. Der zweite Fall ist recht ähnlich, es wird nun aber ein externer WMS-Service gebraucht, um diesen dann mittels Mapserver in das neue Referenzsystem umzuprojizieren.

WMS-SERVER IN CH1903+/LV95 MIT EBENEN IN ANDEREN PROJEKTIONEN

Die Konfiguration in Mapserver ändert in diesem Fall nur leicht verglichen mit dem Normalfall. Die Layer-Konfiguration bleibt genau gleich, aber es ist im Falle einer Umprojektion wichtig, das richtige Referenzsystem aus dem richtigen Verzeichnis zu wählen:

LAYER
  NAME cantons
  TYPE POLYGON
  DATA cantons_ch.shp
  PROJECTION
    "init=CH:1903_LV03"
  END
  CLASS
   NAME "Cantons"
   STYLE
     COLOR -1 -1 -1
     OUTLINECOLOR 200 200 200
   END
  END
  METADATA
    "wms_title" "cantons"
  END
END

Ausserdem muss die Projektion auch im MAP Objekt definiert werden:

MAP
  NAME "Limites administratives Suisses"
  PROJECTION
    "init=epsg:2056"
  END
  [...]
END

WMS-SERVER IN CH1903+/LV95 UND WMS-CLIENT IN CH1903/LV03

MapServer kann sich wie ein WMS-Client verhalten. Dies erlaubt es, eine Art kartographisches Proxy aufzusetzen und externe WMS-Ebenen über eine Client-Anwendung zu publizieren. Der WMS-Dienst kann so, neben dem externen WMS-Dienst, weitere Ebenen in anderen Formaten (Datenbank, lokale Files), enthalten.

Das Mapfile wird für diese Art von Layern folgendermassen konfiguriert:

LAYER
  NAME "cantons"
  TYPE RASTER
  STATUS ON
  CONNECTION "http://monhote.com/wms?"
  CONNECTIONTYPE WMS
  PROJECTION
    "init=CH:1903_LV03"
  END
  METADATA
    "wms_srs"             "EPSG:21781" # projection
    "wms_name"            "cantons" # nom de la couche pour l'appel WMS
    "wms_server_version"  "1.1.1" # version pour l'appel WMS
    "wms_format"          "image/png" # format pour l'appel WMS
    "wms_title"           "canton"
    "wms_extent"          "537686 150057 548139 159018" # optionnel
  END
END

Die Ebene wird also über einen WMS-Dienst in 21781 aufgerufen, ist jedoch “im Hintergrund” in CH:1903_LV03 im Mapfile definiert. Das MAP Objekt enthält dieselbe Projektion wie im vorherigen Kapitel:

MAP
  NAME "Limites administratives Suisses"
  PROJECTION
    "init=epsg:2056"
  END
  [...]
END

FAZIT

Es ist nun also möglich, das neue Schweizer Referenzsystem CH1903+/LV95 in den verschiedenen Open Source Programmen ohne Genauigkeitsverlust zu gebrauchen. Es gilt jedoch auch zu erwähnen, dass der vormalige Genauigkeitverlust (ohne Gebrauch des Transformationsgrids) lediglich im cm-Bereich liegt, und daher für viele Benutzer nicht relevant ist. Ausserdem ist die Verwendung des Transformationsgrids nur für jene Personen nützlich, welche bereits mit der Problematik der Genauigkeit konfrontiert wurden und wir hoffen, dass die in diesem Blog präsentierten Lösungen hilfreich sind. Zögern Sie nicht, den Artikel mit weiteren Informationen und Tipps zu kommentieren.

Hinterlassen Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.