OpenStreetMap ist ein Open-Source-Projekt mit dem Ziel, jedermann freie Geo-Informationen zur Verfügung zu stellen. Mit den Daten können beliebige Karten generiert werden, z. B. Straßenkarten, Stadtpläne, Wanderkarten, Karten mit dem Netz der öffentlichen Verkehrsmittel. In den Daten sind unter anderem POIs (Points of Interest, z. dt. interessante Orte) enthalten, was es ermöglicht, z. B. Museen, Bibliotheken, Läden und sogar Ampeln in Karten darzustellen oder in Navigationssystemen zu verarbeiten.
Im Rahmen der Studienarbeit soll eine Möglichkeit geschaffen werden, Daten von OpenStreetMap, die nativ im XML-Format geliefert werden, in ein Binärformat umzuwandeln, wodurch der Datenverkehr im Vergleich zu anderen Formaten wie XML gesenkt werden soll.
Das neue Format ist mit bereits vorhandenen Formaten zur Übertragung von Karten zu vergleichen. Besonders für mobile Geräte dürfte ein Binärformat von Vorteil sein, weil hier langsamere Übertragungsraten ein Problem darstellen.
Die Formatumwandlung soll mittels eines zusätzlichen Dienstes für den ROSE-Server geschehen, der zu einem gegebenen Rechteck auf der Erde (mittels Längen- und Breitengrad) die XML-Daten von der OpenStreetMap-API lädt, in das noch zu konzeptionierende Format umwandelt und die Binärdaten schließlich an den Client schickt.
Der ROSE-Client soll um die Funktionalität erweitert werden, die Binärdaten um die aktuelle GPS-Position des Mobilgeräts vom Server mittels eines geeigneten Protokolls abzufragen, um dynamisch eine Karte auf dem Mobilgerät zu generieren.
OpenStreetMap stellt zwar vorgerenderte Karten in Form von PNG-Grafiken zur Verfügung, diese haben allerdings feste Detaileinstellungen, was dem Nutzer nicht ermöglicht, zu wählen, welche Informationen er angezeigt haben möchte und welche nicht.
Das Protokoll zwischen Server und Client soll entsprechend ausgerüstet werden, sodass nur vom Nutzer ausgewählte Kartenfeatures (z. B. Fußwege, Bushaltestellen, Einkaufsmöglichkeiten, Abfalleimer, Telefonzellen) vom Server bezogen und schlussendlich auch auf dem Display angezeigt werden.
Inhaltsverzeichnis
- Einleitung
- OpenStreetMap
- Datenformat von OpenStreetMap
- Beispiele von XML-Daten
- Gerendertes Kartenmaterial
- Ziel dieser Arbeit
- Vorbereitende Analyse-Skripte
- Zeilenweise Analyse
- Stringlänge in den Tag-Values
- Anzahl Tags, Members und Nds pro Element
- Relationen: Typen und Rollen
- Analyse der Tags
- Eintragung in eine MySQL-Datenbank
- MySQL-Datenbankschema
- Einsatz des Skripts
- Analyse aus der Datenbank
- Relative Kodierung gemäß OpenStreetMap-Wiki
- Alternative Kodierung mittels Flex-Byte
- Gegenüberstellung der Möglichkeiten am Beispiel
- Ergebnisse
- Entwicklung des Binärformats
- Grundliegende Bausteine
- Bytereihenfolge von Integer-Daten
- Flexibler Integer
- Strings
- Geographische Koordinaten
- Header-Byte
- Element-Header
- Kodierung eines Knoten
- Kodierung eines Wegs
- Kodierung einer Relation
- Kodierung der Tags
- Direkte Kodierung in einem Byte
- Kodierung des Keys
- highway-Tags
- amenity-Tags
- natural-Tags
- Beschränkungstags
- railway-Tags
- waterway-Tags
- power-Tags
- boundary-Tags
- barrier-Tags
- leisure-Tags
- shop-Tags
- tourism-Tags
- cycleway-Tags
- man_made-Tags
- sport-Tags
- Kodierung von allgemeinen Tags
- Ignorieren bestimmter Tags
- Beispiele
- Beispiel: Kodierung von Knoten
- Beispiel: Kodierung eines Wegs
- Beispiel: Kodierung einer Relation
- Implementierung des Binärformats
- Implementierung als Stand-Alone-Anwendung
- Package osm
- Package io
- Package parser
- Klasse Parser
- Klasse Tools
- Klasse EnumParser
- Package parser.enums
- Aufzählungsklasse DirectTag
- Aufzählungsklasse TagKey
- Aufzählungsklasse TagKeyValue
- Aufzählungsklassen RestrictionTagKey und RestrictionTagValue
- Klasse RestrictionTag
- Aufzählungsklasse DirectRole
- Aufzählungsklasse RelationType
- Default-Package
- Analyse des eingesparten Datenvolumens
- Analyse-Skript
- Ergebnisse
- Fazit
- Analyse der Laufzeit
- Analyse-Skript
- Ergebnisse
- Fazit
- Einbettung als Server-Dienst in den ROSE-Server
- Protokoll
- Koordinaten
- Filtern von Elementtypen
- Filtern von Tags
- Ausgabe des Ergebnisses
- Ausgabe im Fehlerfall
- Implementierung
- Klasse OsmBinaryAnfrageController
- Klasse OsmBinaryErrorCode
- Erweiterung des ROSE-Client
- Einschränkungen durch Compiler-Version
- Implementierung des Parsers
- Klasse EnumHandler
- Package parser.enums
- Klasse Tools
- Klasse OSMDataInputStream
- Klasse OSMTag
- Klassen OSMNode, OSMWay, OSMRelation, OSMMember, OSMType
- Klassen Parser und OsmBinaryErrorCode
- Aufbau der MapForm im ROSE-Client
- Die Overlay-Klasse GMOOpenStreetMap
- Anforderung eines Daten-Updates
- Race-Conditions beim asynchronen Daten-Update
- Cache
- Berechnung des Koordinatenrechtecks
- Klasse OpenStreetMapHandler
- POIs: Symbole und Symbolzuordnung zu den OpenStreetMap-Tags
- Straßen: Zuordnung von Farben zur Höchstgeschwindigkeit
- Einbettung der Overlay-Klasse
- Zusammenfassung und Ausblick
- Zusammenfassung
- Mögliche Verbesserungsansätze
- Ausblick
- Arbeit zitieren
- Alexander Münch (Autor:in), 2010, Konzeption und Implementierung eines Binärformats zur effizienten Übertragung von OpenStreetMap-Daten auf mobile Endgeräte zur dynamischen Generierung individueller Karten, München, GRIN Verlag, https://www.grin.com/document/157527