Max Speed für alle Streckenabschnitte einer Route bestimmen

Hallo,
ich bin komplett neu in der Welt der Karten. Ich möchte keine Karten anzeigen sondern Zusätzliche Informationen über bekannte Strecken extrahieren.
Ich versuche zur Zeit eine Route zu erstellen und hinterher alle Streckenabschnitte die maximale Geschwindigkeit zu ermitteln.

Bisher bin ich leider nicht viel weiter gekommen als einen Track in einer .gpx Datei zu speichern (extrahiert von http://map.project-osrm.org/).Ich.Ich) verstehe auch das Format nur leider sind die Daten die man von den Routern erhält recht sperlich.

Ich möchte daher die Datei an Openstreetmap übertragen und dann mit “allen” Informationen die für die Trackpunkte verfügbar und für mich relevant sind abfragen. Vor allem interessiert mich hierbei die Max Speed Eigenschaft.

Ich habe mir die REST API (v0.6) angesehen habe jedoch das Gefühl das diese ausschließlich für die Aktualisierung des Kartenmaterials ist.

Wie kann ich meine Wegpunkte mit zusätzlichen Informationen anreichern, existiert hierfür eine API oder verstehe ich die gefundene einfach nicht korrekt?

Danke für eure Ideen.

leider ist Deine Frage nicht ganz eindeutig.
du möchtest auf Teilstrecken(?) eines GPX-Tracks die maxspeeds herausfinden?
Ich hätte da jetzt keine ultimative Lösung, nur 2 Beispiele die nah rankommen:
OSM-like: Track in jOSM laden und GPX-Ebene/Track nach Geschwindigkeit einfärben
http://www.crossingways.com (recht rudimentär, aber brauchbar)

Ich möchte eigentlich einfach nur eine Route von a nach b nehmen und irgentwie für diese strecke alle max oder avg speeds ermitteln.

ich glaube, da bist du bei Osm auf der falschen Baustelle. Bei uns werden gpx-Daten vorrangig dazu verwendet, neue Strecken in Osm einzutragen.
Zur Analyse von gpx-Daten gibt es massenhaft Software: http://lmgtfy.com/?q=gps+analyse+software#seen

Gruss
walter

Tach.

Deine Aufgabenstellung ist gleichzeitig trivial und recht schwierig.

Die GPX-Datei enthält (bei langen Strecken sehr sehr) viele Wegpunkte jeweils als -Eintrag mit Breite und Länge. Jeder dieser Einträge entspricht einem Punkt (Node) in der OSM-Datenbank.

Du kannst (genauer könntest, dazu gleich) zu jedem RTP ein winzig kleines Rechteck erzeugen, indem Du zu/von Lan und Lon jeweils einen sehr kleinen Wert addierst/subtrahierst. Dieses Rechteck nennen wir eine Bounding-Box (BBOX): sie besteht aus minlon undmaxlon, minlat und maxlat und wird als “minlon,minlat,maxlon,maxlat” dargestellt.

Den Inhalt jeder dieser Bounding-Boxen kannst Du jetzt von der API abrufen. Du erhältst jeweils einen Haufen Nodes und ein paar Ways. Die Nodes tragen lat und lon, und Du suchst jetzt die Node heraus, die am nächsten an Deinem rtept liegt, und die Node, die am nächsten am nächsten rtept liegt. Als nächstes suchst Du den Way oder die Ways, auf denen Du beide Knoten findet. Was Du machst, wenn Du keinen Way oder mehr als einen findest, “is left as exercice to then students™”. Sollte nicht sehr oft vorkommen.

Der gefundene Way trägt attribute, darunter möglicherweise “maxspeed=…”. Wenn Du kein solches Attribut findest, kannst Du z.B. aus dem Straßentyp “highway=” ein Maxspeed ableiten.

Das gehst Du für alle rtept durch, und Du hast Deine gewünschten Daten.

Jetzt zu dem “könnte” von oben: wenn Du einige tausend bbox-Abragen auf die API machst, sind die Admins des OSM-DB-Servers unglücklich, und es könnte ein schwarzer Van mit schwarz getöten Scheiben vor Deinem Haus auftauchen.

Du musst also den hier skizzierten Algorithmus noch deutlich optimieren.

Orange Grüße
Der Assistent

Edit: Typo

Danke für deinen Ideen,
ich habe jetzt einen Lösungsweg gefunden, zummmindest dachte ich das bis gerade eben.

Ich frage meine Route nun bei einem Anbieter (CloudMate) ab. Ich erhalte hierbei eine gpx Datei:

<?xml version="1.0" encoding="UTF-8"?>

<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="CloudMade" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
  <metadata>
    <author>
      <name>CloudMade</name>
      <email id="support" domain="cloudmade.com"/>
      <link href="http://maps.cloudmade.com"/>
    </author>
    <copyright author="CloudMade">
      <license>http://cloudmade.com/faq#license</license>
    </copyright>
    <time>2013-05-11T11:11:09</time>
  </metadata>
  <extensions>
    <distance>1603</distance>
    <time>173</time>
    <start>Sägerstraße</start>
    <end>Im Gisinger Feld</end>
  </extensions>
  <rte>
    <rtept lat="47.259476" lon="9.583953">
      <desc>Head southeast on Sägerstraße, 0.2 km</desc>
      <extensions>
        <distance>207</distance>
        <time>25</time>
        <offset>0</offset>
        <distance-text>0.2 km</distance-text>
        <direction>SE</direction>
        <azimuth>123.3</azimuth>
      </extensions>
    </rtept>
    <rtept lat="47.258472" lon="9.586249">
      <desc>Turn left at Austraße, 60 m</desc>
      <extensions>
        <distance>60</distance>
        <time>7</time>
        <offset>2</offset>
        <distance-text>60 m</distance-text>
        <direction>NE</direction>
        <azimuth>32.7</azimuth>
        <turn>TL</turn>
        <turn-angle>270.2</turn-angle>
      </extensions>
    </rtept>
    <rtept lat="47.258926" lon="9.58668">
      <desc>Turn right at Stefan-Allgäuer-Weg, 0.2 km</desc>
      <extensions>
        <distance>162</distance>
        <time>19</time>
        <offset>3</offset>
        <distance-text>0.2 km</distance-text>
        <direction>SE</direction>
        <azimuth>120.8</azimuth>
        <turn>TR</turn>
        <turn-angle>90.3</turn-angle>
      </extensions>
    </rtept>
    <rtept lat="47.258148" lon="9.588493">
      <desc>Turn left at L60/Nofler Straße, 0.4 km</desc>
      <extensions>
        <distance>400</distance>
        <time>21</time>
        <offset>6</offset>
        <distance-text>0.4 km</distance-text>
        <direction>NE</direction>
        <azimuth>32.7</azimuth>
        <turn>TL</turn>
        <turn-angle>271.6</turn-angle>
      </extensions>
    </rtept>
    <rtept lat="47.259918" lon="9.590876">
      <desc>Slight right at Hauptstraße, 0.7 km</desc>
      <extensions>
        <distance>689</distance>
        <time>83</time>
        <offset>13</offset>
        <distance-text>0.7 km</distance-text>
        <direction>E</direction>
        <azimuth>98.0</azimuth>
        <turn>TSLR</turn>
        <turn-angle>27.5</turn-angle>
      </extensions>
    </rtept>
    <rtept lat="47.25869" lon="9.598472">
      <desc>Turn left at Hauptstraße, 32 m</desc>
      <extensions>
        <distance>32</distance>
        <time>4</time>
        <offset>30</offset>
        <distance-text>32 m</distance-text>
        <direction>NE</direction>
        <azimuth>37.4</azimuth>
        <turn>TL</turn>
        <turn-angle>292.1</turn-angle>
      </extensions>
    </rtept>
    <rtept lat="47.258881" lon="9.598781">
      <desc>Slight left at Runastraße, 0.2 km</desc>
      <extensions>
        <distance>237</distance>
        <time>28</time>
        <offset>32</offset>
        <distance-text>0.2 km</distance-text>
        <direction>N</direction>
        <azimuth>3.0</azimuth>
        <turn>TSLL</turn>
        <turn-angle>315.5</turn-angle>
      </extensions>
    </rtept>
    <rtept lat="47.260757" lon="9.599379">
      <desc>Turn left at Im Gisinger Feld, 53 m</desc>
      <extensions>
        <distance>53</distance>
        <time>6</time>
        <offset>40</offset>
        <distance-text>53 m</distance-text>
        <direction>NW</direction>
        <azimuth>301.6</azimuth>
        <turn>TL</turn>
        <turn-angle>282.3</turn-angle>
      </extensions>
    </rtept>
  </rte>
</gpx>

Diesem Dokument entnehme ich aus dem ersten extensions block das die Gesamtstrecke eine länge von 1603 m hat und dafür 173 Sekunden gebraucht werden. Gebe ich die selben Nav punkte z.b. bei OSRM ein komme ich auf die selben Werte.
Soweit so gut.

Nun brauche ich aber die genauen werte für alle routen abschnitte. Glücklicher weise werden diese als rtept liste mitgliefert. Jeder Routen punkt enthält hierbei seine distance und time.

Ich war nun der Meinung, dass wenn ich die Summe über alle Routen bilde ich einen ähnlichen Wert wie den Gesamtwert erhalten müsste. Die wirklichen Ergebnisse sind aber wie folgt:
Strecke: 1840m statt 1603
Zeit: 193s statt 173s

Wie kann dieser große unterschied zustande kommen?

Ich weiß das ist nicht das ideale Forum aber viele kennen sich ja hier mit dem .gpx Format aus und ich komme einfach nicht weiter.

Sieht nach einer guten Frage für den CloudMade Support aus.

Heißt das ich gehe wahrscheinlich richtig in der Annahme das es eigentlich anderes seien müsste? oder haben die Werte azimuth und so irgent einen einfluss den ich berechnen muss?

ich habe auch schon den Support angefragt… aber keine Antwort erhalten :(. Kennt jemand einen vergleichbaren Anbieter?

Hier im Beispiel haben die Werte zueinander gepasst. Keine Ahnung warum es in deinem Fall nicht funktioniert hat, daher der Verweis auf den Support. Schade, dass da niemand antwortet.

Ja anhand dieses Beispiels hatte ich auch meine ursprüngliche Annahme getroffen. Leider scheint die summe aller strecken vom Gesamtwert immer stärker abzuweichen je größer/länger die Strecke wird :confused: schade.

Naja vielleicht meldet sich jemand auf deinen Stack Overflow Post. Dann können wir den thread hier ja schließen.

Tach.

Ich tippe auf die Differenz zwischen der topographischen und der Luftlinien-Entfernung jeweils zwischen zwei Turn-Points (rtept). Die ist 0, wenn ein Abschnitt schnurgerade ist, und kann beliebig groß werden, wenn eine Luftlinienentfernung von einem km in Serpentinen überwunden wird, sofern es auf der Serpentinenstrecke keine Abzweigmöglichkeit gibt.

Orange Grüße
Der Assistent

Alternativ zu CloudMade: OSRM hat natürlich auch eine Server API, die einiges an Details als JSON zurückliefert. Bitte API Usage Policy sorgfältig durchlesen und beachten.

Hey die idee hatte ich auch, aber wie kann es sein das die Zeit die notwenig ist einen Streckenabschnitt zu überqueren von solchen Faktoren abhängt? Diese müsste doch stabiel bleiben.

Die Idee würde ich verwerfen, Cloudemade rechnet anscheinend einfach falsch.

Schau Dir mal das letzte Stück der Strecke an (zwischen Hauptstraße und Gisinger Feld auf der Runastraße). Das hat 209 Meter Luftlinie (sagen JOSM und Viking) und 211 Meter Weglänge (sagt JOSM, dem ich in diesen Dingen traue). In der GPX-Datei hat das Stück 237 Meter. Mehrere solcher 12% Fehler aufsummiert können dann auch gut die 1840/1603 ergeben. Vielleicht ist wenigstens die Abweichung konstant, aber verlassen würde ich mich nicht drauf, und wenn dann mindestens mal in Ostwest- und Nordsüdrichtung abprüfen…

Grüße, Max

OSRM liefert für beides fast gleiche Werte: aus den Fahranweisungen werden am Schluß der Verarbeitung sehr kurze Wege herausgefiltert, die einen Autofahrer wohl eher verwirren dürften.

Ich arbeite jetzt mit MapQuest, dort sind die Werte wie ich sie erwartet hätte, also übereinstimmend.

Danke für eure Hilfe