Das Eclipse-LocationTech-Projekt Geoff

Geomapping und Tortenbacken: Eclipse Geoff stellt sich vor

Erdal Karaca
Geomapping und Tortenbacken

© Shutterstock / Tomophafan

Das im Folgenden beschriebene Projekt wird innerhalb der Eclipse LocationTech IWG (Industry Working Group) der Eclipse Foundation unter dem Namen „GeoFF (Geo Fast Forward)“ geführt und freut sich über Interessenten, die ihre Geodaten in einer Eclipse- oder Webumgebung visualisieren möchten.

Zubereitung: Den Backofen auf 175° C vorheizen. Die Himbeeren auftauen und abtropfen lassen bzw. waschen. Eine Springform einfetten. Die Eier schaumig schlagen, nach und nach den Zucker und den Vanillinzucker hinzugeben und zu einer cremig-schaumigen Masse verquirlen. Das Mehl mit dem Backpulver und der Speisestärke vermischen, langsam zu der Eier-Zuckermasse geben und verrühren…Der Vorgang zur Herstellung geografischer Karten ähnelt den Prinzipien beim Tortenbacken: Über die Basiskarte mit den vorgerenderten und gerasterten Geodaten wie Ländergrenzen, Straßennetz und Gebäudeumrissen folgt Schicht für Schicht die Erweiterung der Karte um thematisch gegliederte Informationseinheiten: Routen der letzten Fahrten mit dem Auto oder Punkte zur Darstellung von Tankstellen oder Sehenswürdigkeiten, den so genannten Points of Interest.

Wie bei einer Torte kommt es bei einer geografischen Karte auf gut aufeinander abgestimmte Ebenen/Schichten an. Und eine Torte, die dem einen schmeckt, muss noch lange nicht dem anderen schmecken: mehr oder weniger Süße, mehr oder weniger Buntes etc.

EMF zur Modellierung der Geomapping-Domäne

Ein dem Tortenansatz zugrunde liegendes zentrales EMF-Ecore-Modell stellt Möglichkeiten bereit, die Ebenen der geografischen Karte zu beschreiben (Abb. 1 und 2).

Abb. 1: Modellierung einer Torte

Abb. 1: Modellierung einer Torte

Abb. 2: Modellierung einer geographischen Karte

Abb. 2: Modellierung einer geographischen Karte

Die Abbildungen stellen eine sehr stark vereinfachte Modellierung der Domäne „Torte“ (Abb. 1) und der Domäne „Geomapping“ (Abb. 2) dar. Wie die Torte, so besteht auch die Karte aus mehreren Ebenen (Layern), die jeweils eine bestimmte Quelle von Informationen beinhalten. Eine Informationsquelle kann z. B. ein Server im Internet sein, der ein vorgerastertes/-gerendertes Straßennetz mit Hausnummern liefert. Spezielle Layer erlauben die Darstellung „spezieller“ Daten. So ist in der Abbildung der VectorLayer benannt, der beliebig viele Features enthalten kann – in der Geomapping-Domäne spricht man von „Features“, wenn es sich um Objekte handelt, die mittels Geodaten (geografische Koordinaten) beschrieben werden können. Um eine Karte programmatisch zu erzeugen, ist etwas Boilerplate-Code erforderlich. Listing 1 beschreibt eine einfache OpenStreetMap-Karte.

Listing 1: Manuelle Konfiguration einer EMF-Modell-Instanz für eine einfache Karte

GeoMap geoMap = GeoffFactory.eINSTANCE.createGeoMap();
geoMap.setName("OpenStreetMap");
geoMap.setDescription("A simple OSM base layer example.");
XYZLocation center = GeoffFactory.eINSTANCE.createXYZLocation();
center.setX(8.2128d);
center.setY(53.1403);
center.setProjectionCode("EPSG:4326");
int zoom = 10;
View view = GeoffFactory.eINSTANCE.createView();
view.setCenter(center);
view.setZoom(zoom);
geoMap.setView(view);
Tile osmTileLayer = LayerFactory.eINSTANCE.createTile();
Source osmTileSource = SourceFactory.eINSTANCE.createOSM();
osmTileLayer.setSource(osmTileSource);
geoMap.getLayers().add(osmTileLayer);

Um die manuelle Erzeugung der Karten in Java zu vereinfachen, existiert ein Fluent-API nach dem Builder-Pattern. Folgender Codeausschnitt zeigt dieselbe Karte, diesmal unter Zuhilfenahme des Fluent-API, um die Geräusche der EMF-API bereinigt:

Geoff geoMap = Geoff
    .createMap("OpenStreetMap", "A simple OSM base layer example.")
.view(xyLocation(8.2128d, 53.1403, "EPSG:4326"), 10)
.addLayer(tileLayer(osmSource()));

OpenLayers als Visualisierungskomponente

Auf der Suche nach Visualisierungsframeworks für Geodaten, die in einer Eclipse-Umgebung lauffähig sind, stößt man nur auf wenige Lösungen. Um eine recht gute Option handelt es sich beim uDig-Projekt [2], das ebenfalls in der Eclipse LocationTech IWG untergebracht ist. Der Fokus von uDig ist die Visualisierung und Analyse von Geodaten. uDig selbst geht also über das reine Visualisieren von Geodaten hinaus und stellt im Kontext der Anforderungen von Geoff eine „schwergewichtige“ Lösung dar. Ein Blick über den Tellerrand ermöglicht uns die Suche nach Frameworks in anderen technischen Umgebungen. So existiert mit OpenLayers [3] ein seit Jahren bewährtes Tool zur Visualisierung von Geodaten in einer Browserumgebung. Mit der Version 3 wurde OpenLayers dabei von Grund auf neu entwickelt. Es überzeugt durch ein gut durchdachtes API und eine sehr aktive Open-Source-Community.

Eine Karte wird in OpenLayers in JavaScript programmiert. So kann die oben programmatisch konfigurierte Karte wie in Listing 2 in JavaScript abgebildet werden.

Listing 2

<body>
  <div id="map"></div>
  <script type="text/javascript">
    var map = new ol.Map({
      layers: [
        new ol.layer.Tile({
          source: new ol.source.OSM()
        })
      ],
      target: 'map',
      view: new ol.View({
        projection: 'EPSG:4326',
        center: [8.2128, 53.1403],
        zoom: 6
      })
    });
  </script>
</body>

Die Brücke zwischen SWT/EMF und OpenLayers

Das SWT-Browser-Widget fungiert als Brücke zwischen SWT/EMF und JavaScript: Die konfigurierte Karte wird mittels AJAX in die eingebettete Browserinstanz geladen und anschließend über OpenLayers gerendert. Hierzu wird die EMF-Modell-Instanz in XMI/XML umgewandelt/serialisiert und browserseitig als DOM zur Verfügung gestellt (Listing 3).

Listing 3

<?xml version="1.0" encoding="ASCII"?>
<geoff:GeoMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:geoff="http://www.locationtech.org/geoff-v1"
  xmlns:geoff.layer="http://www.locationtech.org/geoff-layer-v1"
  xmlns:geoff.source="http://www.locationtech.org/geoff-source-v1"
  xmlns:geoff.style="http://www.locationtech.org/geoff-style-v1">
  <view zoom="10">
    <center xsi:type="geoff:XYZLocation" x="8.2128" y="53.1403"
      projectionCode="EPSG:4326" />
  </view>
  <layer xsi:type="geoff.layer:Tile">
    <source xsi:type="geoff.source:OSM" />
  </layer>
</geoff:GeoMap>

Anschließend übersetzt eine regelbasierte Routine zur Laufzeit die DOM-Objekte in JavaScript-Anweisungen. Dies ähnelt der Grammatik einer Sprache (Listing 4).

Listing 4

var rules = {};
rules["geoff:GeoMap"] = function(domNode, env) {
  // ...
};
rules["geoff:View"] = function(domNode, env) {
  // ...
};
rules["geoff.layer:Tile"] = function(domNode, env) {
  // ...
};

Steht die DOM-Struktur im Browser bereit, so wird ausgehend vom obersten Knoten die Routine zur Übersetzung in JavaScript-Anweisungen rekursiv angewandt.

Das Zusammenspiel

In den vorigen Absätzen haben wir die einzelnen Aspekte der Architektur behandelt. Im Beispiel in Listing 5 sehen wir, wie alles zusammenspielt.

Listing 5

public static void main(String[] args) {
  Display display = new Display();
  Shell shell = new Shell(display);
  shell.setLayout(new FillLayout());

  GeoMapComposite gmc = new GeoMapComposite(shell, SWT.None);
  GeoMap geoMap = Geoff.createMap()
      .view(xyLocation(8.2128d, 53.1403, "EPSG:4326"), 6)
      .addLayer(tileLayer(osmSource())).get();
  gmc.loadMap(geoMap);

  shell.open();
  while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
      display.sleep();
  }
  display.dispose();
}

Das API bietet die Möglichkeit, eine konfigurierte Karte in eine SWT-Umgebung einzubinden. Der Entwickler selbst hat keine Berührungspunkte mit den Interna des Frameworks.

Das Resultat ist im Kartenausschnitt in Abbildung 3 zu sehen.

Abb. 3: Ergebnis des vorigen Beispiels

Abb. 3: Ergebnis des vorigen Beispiels

Fazit

Die dem Projekt zugrunde liegenden Techniken bedienen sich der modellgetriebenen Entwicklung (EMF) zum einen und der Flexibilität der Webframeworks zum anderen. Das Resultat zeigt das harmonische Zusammenwirken beider Welten und das Potenzial, komplexe Projekte damit zu realisieren. In einem nächsten Artikel werden wir sehen, wie das Geoff-Projekt helfen kann, geografische Karten ohne Programmierung zu erstellen. Hierzu wird der Geoff GeoMap Designer vorgestellt, der in der Eclipse IDE lauffähig ist.

Aufmacherbild: mixed yolk eggs, flour and sugar via Shutterstock / Urheberrecht: Tomophafan

Verwandte Themen:

Geschrieben von
Erdal Karaca
Erdal Karaca
Erdal Karaca hat Geoinformatik an der Fachhochschule Oldenburg studiert. Als freiberuflicher IT-Berater und Software-Engineer unterstützt er Unternehmen bei der Entwicklung ihrer Softwareprodukte auf Basis von Open-Source-Technologien.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: