Routenplaner für Windows - Ein langer Weg...

Hallo alle zusammen,

mein Name ist Daniel Gilbert, ich bin (noch) 22 Jahre alt und studiere Informationstechnik an der FH Wilhelmshaven. Seit nunmehr 6 Jahren schreibe ich unter Windows Programme. Nach zahlreichen Affären mit C, C++ und Visual Basic ( :roll_eyes: ) bin ich immer wieder bei Delphi gelandet. Nach einer einjährigen Zwangspause bin ich seit Ende letzten Jahres wieder aktiv.

Es ist jetzt einige Wochen her, dass in dem deutschen Delphi-Forum DelphiPRAXiS folgender Thread entstanden ist:

Routenplaner mit OpenStreetMap

Am Anfang sieht man noch ganz deutlich, dass ich mich auf Google Maps eingeschossen habe, bis ich von einem Mitglied auf OpenStreetMap und dessen beachtlichen Fortschritt aufmerksam gemacht wurde.

Was mir während meiner Recherchen aufgefallen ist, ist, dass die Dokumentationen für Anwendungsentwickler entweder sehr versteckt oder sehr dürftig sind (Sieht man auch an den Posts im entsprechenden Thread). Mag sein, dass ich mir das einbilde, aber ich hatte zumindest den Eindruck.

Außerdem habe ich das Gefühl, dass Windows-Anwender immer noch ein bisschen Stiefmütterlich behandelt werden, von Kosmos mal abgesehen, was in meinen Augen sehr gut aussieht… :wink:

Meine Pläne sehen, kurz zusammengefasst, so aus:
*
-Entwickeln einer nativen Windows-Anwendung um eine möglichst breite Anwenderschicht zu erreichen und somit die Popularität von OSM weiter zu steigern.*

-Rohdaten in eine Firebird Embedded Datenbank schreiben

-Aus der Datenbank eigene Karten generieren, um so unabhängig von einer Internetverbindung zu sein und die OSM-Server zu entlasten (dabei sollen die Karten in einer ähnlichen Struktur vorliegen wie auf dem OSM-Server (256x256, PNG, Ordnerbaum: z/x/y.png)

-Routing implementieren

Puuh… Ganz schön viel, was ich mir da vorgenommen habe, und ich bin immerhin so ehrlich zu sagen, dass ich mit einer richtig funktionellen Anwendung nicht vor Ende des Jahres rechne.

In den letzten drei Wochen habe ich eine Klasse in Delphi geschrieben, die es mir ermöglicht, die Rohdaten in eine Firebird Embedded Datenbank zu schreiben, wobei ich selbst gestehen muss, dass da noch einiges gedreht werden muss. Momentan ist mir das Import-Skript noch zu langsam.

Was mich allerdings interessieren würde:

Wie rendert man nun die Karten aus diesen Daten? Die einfachste Möglichkeit wäre wohl, mich durch die Sourcen von Kosmos zu wurschteln und mir dort ein paar Dinge abzugucken. Könnte allerdings schwer werden, da ich mich erst in C# einarbeiten müsste, wenn ich das richtig gesehen habe. Lösungen, wo ich zusätzlich z.B. noch einen Perl-Interpreter bräuchte, würde ich gerne vermeiden, denn das gesteckte Ziel ist ja eine möglichst DAU-sichere Anwendung ohne dabei viel konfigurieren zu müssen (wohl aber zu können, wenn man denn möchte :wink: ). Osmarender und Mapnik liegen ja auch im Source vor, allerdings in Perl. Müsste ich mich also erst reinlesen…

Richtig genial wäre es, wenn einer von euch a) entweder eine oder mehrere Resourcen kennt, die die vorgehensweise beschreiben oder b) selbst mit dem Mechanismus vertraut ist und ihn mir kurz erklären könnte.

Für mich stellen sich zum Beispiel Fragen wie:

Wenn der Nutzer Geokoordinaten eingibt, woher weiß ich dann, welche Way-Elemente dazugehören?
Wie rechne ich am Geschicktesten die Geokoordinaten in ein Koordinatensystem um?

Für jeglichen Kommentar, und sei es nur ein “Schon wieder einer, der das Rad neu erfinden will”, bin ich dankbar.

Gruß und einen gewaltfreien 1. Mai,

Daniel

Hallo Daniel,

erst einmal herzlich willkommen bei OSM.
Es gibt natürlich :slight_smile: schon einiges zum Thema Routing.
Schau dir doch einmal die Seiten im Wiki an [
Dort findest du zum einen einiges an Informationen, die in OSM für das Routing zur Verfügung stehen.
Darüber hinaus dann auch Verweise auf bereits vorhandene Software, Libs und mehr.
Eventuell kann dir das manche Anregung bringen, dir als Basis helfen und natürlich den Austausch der Ideen fördern.

Viel Spaß]()

Hi mapdiger,

Die Wiki-Seite kannte ich schon, aber trotzdem danke. Aber dennoch wars n nützlicher Link, weil ich so auf FreeMap aufmerksam geworden bin, was in PHP geschrieben ist. Laut Beschreibung soll es ja die Kacheln selbst generieren können. Und PHP kann ich deutlich besser lesen als Perl oder Java… :wink:

Trotzdem freue ich mich natürlich noch über weitere Links, Ideen oder Resourcen aller Art… :wink:

Hallo Daniel,

Mir hat osmdiff geholfen das Rendering zu verstehen.

Eine kurze Zusammenfassung des m.E. für dich relevanten Teils: (runde kannst du theoretisch auch weglassen)

  1. BoundingBox berechnen/auslesen. (oben, unten, rechts, links sind im folgenden jeweils die BoundingBox-Werte)
  2. Breite und/oder Höhe angeben und daraus das jeweils andere berechnen.
  1. Koordinaten auf Bild projezieren (ausgehend von oben links: (0|0)

Viel Erfolg,
Malte

Hi E-Malte,

Danke für den Tipp mit OSMDiff. Ich werd mir das die Tage mal in Ruhe zu Gemüte führen. Deinen Pseudocode (ich liebe Pseudocode… :slight_smile: ) habe ich mal in Delphi umgesetzt. Herunterladen kann man das Ganze hier, wenn man interesse dran hat, so schwer war es ja nun nicht… :wink:

http://dl.danielgilbert.de/OSM/
[Windows, ZIP, 250k]
[Als Bound Box ist Deutschland vorgegeben]

Und eigentlich dürfte das nicht schwer sein, da auch noch einen Zoomfaktor einzubauen. :slight_smile:

Jedenfalls merke ich schon, dass man einige Dinge gerne vergisst. Jetzt muss ich dann wohl auch noch die Bounding - Box in der DB mit unterbringen. Oder ich lasse mir einfach den Höchsten und niedrigsten Lon und Lat Wert ausgeben, dass müsste eigentlich auch funktionieren… grübel