Google Earth ferngesteuert




    
        
        GoogleEarthFernsteuern
        

    
    
        

            

                
                
                

Sie kennen Google Earth noch nicht Dann wird es höchste Zeit. Das ist eine in der Standardversion kostenlose Software von Google, die verschiedene über das Internet zur Laufzeit per Streaming erhaltene Geodaten – Satellitenbilder, Geländedaten, POIs (Point-Of-Interests) und andere – kombiniert, um daraus realistische Ansichten der Erde zu erstellen, in denen live und in 3D navigiert werden kann. Und das teilweise bis hin zu Auflösungen von unter einem Meter.

            

            

                

Das hat nichts mit Access und Datenbanken zu tun Richtig! Aber mit Hilfe der Programmierschnittstellen von Google Earth lässt sich im Verbund mit Access ein fast schon konkurrenzloses datenbankgestütztes GIS-System (Geografisches Informationssystem) aufbauen. Oder Sie erweitern damit bestehende Datenbanken, die Adressinformationen enthalten, mit einer Geo-Schnittstelle – und das alles zum Nulltarif.

                

Google Earth

                

Sie können sich Google Earth in der aktuellen Version 4 unter [1] herunterladen. Es handelt sich um ein etwa 13 MB großes Setup-Paket, dessen Installation sich völlig unproblematisch gestaltet. Auch die Anwendung selbst lässt sich einfach bedienen und ist robust programmiert. Die Einstellungen des Programms beschränken sich auf das Notwendigste und die Onlinehilfe im Internet ist umfangreich genug, um mit der Anwendung klarzukommen.

                

Google hat das System vor drei Jahren von der ehemaligen Firma Keyhole gekauft und ausgebaut. Sämtliche Daten werden, mit Ausnahme eines temporären Cache, nicht lokal vorgehalten, sondern kommen aus den Internet. Dank Googles gigantischer Server-Infrastruktur funktioniert dieses Streaming in flottem Tempo – vor allem zu Tageszeiten, an denen nicht gerade alle User ihren nächsten Urlaub mit dem Tool planen.

                

Die Oberfläche der Anwendung (s. Abb. 1) besteht aus einer Seitenleiste zur Steuerung der Anzeige, die sich auch ausblenden lässt, und dem Render-Fenster, das die Topografie anzeigt. Das Render-Fenster enthält rechts oben ebenfalls transparente Steuerelemente, mit denen Sie die geografische Richtung, den Zoomfaktor und die Neigung der Erdoberfläche einstellen können.

                

Den Bildausschnitt verschieben Sie mit der Maus. Alternativ können Sie das alles auch per Tastatur mit verschiedenen Kombinationen aus der Umschalttaste, der Strg-, der Alt- und den Pfeiltasten steuern. Da Google Earth seine Daten online bezieht, dauert das Rendern einige Zeit. Den Verlauf zeigt der Fortschrittsanzeiger mit der Bezeichnung übertragung an.

                

Die Seitenleiste enthält ein Suchfeld zur Eingabe einer Adresse, zu der Google Earth in Zusammenarbeit mit Google Maps online den passenden Ort findet. Außerdem ist ein Routenplaner eingebaut, der eine Strecke von A nach B sucht und im Render-Fenster anzeigt.

                

Beides funktioniert noch nicht besonders zuverlässig, da der Katalog noch nicht alle Straßennamen führt. Für den Router lassen sich zudem keinerlei Optionen einstellen. Orte oder Suchergebnisse werden im Bereich Temporäre Objekte aufgelistet.

                

Diese lassen sich anschließend als Objektlisten unter Orte fest abspeichern, damit Sie später jederzeit darauf zugreifen können. Im Bereich der Anzeigeoptionen (Ebenen) können Sie einstellen, welche Elemente das Render-Fenster anzeigen soll – zumindest die Satellitenansicht ist sichtbar.

                

Mit aktiviertem Gelände stellt Google Earth die Topografie in 3D-Ansicht dar (Datengrundlage sind offenbar SRTM-Daten; die Auflösung beträgt damit für Europa weitgehend 90 Meter). Die anderen Optionen offenbaren die ganze Stärke des Tools: Ortsnamen, Straßen oder zahlreiche POIs (Points of interest, die als Marker in der Ansicht erscheinen) lassen sich einblenden.

                

Dazu gehören auch direkte Links zu Webseiten, die Fotos oder historische Daten zu den ausgewählten Orten enthalten. Diese Fülle an Informationen bieten sonst nur teure GIS-Anwendungen.

                

Die weiteren Möglichkeiten – wie das Abfliegen einer Strecke, die GPS-Anbindung, das Einbauen von 3D-Daten und Overlays in die Ansicht oder das Zeichnen von Linien – sind in der Onlinehilfe beschrieben.

                

Schnittstellen zu Google Earth

                

Das Geniale an Google Earth sind seine flexiblen Steuerungs-Schnittstellen. Ursprünglich gab es nur die dateibasierte KML-Schnittstelle, mittlerweile ist aber auch eine COM-basierte Schnittstelle hinzugekommen.

                

Die dateibasierte KML-Schnittstelle

                

Eine eingestellte Ansicht lässt sich in einer so genannten KML-Datei abspeichern und auch wieder laden. Aber nicht nur die Ansicht, auch nahezu alle anderen Optionen der Anwendung inklusive dynamischer Tourdaten und Flüge (in komprimierter und ZIP-kompatibler Form wird eine KMZ-Datei daraus). Es handelt sich dabei um eine XML-Datei, deren Aufbau unter [3] beschrieben ist. Diese etwa 200 Seiten große KML-Referenz erläutert detailliert, wie die XML-Elemente und -Attribute mit der Oberfläche von Google Earth korrelieren. Es gibt nichts, was sich nicht mit so einer KML-Datei steuern ließe.

                

Seit Anfang 2007 steht endlich auch eine Schema-Datei (XSD) für KML zur Verfügung, die man unter [4] findet. Mit ihrer Hilfe lassen sich über einen XML-Editor, wie den von MS Visual Studio 2005 oder das Microsoft XML Notepad 2007, komfortabel KML-Dateien außerhalb von Google Earth erstellen.

                

Eine solche KML-Datei können Sie natürlich auch mit einem Texteditor anfertigen – oder eben per VBA mit Access. Die Möglichkeiten dazu sind so umfangreich, dass dieser Beitrag sie nicht komplett beschreiben kann. In einer der nächsten Ausgaben wird diese Schnittstelle daher separat unter die Lupe genommen.

                

Das COM-Interface

                

Die neueren Versionen von Google Earth sind – und das ist fantastisch – automationsfähig. Das bedeutet, dass sich Google Earth, ähnlich wie etwa Word oder Excel, über einen Verweis in VBA ansprechen lässt.

                

Sie übergeben einfach Anweisungen an die Objekte der Google Earth-Bibliothek und steuern damit das Render-Fenster, aber auch die Seitenleiste. Die ActiveX-Komponente ist dabei keine OLB-, TLB- oder DLL-Datei, sondern die GoogleEarth.exe selbst.

                

Weil im Internet, wie auch bei Google selbst, bisher nur sehr spärliche Dokumentationen oder Beispiele zu dieser Bibliothek zu finden sind, gehe ich hier ausführlich auf deren Objektmodell ein.

                

Das Objektmodell

                

Das Objektmodell von Google Earth hat seit dem ersten Erscheinen der Anwendung einige änderungen erfahren. In früheren Versionen nannte sich die Bibliothek Keyhole Library – Keyhole ist die Firma, die Google aufgekauft hatte und der Name des ursprünglichen Programms – und stellte lediglich eine rudimentäre Schnittstelle dar.

                

Mit der aktuellen runderneuerten Version 4, in der neben der überarbeitung der Oberfläche auch einige neue Features hinzukamen, hat das Google Earth-COM-API Einzug gehalten; die Bibliothek nennt sich nun Earth 1.0 Type Library. Das ist auch genau der Eintrag, den Sie in den Verweisen Ihrer Datenbank aktivieren müssen, wenn
Sie darüber mit Google Earth kommunizieren wollen.

                

Im Prinzip ist diese Schnittstelle unter [2] dokumentiert. Dort sind aber weder alle verfügbaren Klassen dargestellt, noch sind alle Syntaxangaben korrekt. Google hat die Dokumentation leider seit der letzten Beta-Version vom November 2006 nicht mehr aktualisiert.

                

Das Modell weist auch sonst noch einige Ungereimtheiten auf, sodass davon auszugehen ist, dass es in Folgeversionen nochmals überarbeitet wird. Abb. 2 zeigt das Modell mit allen gegenwärtigen Klassen und einigen Eigenschaften und Methoden.

                

über dieses Objektmodell lässt sich nun schon eine Menge in Google Earth regeln. Die Möglichkeiten sind allerdings noch weit entfernt von der Steuerung über die erwähnte KML-Schnittstelle. Deshalb ist diese auch noch keinesfalls obsolet. Beide Methoden lassen sich aber Gewinn bringend kombinieren.

                

Die Beispieldatenbank GoogleEarther.mdb zu diesem Beitrag zeigt eine Möglichkeit auf, wie zum Beispiel das Setzen von Ortsmarken – dazu später mehr.

                

Klassen des Objektmodells im Detail

                

Es existieren zwei Root-Objekte: ApplicationGE und KHInterface. Beide stellen die oberste Ebene des Modells dar, so wie etwa in MS Access das Application-Objekt das zentrale Objekt ist.

                

Warum nun verwirrenderweise zwei Root-Objekte In der früheren Bibliothek Keyhole gab es die Root-Klasse KHInterface, mit der sich Google Earth steuern ließ. Aus Kompatibilitätsgründen ist sie in die neue Bibliothek ebenfalls aufgenommen worden, damit älterer Automations-Code noch funktioniert. Google empfiehlt aber, nur noch die mit GE endenden Klassen zu verwenden.

                

Tatsächlich gibt es keinen Grund, die alte Klasse einzusetzen, bis auf eine kleine Nebensächlichkeit: Im KHInterface gibt es die Methode QuitApplication, mit der sich eine Google Earth-Instanz wieder schließen lässt, so wie Access mit Application.Quit.

                

Eine analoge Methode fehlt aus unerfindlichen Gründen in der ApplicationGE-Klasse, sodass man zu Workarounds genötigt ist, wenn Google Earth per Automatisierung geschlossen werden soll.

                

Von ApplicationGE leiten sich alle weiteren Objekte ab, wobei Sie einige über eine Eigenschaft erhalten können, andere wiederum Ergebnis eines Funktionsaufrufs sind. Tabelle 1 erläutert die einzelnen Klassen der neuen Bibliothek in Grundzügen.

                

Zu erwähnen ist dabei, dass sämtliche Klassen sich auch direkt instanzieren lassen, also mit dem Schlüsselwort New oder per Late Binding mit der Methode CreateObject:

                

Set objCam = New EarthLib.CameraInfoGE

                

Set objCam = CreateObject("GoogleEarth.CameraInfoGE")

                

SingleUse-Instanzierung

                

Google Earth ist eine SingleUse-Anwendung. Das bedeutet, dass Sie immer nur eine Instanz der Anwendung starten können.

                

Das kennen Sie schon von MS Outlook, von dem es ebenfalls immer nur eine Instanz geben kann. Sie starten eine Google Earth-Instanz, indem Sie ein neues ApplicationGE-Objekt erzeugen:

                

Set objGE = CreateObject("GoogleEarth.ApplicationGE")

                

Wenn Sie versuchen, eine weitere Instanz mit CreateObject anzulegen, erhalten Sie lediglich einen Verweis auf die bereits bestehende.

                

Ausgewählte Methoden und Eigenschaften der Klassen

                

Dieser Beitrag kann keine erschöpfende Darstellung aller Methoden und Eigenschaften der EarthLib-Klassen liefern. Die später beschriebene Beispieldatenbank macht zwar von fast allen Elementen Gebrauch, hier sollen jedoch nur einige wichtige Elemente vorgestellt werden.

                

Ich empfehle Ihnen, den Objektkatalog des VBA-Editors aufzusuchen, um die folgenden Erläuterungen nachvollziehen zu können. Stellen Sie darin als angezeigte Bibliothek EarthLib in der Kombobox links oben ein.

                

ApplicationGE.IsInitialized, ApplicationGE.IsOnline

                

Diese beiden Funktionen haben den Rückgabewert 1, wenn die Bedingungen erfüllt sind, und sonst den Wert 0. Beim Start von Google Earth braucht es einige Zeit, bis seine Funktionen ansprechbar sind, weil es sich zunächst beim Google-Server anmelden muss (IsInitialized) und dann auch noch eine Connection zur Online-Datenbank stehen muss (IsOnline).

                

Bevor man also irgendwelche Automationsaufgaben an Google Earth übergibt, sollte man diese beiden Methoden zur Abfrage des Status der Anwendung verwenden.

                

ApplicationGE.OpenKmlFile, ApplicationGE.LoadKmlData

                

Mit diesen beiden Methoden kann eine KML-Datei oder ein KML-String zur Steuerung von Google Earth übergeben werden. Wie bereits erwähnt, lässt sich über KML noch weitaus mehr in Google Earth anstellen als über die COM-Schnittstelle allein. Mit diesen Methodenaufrufen kann man beide Schnittstellen kombinieren. OpenKmlFile erwartet als Parameter den KML-Dateinamen inklusive Pfad, LoadKmlData will einen String, dessen Inhalt einem KML-File entspricht.

                

Man könnte diesen Inhalt etwa aus einer Tabelle in Access beziehen, in der in jedem Datensatz ein anderes KML-Gerüst gespeichert ist. Denkbar ist aber auch, den KML-String zur Laufzeit aus verschiedenen Informationen zusammenzusetzen. In der Beispieldatenbank ist dies in den Klassen clsGoogleEarth (Prozedur SetPlacemark) und clsKML realisiert. Dort werden Ortsmarken zur Anzeige im Render-Fenster über das Zusammensetzen von XML-Tags exportiert.

                

Dieses Verfahren ist für alle Steuerungsanweisungen notwendig, die über die COM-Schnittstelle allein nicht zu machen sind. Der zweite Teil dieses Beitrags in einer der folgenden Ausgaben von Access im Unternehmen geht daher ausführlich auf die Möglichkeiten ein und zeigt außerdem, wie Sie mit einem MSXML-Verweis komfortabel KML-Strings erzeugen können.

                

CameraInfoGE-Objekt

                

Dieses Objekt erhalten Sie vom ApplicationGE-Objekt über die Methode GetCamera(1). Sie können ein CameraInfoGE-Objekt neu erstellen oder ein vorhandenes modifizieren und anschließend über die Methode SetCamera des ApplicationGE-Objekts wieder zuweisen, was die Anzeige im Render-Fenster verändert. In diesem Beispiel etwa wird der Neigungswinkel der Kamera zur Erdoberfläche sofort auf 50° verändert:

                

Dim oCam As CameraInfoGE

                

Dim dblSpeed As Double

                

Set oCam = objGE.GetCamera(1)

                

oCam.Tilt = 50

                

dblSpeed = 5

                

ApplicationGE.SetCamera oCam, dblSpeed

                

Der Speed-Parameter steuert dabei, wie schnell sich Google Earth auf die neue Kamera einstellt. Ein Wert von 5 oder höher bewirkt, dass dies sofort geschieht. Kleinere Werte führen dazu, dass die Ansicht langsam über einen virtuellen Flug wechselt. Dieser Speed-Parameter kommt mit gleicher Bedeutung noch in anderen Methoden zum Tragen.

                

Andere Eigenschaften von CameraInfoGE sind FocusPointLatitude (Breitengrad), FocusPointLongitude (Längengrad), FocusPointAltitude (Höhe des Zielpunkts über Null), Range (Abstand zwischen Kamera und Zielpunkt in Metern), Azimuth (Richtungswinkel gegen Nord). Wie Sie das CameraInfoGE-Objekt zur Steuerung der Ansicht verwenden können, zeigt das Formular frmController der Beispieldatenbank (Prozedur SetCam im Formularmodul).

                

PointOnTerrainGE

                

Dieses Objekt spiegelt einen Punkt auf der Erdoberfläche mit seinen geografischen Eigenschaften wider: Altitude (Höhe ü. N.), Latitude (Breitengrad), Longitude (Längengrad). Man erhält das Objekt ausschließlich über die Methode GetPointOnTerrainFromScreenCoords des ApplicationGE-Objekts. Damit ist es möglich, Informationen zu einem beliebigen Punkt im Render-Fenster zu erhalten:

                

Dim objPOT As PointOnTerrainGE

                

Set objPOT = objGE.GetPointOnTerrainFromScreenCoords (X, Y)

                

Debug.Print objPOT.Latitude, objPOT.Longitude, objPOT.Altitude

                

Die Parameter X und Y sind dabei relative Koordinaten im Render-Fenster, wobei 0/0 das Zentrum des Fensters darstellt, -1/1 die linke obere Ecke, 1/-1 die rechte untere. Durch diesen festgelegten relativen Wertebereich ist es unerheblich, wie groß das Render-Fenster gerade eingestellt ist.

                

ApplicationGE.GetRenderHwnd()

                

Erstaunlich, dass Google diese Funktion eingebaut hat. Erlaubt sie doch, über API auf das Bildfenster zuzugreifen, dessen GDI-Fensterhandle sie liefert, und einen Schnappschuss anzufertigen, der dann als Bilddatei abgespeichert werden kann – ein Feature, das an sich nur der kostenpflichtigen Pro-Version vorbehalten ist.

                

ApplicationGE kennt zwar auch die Methode SaveScreenShot, mit der sich eine Bilddatei direkt erzeugen lässt. Diese wurde jedoch absichtlich mit Limitierungen versehen: Das Ergebnisbild ist Schwarzweiß, hat eine geringere Auflösung als das Original und soll laut Google immer schlechtere Ergebnisse erzielen, je öfter man die Funktion aufruft. Das soll wohl der automatisierten massenhaften Erzeugung von Bildarchiven einen Riegel vorschieben. über die Methode könnten, entsprechend aufwändige Routinen vorausgesetzt, sogar Videos erzeugt werden – auch das ist eigentlich nur mit der Pro-Version möglich.

                

FeatureCollectionGE-Auflistung,
FeatureGE-Objekt

                

FeatureGE ist ein etwas merkwürdiges Objekt. Es birgt kaum Eigenschaften, besetzt gleichzeitig aber eine wichtige Position im Objektmodell. Am besten wird es vielleicht verständlich, wenn Sie sich die Objektliste der Seitenleiste anschauen. Alle Einträge, die Sie dort etwa unter der Rubrik Meine Orte finden, sind einzelne Features. Meine Orte selbst ist die Auflistung dieser Features, die FeatureCollectionGE.

                

Ein Feature kann daher beispielsweise der Titel einer Route sein, ein Link zu einer Webseite, ein Ort, ein Marker, eine Grafik oder ein eingefügtes Polygon. Bedauerlicherweise enthält das FeatureGE-Objekt keinerlei Informationen darüber, um was es sich bei ihm handelt, außer dem Namen, der identisch mit dem Begriff ist, der in der Objektliste auftaucht, und der Sichtbarkeit (Visibility) im Render-Fenster, die in der Objektliste durch die vorangestellte Checkbox eingestellt wird.

                

FeatureGE kann selbst eine Liste untergeordneter Features enthalten, die mit der Methode GetChildren ermittelt werden kann und eine FeatureCollectionGE zurückgibt. Eine Route A-B etwa ist ein Feature, enthält aber als Kindobjekte alle Wegpunkte. Die Wegpunkte ihrerseits haben als Elternobjekt das Route-Feature, das über die Methode GetParent erhalten werden kann.

                

über diese beiden Methoden können Sie also durch den gesamten Objekt-Baum navigieren. übrigens ist eine FeatureCollectionGE etwas anderes als eine VBA-Auflistung, die sich mit einer For Each-Schleife enumerieren lässt.

                

Die einzelnen Elemente können Sie nur über ihren Index ermitteln:

                

Dim i As Long, n As Long

                

Dim oFE As FeatureGE

                

n = FeatureCollectionGE.Count

                

For i = 0 To n

                

 Set oFE = FeatureCollectionGE.Item(i)

                

 Debug.Print oFE.Name, oFE.HasView

                

Next i

                

In dieser Schleife wird neben dem Namen des Features noch über die Funktion HasView ausgegeben, ob das Objekt im Render-Fenster angezeigt werden kann. Beim Titel einer Route etwa ist das nicht der Fall, wohl aber bei den Wegpunkten.

                

FeatureCollections bekommen Sie direkt vom ApplicationGE-Objekt über dessen Eigenschaften GetMyPlaces – das sind die Einträge der Objektliste unter Meine Orte -, sowie GetTemporaryPlaces, die Liste der zur Laufzeit angelegten und noch nicht gespeicherten Features im Objektbaum unter Temporäre Orte. Außerdem erhalten Sie diese noch über die Methode GetResults des SearchControllerGE-Objekts, nachdem eine Ortsuche durchgeführt wurde.

                

SearchControllerGE

                

Dieses Objekt korreliert mit dem Suchfeld für Orte der Seitenleiste von Google Earth. Es wird von der Eigenschaft SearchController des ApplicationGE-Objekts abgeleitet. Seine wichtigste Methode heißt Search:

                

SearchControllerGE.Search("Adress-String")

                

Diese Anweisung stößt eine Online-Suche nach der Adresse an, die einige Zeit in Anspruch nehmen kann. Deshalb können Sie über die Eigenschaft IsSearchInProgress abfragen, ob die Suche bereits abgeschlossen ist oder noch andauert:

                

Do

                

 DoEvents

                

Loop Until objGE.SearchController.IsSearchInProgress = 0

                

Danach stehen die Ergebnisse in der FeatureCollection der Methode GetResults zur Verfügung und können ähnlich wie im Listing oben zur FeatureCollectionGE ausgegeben werden. Wenn Google Earth den Ort nicht finden kann, so meldet es dies mit einem Meldungsfenster, verhält sich bei Automation also genauso, wie bei manueller Suche. Leider kann man dieses Verhalten nicht abschalten.

                

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar