Datenbankzugriff

Durch das vorangegangene Praktikum war es möglich, dass der Benutzer sich einen Kartenausschnitt von OpenStreetMap.org herunterlädt und diesen in das Verzeichnis kopiert, um darauf jeweilige Pfade zu berechnen. Dieser mühseligen Methode wurde nun durch mehr Dynamik im Programm mehr Komfort verschafft.

OSM Datei

Beim Aufruf der Homepage über einen Browser kann, nachdem ein gewünschte Gebiet ausgewählt wurde, der angezeigte Kartenausschnitt exportiert werden.OpenStreetMap.org bietet hierzu verschiedene Formate zu Auswahl, für den Routenplaner wird allerdings nur der Export als OSM-Datei benötigt.

Wie bereits im letzten Praktikum erklärt, ist eine OSM-Datei (OMS steht hierbei für OpenStreetMap) eine XML-Datei, die die jeweiligen Knoten und Kanten für die Straßen, sowie auch für Umweltobjekte wie Gebäude und Gewässer beschreibt. Für eine genauere Erklärung und die hierbei auftretenden Probleme sei auf das erste Praktikum unter dem Abschnitt „Parsing“ verwiesen.

2 Arten des Datenbankzugriffs

War es in der alten Applikation noch notwendig, dass der Benutzer sich einen Kartenausschnitt selbst wählt, sie als OSM-Datei exportiert und den Routenplaner lokal auf diese Datei zugreifen lässt, wird diese mühselige Methode nun durch einen Automatismus ersetzt.



Beim Start der Applikation wird zunächst geprüft, ob bereits eine gültige OSM-Datei genannt „MapC.osm“ vorliegt. Diese kann noch durch einen vorangegangen Aufruf des Routenplaners vorliegen (Zur Namensgebung wird im nächsten Kapitel eingegangen).

Falls eine solche Datei vorliegt, hat der Benutzer die Wahl, ob er den als letztes angezeigten Kartenausschnitt nutzen, oder im Neuenheimer Feld erneut starten möchte. Falls letzteres gewünscht wird, wird die benötigte OSM-Datei direkt über die API von OpenStreetMap ohne weiteren Aufwand des Benutzers heruntergeladen.

Die Daten werden hierbei nicht über SELECT Statements wie man sie im Bereich der Datenbanken kennt angefordert, sondern über eine angegebene Bounding-Box. Ein gültiges Beispiel eines Aufrufs zum Anfordern eines Kartenausschnittes wäre zum Beispiel:

http://api.openstreetmap.org/api/0.6/20map?bbox=2011.54,48.14,11.543,48.145

Dabei geben die Zahlen nach dem Abschnitt „bbox=“ den Längen-, sowie Breitengrad des ersten und des zweiten Punktes des aufspannenden Kartenausschnittes an.

Alle verwendeten OSM-Dateien, werden auf Gültigkeit (handelt es sich überhaupt um eine OSM-Datei?) anhand der Version in ihrem Header verifiziert. Zur Vollständigkeit der Knoten und Kanten, kann nicht eingegangen werden, da dies erstens nicht Aufgabe des Routenplaners ist, zweitens die Menge der Daten durch die Prüfung den Programmstart unnötig verzögern würde und drittens nicht immer alle Kanten durch OpenStreetMap vorliegen und daher auch nicht bereit gestellt werden können. Dies resultiert unter anderem in teilweise fehlenden Straßen.

Da die Gesamtheit der Daten von OpenStreetMap immer noch aus zwei verschiedenen Versionen ihrer API besteht (diese sind 0.5 sowie 0.6) und nicht immer die angeforderten Ausschnitte in der aktuellsten Version vorliegen, müssen beide berücksichtigt werden. Für den Routenplaner werden daher immer aus beiden Versionen und dem Standard entsprechend absteigenden Ordnung der Version Daten verwendet.

Wechsel des angezeigten Gebietes

In der Applikation ist es möglich, das angezeigte Gebiet zu ändern. Damit nicht bei jedem Wechsel des Gebietes von der API nachgeladen werden muss, werden beim Start des Programms 4 Threads aktiviert, die die jeweiligen angrenzenden Gebiete herunterladen. Damit liegen jederzeit 5 OSM-Dateien vor, die vom Programm interpretiert werden können. Die unten stehende Abbildung zeigt die Namensgebung.



„MapC.osm“ ist dabei der aktuell betrachtete Bereich des Benutzers, auf dem Wege berechnet werden können. Wird das Gebiet gewechselt (zum Beispiel auf „MapL.osm), werden die Dateien notwendigen Dateien umbenannt und die fehlenden Gebiete nachgeladen.