Wege jenseits von Google Maps mit GeoTools und uDig - JAXenter
Desktopanwendungen um GIS-Funktionalität erweitern

Wege jenseits von Google Maps mit GeoTools und uDig

Matthias Lendholt

Geoinformationssysteme (GIS) sind keine Errungenschaft der letzten Jahre, doch erst mit Google Maps und Google Earth wurde die Visualisierung von georeferenzierten Daten auf breiter Front ermöglicht und von der Web-Community in beeindruckender Geschwindigkeit vorangebracht. Doch wie gestaltet sich die Integration von GIS-Funktionalität in Desktopanwendungen? Welche Möglichkeiten gibt es und was unterscheidet sie von Web-Toolkits?

Dutzende von Mashups verbinden alles nur Erdenkliche mit Google Maps, und dank KML (Keyhole Markup Language) gibt es hunderte von zusätzlichen Informationsquellen für Google Earth. Schwerpunkt ist zumeist die reine Darstellung von Zusammenhängen. Komplexe GIS-Funktionalitäten werden vom durchschnittlichen Benutzer weder gewünscht noch seitens der Software mitgeliefert. Mit klassischen Geoinformationssystemen (GIS), wie sie von den beiden Marktführern ESRI und Intergraph angeboten werden, haben derartige Webanwendungen nur noch ihre Ausrichtung auf den Raumbezug gemein.

Seitens professioneller Anwender werden Google Maps & Co häufig belächelt: Zum einen aufgrund ihres begrenzten Funktionsumfangs und zum anderen aufgrund der bisweilen hohen Ungenauigkeit, mit der gearbeitet wird. Neben dem verwendeten Erdmodell liegt dies vor allem schlichtweg an der Qualität der erfassten Daten.

Google maps uses a bit of a shortcut, they make the assumption of a perfect sphere in order to be just that much faster (after all they want a pretty picture nothing more. Jody Garnett, GeoTools-Entwickler

Ob das georeferenzierte Urlaubsfoto 100m weiter links oder rechts dargestellt wird, ist sicherlich irrelevant – die kommunale Wasserleitung sollte hingegen weitaus präziser verortet sein. So bleibt häufig die Frage, wo jenseits von Web 2.0 potenzielle Anwendungen lauern und wie es sich im Bereich der Desktopanwendungen verhält.

Liegt das Interesse darin, ein vorhandenes GIS um eigene Funktionalität zu erweitern, so sei auf JUMP verwiesen, das mittels Plug-ins leicht erweitert werden kann. Steht jedoch das Erweitern der eigenen Anwendung um zusätzliche GIS-Funktionalität im Vordergrund, so wird man fast zwangsläufig beim kanadischen Unternehmen Refractions Research landen. Zwei ihrer Produkte werden hier eingehend betrachtet: Die Bibliothek GeoTools und die eclipse RCP-Anwendung uDig (beide LGPL 2.1).

GeoTools

GeoTools liefert standardisierte Methoden zur Bearbeitung von georeferenzierten Daten und basiert auf anderen freien Bibliotheken sowie auf offenen Standards, vornehmlich des Open Geospatial Consortiums (OGC). GeoTools selbst steuert keine Visualisierungskomponenten bei, als Schnittstelle zur Darstellung dient der Renderer (Interface GTRenderer). Dieser zeichnet mittels paint-Methoden auf ein Graphics2D-Objekt, sodass sowohl SWT- als auch Swing-Anwendungen realisiert werden können. Möchte man GeoTools einsetzen, so muss man grundlegende Oberflächenfunktionalität (Kartendarstellung, Werkzeuge zum Zoomen und Verschieben) selbst entwickeln.

Abb. 1: Objektmodell von GeoTools
Objektmodell von GeoTools

Grundlage für das Objektmodell (Abb. 1) ist die GeoAPI vom OGC. Innerhalb einer Karte (MapContext) werden gleichartige Objekte (Features) in Layern (MapLayer) gruppiert. Diese Features werden durch eine Schablone (Featuretype) spezifiziert, die beschreibt, welche Attribute die Instanzen dieses Featuretypes haben. Von elementarer Bedeutung ist dabei das Attribut, das die Geometrie des Featuretypes definiert, die entweder vom Typ Punkt, Linie oder Polygon sein kann. Die historischen Wurzeln dieser Dreiteilung liegen hauptsächlich im Shapefile-Format. Dieses von der Firma ESRI Anfang der 90er entwickelte Format ist der De-facto-Standard für Geodaten. Die Definition der geometrischen Figuren erfolgt durch n-dimensionale Punktmengen, sodass es z.B. nicht möglich ist, mittels des Typs Polygon einen echten Kreis zu spezifizieren, da dieser nur mittels einer endlichen Punktmenge genähert werden kann. GeoTools verwendet hierfür die JTS (Java Topology Suite), eine Bibliothek (gleichfalls LGPL) von Vivid Solutions, die neben dem räumlichen Objektmodell grundlegende geometrische Funktionen (z.B. Abstandsberechnungen, Transformationen) zur Verfügung stellt.

Neben der Geometrie können Features Attribute beliebigen Typs enthalten. Liegt keine Datenquelle (z.B. ein Shapefile) vor, die den Featuretype implizit spezifiziert, sondern möchte man einen temporären, speicherbasierten Layer anlegen, so ist zuvor der Featuretype selbst zu definieren. Listing 1 zeigt beispielhaft das Anlegen eines speicherbasierten Layers.

Listing 1
String myFeatureName = "myTestFeature";
FeatureTypeBuilder featureBuilder = FeatureTypeBuilder.newInstance(myFeatureName);
// Geometrie-Attribut, in GeoTools fest verdrahtet auf "geometry"
featureBuilder.addType(AttributeTypeFactory.newAttributeType("geometry",Point.class,true, Integer.MAX_VALUE, null, DefaultGeographicCRS.WGS84));
// Ein weiteres Attribut für die (eigene) ID des Features (Integer)
featureBuilder.addType(AttributeTypeFactory.newAttributeType("ID",Integer.class,true,Integer.MAX_VALUE));
// Ein weiteres Attribut für den Namen des Features (String)
featureBuilder.addType(AttributeTypeFactory.newAttributeType("Name",String.class,true,Integer.MAX_VALUE));
// vom Feature zum Layer.
FeatureType featureType = featureBuilder.getFeatureType();
MemoryDataStore memoryDataStore = new MemoryDataStore();
memoryDataStore.createSchema(featureType);
FeatureSource featureSource = memoryDataStore.getFeatureSource(myFeatureName);
// Darstellung des Layers wird mit SLD spezifiziert, siehe Listing 2
Style myStyle = MyStyleFactory.getTestStyle();
DefaultMapLayer myLayer = new DefaultMapLayer(featureSource,myStyle,"myLayerName");
Geschrieben von
Matthias Lendholt
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.