Eigenes Routing Programm für Handy

  • Hi,


    ich möchte mittels OSM ein eigenes Routing Programm für Handys (unter JavaME) entwickeln.


    Meine Idee ist:
    Ich wandele die OSM Dateien in ein neues Format bzw. hole ich mir nur alle Straßen aus diesen Dateien und die entsprechenden Nodes...


    Nur wie gehe ich das Routing an sicham besten an?


    Habt ihr da generel zum Thema Routing mittels OSM ein paar Tipps?
    Danke

  • Hi,


    es gibt durchaus schon ein paar Ansätze für Routing-Programme, welche OSM-Daten verarbeiten. Schau dir z.B. mal die OpenSource-Projekte GPSMid, Navit, Gosmore, Traveling Salesman (Java-App, dessen Autor Marcus Wolschon ist stets hilfbereit), das Routing-Plugin von JOSM, NaviPOWM (nur Vektor-Darstellung ohne Routing) und Lokigo.org an.


    Weitere Recherchen nach Software und Lösungen kannst du vielleicht unter http://wiki.openstreetmap.org/wiki/Routing anstellen.


    Beachte auch im OSM-Wiki die Kategorie http://wiki.openstreetmap.org/wiki/Category:Java_midlet


    Berichte mal, ob dich das weiter bringt. Gruß, Stephan

  • Joar ne... so richtig hat mir das noch nicht geholfen. Ich habe einfach das Problem das die Dateien zu groß sind und das Handy damit nicht klar kommt... Speichere mir dabei nur Ways wo wirklich Autos fahren könnten und die entsprechenden Nodes dazu... Doch bei NRW z.B. ist diese Datei dann über 100MB groß....

  • Eigenes Routing ist nicht besonders kompliziert:
    du erstellst dir aus den OSM-Daten Abbilder im eigenen Format, schaust, welche Knotenpunkte in mehreren Straßen vorkommen und musst mit Hilfe dieser einen Graph erstellen, den du zum Routen verwendest. Je nach Anwendungsziel (Auto-Routing, Fußgängerrouting,...) muss der Graph anders strukturiert sein. Als Algorithmus ist z.B. der A*-Algorithmus recht schnell, selbst wenn du mit binären Heaps arbeiten musst, aber es lohnt sich ab einer bestimmte Knotenzahl.
    Das Problem ist meiner Ansicht nach, dass man auf dem Handy versuchen muss, räumlich nahe beieinander liegende Knoten auch nahe beieinander zu speichern, da Handys nicht besonders schnell dabei sind, gezielt Daten aus einem Riesendatenhaufen herauszufischen.
    Und darin liegt auch die größte Herausforderung!
    Hinzu kommt noch, wie man die Kartendaten an sich abspeichert, um diese schließlich darzustellen. Immerhin handelt es sich um Vektordaten: wie greifst du schnell auf die notwendigen Vektordaten zu?
    Wenn du vorhast, Routing für Fahrzeuge zu implementieren ist zu beachten, dass die Abbiegevorschriften (turn restrictions) in OSM noch kein einheitliches Format haben, so dass das nicht ganz einfach umzusetzen ist, v.a. auch wie man diese Abbiegevorschriften am geschicktesten abspeichert.
    Bei dem Programm, das ich geschrieben habe (www.lokigo.de), habe ich viele rechenaufwendige Schritte bereits auf dem Server vorberechnet, so dass das Handy nur beim Routen noch richtig gefragt ist. Das Zeichnen hingegen geht sehr schnell, da z.B. das Triangulieren von Flächen schon der große Rechner erledigt und das Handy nur noch gefüllte Dreiecke zeichnen muss. Und das kann ein Handy sehr schnell.
    Bei meinem Programm z.B. ist Fußgängerrouting noch etwas langsam, da ich mit lokalen Graphen arbeite, die sich beim Routing mit anderen lokalen Graphen verbinden und ich habe die lokalen Graphen mit Bereichen von 500m x 500m wohl etwas zu klein gewählt. Der Erfahrung nach würde ich nun Graphen im Bereich 10 km x 10 km wählen, damit dürfte man gut zurecht kommen.
    Wobei mein Programm auch wieder ein bisschen speziell ist, da ich ja den ganzen Planet erst mal gekachelt habe, so dass man sich beliebige Ausschnitte auf sein Handy herunterladen kann. Deswegen auch die lokalen Graphen ...
    Was die Vorbereitung der Karten für Handys anbelangt, so gelingt das relativ "schnell": mein alter Server mit 2GB RAM und 1,6 GHz Prozessor benötigt zum Berechnen des ganzen Planeten (ca. 7.6 GB im Moment) etwa 18 Stunden, so dass ich jede Woche aktuelle Kartendaten anbieten kann.
    Hoffe, ich konnte dir hiermit ein bisschen helfen ;)


    ps: ein solches Programm zu schreiben braucht schließlich doch länger, als man denkt. Ich spreche da aus Erfahrung: Aus ursprünglich geplanten 6 Monaten sind schließlich fast 15 geworden, weil man immer wieder auf neue Probleme stößt. Erschwerend kommt noch hinzu, dass Java Mobile dummerweise nicht auf allen Handys gleich gut funktioniert: es läuft auf deinen zwei Handys, das neue Smartphone vom Nachbar weigert sich aber schon, das Programm zu starten. Der Teufel steckt im Detail!
    Überleg dir, ob du sowas wirklich machen willst: können nicht evtl. schon andere Programme das, was du machen möchtest? Z.B. GPSMID oder we-travel? Was wäre das Alleinstellungsmerkmal für dein Programm?