MSDN Magazin > Home > Ausgaben > 2007 > April >  { End Bracket }: Geopegging
{ End Bracket }
Geopegging
Joshua Trupin

Codedownload verfügbar unter: EndBracket2007_04.exe (174 KB)
Browse the Code Online

Zu meinem Geburtstag im letzten Jahr habe ich ein tolles Geschenk bekommen: eine neue Kamera. Und nicht nur irgendeine Kamera, sondern eine neue Nikon D200.
Zu den Features, die mein Interesse erweckten, gehörten die integrierten GPS-Funktionen. Wenn man ein GPS-Gerät mit serieller Standardschnittstelle hat, kann man es über einen Kabelkonverter mit der Kamera verbinden, und die Standortdaten erscheinen auf jeder Aufnahme.
Das Problem war, dass meine GPS-Empfänger mit serieller Schnittstelle wahre Museumsstücke sind, die nicht für die Kamera geeignet waren, und neue GPS-Geräte normalerweise USB-Verbindungen aufweisen. Was nun? Ich entschloss mich, etwas Verrücktes zu tun, jedenfalls das Verrückteste, seit ich vor zwei Jahren auf einem Straßenmarkt in Manhattan Fajitas gekauft habe: Ich stellte zu Hause meine eigene Lösung aus OEM-Teilen her. Das hat tatsächlich funktioniert. Wenn Sie das Ganze Schritt für Schritt nachmachen möchten, finden Sie alle Informationen in meinem Blog.
Geopegging fügt einer JPG-Datei GPS-Ortsdaten hinzu.(Klicken Sie zum Vergrößern auf das Bild)
Ich habe die Fotos auf meine Hostingsite trupin.smugmug.com gestellt. Smugmug verfügt über ein nettes Feature, das automatisch allen ortsmarkierten Fotos Koordinaten zuordnet, und obwohl Google Earth verwendet wird, war ich damit zufrieden. Doch ich wusste, dass ich noch einen Schritt weitergehen konnte. Die Idee war, dass schon bald Hunderte, ja sogar Tausende von Zufallsschnappschüssen wichtige Zeit- und Ortsinformationen enthalten könnten. Das Hinzufügen von Ortsdaten zu Fotos wird als Geotagging bezeichnet, doch mein Programm sollte diesen Begriff durch ein spezifischeres Konzept erweitern – das „Geopegging“.
Geopegging, das jetzt als das „Hinzufügen von GPS-Ortsdaten zu einer JPG-Datei über eine kartenbasierte Schnittstelle“ definiert wird, ist ein Konzept, zu dessen Verwirklichung eine ganze Reihe von Schritten erforderlich war. Zuerst musste ich herausfinden, wo die Geodaten in einer JPG-Datei tatsächlich gespeichert werden. Dazu gibt es erstaunlich wenige Informationen online, aber ich nutzte verschiedene Quellen und die Leistungsstärke des Microsoft® .NET-Frameworks, um einen einfachen EXIF-Editor zu erstellen. Wenn Sie die Blendeneinstellung der Kamera zum Zeitpunkt des Fotos feststellen wollen, sehen Sie sich das Feld an, das mit 0x9202 gekennzeichnet ist. Alle GPS-Daten werden in Tags gespeichert, die von 0 bis 8 nummeriert sind. Das erfüllte mich nicht gerade mit Zuversicht, da ich mir vorstellte, dass jemand nachträglich einfach die ersten Zahlen ausgewählt hat, die ihm einfielen. Das Framework enthält ein GetPropertyItem-Element in der System.Drawing.Image-Klasse, sodass Headerdaten leicht extrahiert werden können, wenn der den EXIF-Tagwert bekannt ist.
Als nächstes habe ich ein Programm geschrieben, das Microsoft Internet Explorer® in einer Windows® Forms-Anwendung hostet, sodass ich Virtual Earth™ anzeigen und einem Benutzer die Auswahl des Orts ermöglichen konnte, der zu einem Foto hinzugefügt werden sollte. Das war schon etwas einfacher. Richtigen Spaß hat es dann gemacht, auszutüfteln, wie Virtual Earth innerhalb eines Frames meiner Desktopanwendung arbeiten konnte, damit eine beidseitige Kommunikation mit dem Windows Forms-Code in der Anwendung erfolgen würde. Dazu ist etwas JavaScript innerhalb des Fensters sowie ein paar Tricks erforderlich (in der Virtual Earth-Onlinehilfe dokumentiert), damit die beiden Teile des Programms miteinander kommunizieren.
Der Trick hierbei besteht darin, mithilfe von Skript das WebBrowser-Steuerelement über die DocumentText-Eigenschaft bereitzustellen. Sie verwenden AttachEvent zum Aufrufen einer Skriptfunktion, wenn auf das Browsersteuerelement geklickt wird. Diese Funktion ruft dann windows.external.YourFunctionName auf und übergibt eine Zeichenfolge.
Das Ganze ist allerdings noch etwas komplexer und umfasst die richtige Behandlung des Virtual Earth-Steuerelements, das Konvertieren von Werten und das Schreiben in die JPG-Datei. Ich habe mein grundlegendes Geopegging-Programm als Download bereitgestellt, den Sie sich gerne ansehen können. Jetzt steht mir eine ganze Welt ortsmarkierter Fotos zur Verfügung, die ich jederzeit aktualisieren kann. Das selbst hergestellte GPS-Gerät brauche ich gar nicht, aber trotzdem verwende ich es – nur um ein wenig anzugeben.

Joshua Trupinist leitender Redakteur des MSDN Magazins und des TechNet Magazins.

Page view tracker