Einzelnen Beitrag anzeigen

Graberius

Registriert seit: 22. Nov 2013
11 Beiträge
 
Delphi XE5 Architect
 
#7

AW: Algorithmus für Track-Analyse (Roadbook)

  Alt 6. Dez 2013, 08:57
Hallo,


Ziel ist es nun Orte und interessante Punkte (aus den Ort/Punkt Wertepaare) entlang einer Strecke zu ermitteln, welche auf dem Track oder nahe am Track liegen.
Ich denke das Vorhaben sieht auf den ersten Blick trivial aus - bei genauer Betrachtung gibt es doch so manchen Sonderfall und in bin mir noch nicht ganz sicher wie ich den Algorithmus angehe.

Bei einer direkten Strecke von A nach B und einer durchschnittlichen „Ortsdichte“ und dem entsprechend angepassten Fangradius passt mein vorhandener Algorithmus. Schwieriger wird es wenn:
  • Start/Ende an gleichem Punkt
  • Strecke kreuzt (mehrfach)
  • Stecke wird parallel in eine Richtung doppelt/mehrfach gefahren
  • Stecke wird parallel in gegengesetzte Richtung doppelt/mehrfach gefahren
  • Große Städte sind reduziert auf eine Koordinate -> Fangradius zu klein, Stadt fehlt
  • Fangradius zu groß bei hoher Ortsdichte -> zu viele Orte die nicht durchfahren werden
  • Fangradius zu klein bei geringer Ortsdichte z.B. Alpen -> zu wenig Orte an der Strecke

Momentan habe ich nur den Ansatz von „Strecke A nach B“ umgesetzt. Hier durchlaufe ich das Track-Array und vergleiche für jeden Trackpunkt den Abstand zu jedem Ort der gefilterten Orts-Liste. Liegt dieser im Fangradius, so wird der Ort einmalig in einer weiteren Liste abgelegt. Gleichzeitig wird der geringste Abstand Ort/Trackpunkt ermittelt und das Minimum dann dem Ortspunkt in der weiteren Liste zugeordnet.

Gefühlt wird ein „vollautomatische“ Algorithmus nicht funktionieren. Beispiel: Strecke streift den Bodensee, Koordinaten liegen aufgrund der Größe nicht im Fangradius -> manuelle Zuordnung wahrscheinlich notwendig.

Hoffe dass die Beschreibung dieses mal etwas klarer ist

[Edit] Das ganze kann dann so aussehen, siehe Bild im Anhang

Gruß DelphiFan2008
Da hasst du dir ja was Vorgenommen
Ich hoffe ich kann dir ein bisschen helfen obwohl uff, das ist ein grosses Projekt.
Du hast ja diese Liste mit Ausnahmebehandlungen.
Das wichtigste ist das du eventuell anhand von Geografischen gegebenheiten wie
  • Bevölkerungsdichte
  • Strassennetzdichte
  • Geografische Lage (Unterland, Gebierge, Hochgebierge,....)
  • Bereits bekannte Orte
eine grobe Vorsortierung machst.
Ebenfalls könntest du eine Art erinnerung Programmieren die sagen wir mal ein Dreieck alle 5km oder
so "Zeichnet" und nach bereits bekannten Punkten sucht, anhand von diesem Wissen kannst du dann deinen Fangradius erweitern.
Nun kannst du mehrere Algorythmen in Abhängigkeit dieser Filterungen erstellen.
Wenn du eine Strecke doppelt befahrst, einmal hin und dann wieder zurück, kannst du die Werte +- aus der
vorangegangenen Fahrt wiederverwenden.
Komplexer wird es wenn du die vorangegangene Route Kreuzt, da wäre ein Algorythmus der dir aus jeder zur Verfügung stehenden
möglichen Route innerhalb eines Radius (dieser Radius umschliesst Tangential die Routenradien die aus den möglichen Routen bestehen),
die Tracks schon Vorberechnet. Diese können dann beim befahren der Strecke erweitert werden.
Du könntest natürlich auch den Fangradius vergrössern sobald du eine Rooute Kreuzt und zwar um aus einem Fanktor der aus der Anzahl
möglichen Routen oder Kreuzungen besteht.

Puhh jetzt aber mal genug Geschrieben.
Hoffe das hilft dir weiter und viel Spass noch beim Coden
  Mit Zitat antworten Zitat