Mittels GPS-Koordinaten Route erstellen + "Max-Speed"

Hallo zusammen,

ich bin Neuling im Gebiet OSM und habe eine Frage, die ich mir mittels Suche und sonstiger Rechere nicht beantworten konnte.

Kann ich aus gegebenen GPS-Koordinaten eine Route erstellen und mir für die entsprechenden Abschnitte die Geschwindigkeitsbegrenzung ausgeben lassen?

Konkretes Beispiel:
Ich möchte für die Strecke von “48.6802804311768 , 8.23589456377702” nach “48.5418189807399, 8.47979356749116” die jeweiligen zulässigen Geschwingkeiten ausgegeben bekommen.

Bei OSM finde ich für einzelne Abschnitte die jeweilige Geschwindigkeit, es ist jedoch mühsam alles zusammen zu stückeln wenn man mal eine Strecke von bspw. 300km hat.

Vielen Dank für alle Antworten, Hilfe und Tipps dies bezüglich!

MfG Mike

Nahmd,

Ja.

Das müsstest Du beim jeweiligen Router nachschauen oder nachfragen.

Für welche Strecke zwischen den beiden Punkten?

Erster Schritt ist also auf jeden Fall ein Router.

Gruß Wolf

Hallo, also erstmal Danke für deine Antwort.
Leider komme ich mit den Routern nicht weiter.

Ich versuche mein Problem nochmal expliziter zu beschreiben.
ich habe folgende Route:
http://maps.google.de/maps?saddr=48.5418189807399,+8.47979356749116&daddr=B500,+76534+Baden-Baden&hl=de&ll=48.559909,8.468056&spn=0.096229,0.264187&sll=48.68028,8.235895&sspn=0.012,0.033023&geocode=FXuw5AIdMmSBAA%3BFWTN5gIdoaB9AClDtGg9WSGXRzFr2a5KdEqfNA&mra=ls&t=m&z=13

und nun möchte ich für jede Straße die Geschwindigkeitsbegrenzung für PKW wissen.
Mein bisheriges Vorgehen:
Bei openstreetmap.org den jeweiligen Bereich herangezoom, Daten geladen und auf die Straße geklickt. OSM zeigt mir dann (im besten Fall) “Max Speed = 70” (oder die entsprechenden Definitionen wie highway o.ä.)
Und so Stück für Stück durchgeackert. Das ist sehr mühsam, aber eine bessere Möglichkeit gibt es wohl nicht!?
Vorallem wenn ich eine GPS-Datenbank mit 30000 Punkten (jeden Meter einen) habe.

Gruß Mike

Wenn Du zu einer Route von Google Maps unbedingt maxspeed-Daten aus OpenStreetMap haben willst, wird Dir wohl nichts anderes übrig bleiben. Mir ist kein Programm bekannt, das einem Google-Straßenabschnitt einen OpenStreetMap-Straßenabschnitt zuordnet (und das nach Möglichkeit auch noch in Einklang mit den Google-Nutzungsbedingungen arbeitet).
Ich frage mich bloß, warum Du diese eigentümliche Kombination wählen willst. Netzwolfs Link zu den OSM-basierten Routern hast Du wahrgenommen?

Nahmd,

Das verstehe ich nicht. Denn zumindest dieser hier ist wirklich gut zu benutzen.

Geht es speziell um die von Google vorgeschlagene Route? Google scheint nicht einmal das GPX exportieren zu wollen. Da stellt sich die Frage, mit welchen Daten Du ein “liefer mir die Höchstgeschwindikeiten”-Programm füttern willst?

Oder benutzt Du Google nur, um eine Route uns zu zeigen?

Du hast also bereits ein GPX, und das hat nichts mit Google zu tun?

Da wirst Du selber etwas programmieren müssen: zu jedem Teilstück den am besten passenden Weg suchen. Denn es ist noch nicht einmal gesagt, dass Deine GPX-Punkte hinreichend genau auf den OSM-Ways liegen.

Ich wüsste nicht, dass es ein solches Tool gibt. Wozu auch?

Was Du versuchen könntest ist, mit Deinem GPX als Vorlage bei einem der OSM-Router so lange Zwischenpunkte zu setzen, bis die erzeugte Route mit Deiner Vorgabe entspricht, und nachschauen/nachfragen, ob die Betreiber des Routers die zum Generieren Deiner Route benutzten OSM-Ways irgendwie exportieren können.

Gruß Wolf

Danke euch beiden.

ich habe g-maps nur aus reiner Gewohnheit genommen und einfach nur ein Stück Strecke darzustellen und ich weiß wie man da den Link bekommt.
(bei z.B. dem vor dir, Wolf, habe ich es auch gefunden)
Mit dem “nicht weiter kommen” war gemeint, dass ich dort zwar Routen erstellt bekomme, die mir aber nicht sagen wie schnell ich fahren dar.
ich zerpflücke jetzt itoworld und osm.org und bastel die Teilstücke zusammen.

Gruß Mike

hab ein Excel-Sheet mit vielen Zahlen, also ich glaube, ja :wink:

ich denke das wird am schnellsten gehen. DANKE

damit ich es einfacher habe :wink:

Und wenn du dann max_speed hast, paß auf: es gibt jede Menge (kurvige) Straßen, auf denen man bei weitem nicht so schnell fahren kann wie erlaubt…
Aber die Router von OSM dürften max_speed verwenden, bei den OSM-Garmin-Karten ist das auch so.

Au wei… Da grabt einer einen 5 1/2 Jahre alten Post heraus… Aber ich erkläre auch warum.

Also: Im Grunde habe ich das gleiche Problem wie der funkyblaze 2013 hatte. Ich habe Routen als GPX vorliegen, bei denen jedoch Datum&Zeit fehlt. Und ich habe Bilder inkl. genauem Datum&Zeit. Das ganze möchte ich korrelieren und das funktioniert im ±10Sekundenrahmen auch schon sehr gut.

Bisher gehe ich so vor: Ich nehme die Route und tagge bei 5% der GPS-Koordinaten die korrespondierenden Zeitinformationen anhand der Bilder manuell nach. Routeconverter hat eine Funktion (Vervollständigen) die die Zwischenzeiten der nicht getaggten Bilder “linear” errechnet.
Das ganze wird dann als GPX nach JOSM exportiert und ich kann alle Bilder (ich rede von weit über 1.000 Bilder pro Track) leicht und einfach georeferenzieren. Das klappt auch im Rahmen der oben genannten ±10Sekunden ganz gut… Die Bilder sind beim Autofahren vom Beifahrer Hand"geschossen" worden. Was jedoch die Korrelation immer und immer wieder zu Nichte macht sind Routen die Wechselhaft durch kleinere Ortschaften führen… Autobahnen sind dank der annähernd gleichen (alle 5% der GPX-Koordinaten ist ja ein Fixpunkt) Geschwindigkeiten kein Problem. Die Überlandfahrten durch kleinere Ortschaften schon… Im Grunde muss ich da ganz anders vorgehen und die Fixpunkte an Ein- und Ausgänge der Ortschaften setzen um einen halbwegs gutes Geotagging zu bekommen. Jetzt kommt OSM ins Spiel (und ja die Router habe ich mir schon angeguckt)

Wenn ich eine Möglichkeit hätte die “max-speed” Info als “Speed” an meine GPS-Punkte zu setzen… Das wäre was feines… Ich bin auch relativ begabt im Scripten, sodass ich mir durchaus auch vorstellen könnte, da eine Mischung aus manuellen Fixpunkten und einem Ergänzen durch die max-speed-Werte zu bekommen (ich fahre in der Regel immer ziemlich genau max-speed)…
Ich würde es so gerne mal ausprobieren, ob ich damit nicht die Genauigkeit deutlich unter die ±10Sekunden-Abweichung im Mittel drücken könnte und würde eventuelle Skripte dann natürlich auf auf Github oder so hochladen, damit jeder was davon hat… Aber zunächst würde ich gerne das Thema nochmal hochholen, ob sich da eventuell schon was getan hat…

Im Grunde bräuchte ich eine Idee für folgenden Workflow: 2 GPX-Positionen (wegen der Richtung)->Dienst->Maxspeed für den ersten GPX-Punkt als Ergebnis

Hat da jemand eine Idee… Einen OSM-Server inkl. Router aufsetzen, wollte ich vermeiden :wink:
EDIT: Also falls der letzte Satz jetzt missverständlich klingen sollte… Bitte sagt mir wenn so eine “Abfrage” z.B. per API zuviel im Rahmen einer normalen Nutzung ist… (es ist auch nur für private Zwecke). Nicht das ihr jetzt hier herauslest, dass ich die Rechenleistung auslagern will… Das war eher darauf gemünzt, dass ich monatelang dran sitzen würde, bis ein eigener OSM-Server mit allem drum und dran läuft. Wenn das aber unvermeidlich oder die “einmaligen” Abfragelasten durch mich u hoch sind, werde ich den Weg natürlich gehen. Aber soviele GPS-Koordinaten sind es ja nicht. (es sind nur viele Bilder). Pro Track sind es im Endeffekt nur an jeder Kreuzung ein-zwei GPS-Koordinaten, weswegen ja auch die 5%-ige manuelle korrelation nicht allzuviel Aufwand macht.

Wenn ich dich richtig verstanden habe, möchtest du nur die Fotos mit GPS Daten verbinden, da die Fotos keine hinterlegt haben. Wenn das der Fall ist, Google mal nach Mapillary und Photo Georeferenzieren oder schau auf deren Hilfe Seite, da gibt es glaub ich ein Tool das so etwas kann.

Wenn es nur das ist.
Ich benutze seit Jahren schon JOSM/Plugins/Photo Geotagging. Komme damit gut zurecht.

https://wiki.openstreetmap.org/wiki/JOSM/Plugins/Photo_Geotagging

Gruß
surveyor54

Bei beiden Programmen wird aber in beiden Quellen, also GPX und Fotos, für den Korrelationsprozess die ZeitAngabe genutzt, welche aber in seinem GPX aber ja eben nicht vorhanden ist.
Deswegen ist sein bisheriges Vorgehen und die Erweiterung seiner Idee schon bemerkenswert… eine Lösung habe ich aber nicht.
Wenn er aber fit in python ist, dann das Mapillaryskript als Ausgangsbasis.

Hi @emga und @surveyor54… Ja Grundsätzlich ist es “nur” das… Aber da steckt ein großes “Aber” dahinter.

Ein Aber, da ich schon viel Erfahrung mit Geotagging habe und ich auch die Arbeitsweise von Mapillary (ich guck mir das Skript dennoch nochmal genau an) kenne… Ebenso sind mir auch die verschiedensten Programme zum taggen (Lieblingstool, ist hier für mich auch JOSM und “Geotagger” bekannt.

Aber es ist so wie @Harald Hartmann es schon herausgelesen hat… Um Fotos an einem Track zu justieren benötigt man im Track eine relativ “kleine” und Genaue" Zeit/Raum-Äuflösung. Also das, was auch herauskommt wenn man einen GPS-Tracker oder eine Tracking-App mitlaufen lässt (mache ich ja auch bei anderen Projekten) In meinem Falle habe ich fahrten in den Urlaub (Süddeutschland->Norddeutschland) die Hauptsächlich über Land führten (weil schöner ;-))… Leider haben wir damals keinen “Tracker” mitlaufen lassen… Eine manuelle Georefferenzierung habe ich mal angefangen, aber bei mehreren Urlaubsfahrten mit insgesammt weit mehr als 10.000 Einzelbildern ist dass kein Zuckerschlecken…

Um mir die Arbeit einfacherer zu machen habe ich einfach mal einen GPX-Track gefaked (da die Route ja noch bekannt ist und auch anhand der Fotos schnell mit modernen “Routern” nachjustiert werden kann - war das auch sehr einfach zu machen. Diese Route kann ich dann als GPX exportieren.

Da die Router aber ja keine Ahnung haben an welchem Ort man wie schnell gefahren ist, habe ich diese Informationen einfach über die bekannten Zeiten von Fotos an bekannten Orten (z.B. Kreuzungen) nachgetaggt… Ich habe erwartet, das hier riesige Abweichungen zustande kommen, da man ja auch mal Pausen macht, oder langsam fährt… Zu meiner Überraschung sind diese Abweichungen selbst bei 1000+km und 8h+ Autofahrten relativ gering, wenn man etwa 5% der Fotos als Basis für die Zeiten nimmt und dann nach dem Prinzip der Binären Teilung (Also erst Anfang und Ende → Dann die Mitte → Wieder die Mitte → Wieder die Mitte usw.) die Werte linear vervollständigt…

Stichprobenartig habe ich dann (in den Mitten die dann errechnet waren) Spitzenabweichungen von ca. ±10 Sekunden gehabt… Was die Fotos schon fast hinreichend genau (zumindestens für meine Ursprünglichen Zwecke) georeferenziert…

Da das so gut funktioniert hat… Habe ich mir überlegt… ob man es nicht noch verbessern kann und ob man nicht herausfinden kann, wo die größten Abweichungen entstehen…

Naja das ist kein großes Hexenwerk, denn die Abweichungen entstehen genau an den Stellen wo die Abweichung zum arithmetrischen Mittel der Geschwindigkeit am größten ist. Also

a) an Ampeln
b) auf Parkplätzen
c) an Ortseinfahrten
d) an Ortsausfahrten
e) an Kreiseln

All diese Punkt sind aber in OSM (größtenteils) wunderbar erfasst… Weswegen ich (zunächst mal nur) die Idee hatte diese “linear” berechneten fehlenden Zeitinformationen der Zwischenstücke nicht Linear (also einfach Entfernung des Anfang<->Endpunkts geteilt durch die Anzahl der Zwischenpunkte) berechnen zu lassen sondern anhand der gültigen Höchstgeschwindigkeiten der jeweiligen Straße zu berechnen.

Also wenn zwei Zwischenpunkte in der 30’er Zone liegen und die anderen alle auf der 70’er Strecke, wird vermutlich die Fahrt von dem einen zum anderen 30’er GPS-Punkt mehr Zeit in Anspruch genommen haben, als die gleiche Strecke auf der 70’er Strecke :wink: Und zwischen dem 30’er und dem 70’er Punkt wird vermutlich annähernd linear Beschleunigt worden sein.

In meiner gedankelichen Thorie sollte damit die Abweichung von ±10 Sekunden deutlich reduziert werden können… Eventuell führt dies sogar dazu, das viel weniger als 5% Fixpunkte nötig sind…

In einem weiterem Schritt könnte man auch noch den Kuvenradius (http://blog.openstreetmap.de/blog/2016/02/wochennotiz-nr-290/), Ampeln, Ortsgrenzen mit einbeziehen…

Und da ich diesen Thread hier gefunden habe, wollte ich mal nachfragen, ob sich da in 5 Jahren schon Wissen “drüber” angesammelt hat oder ob ich bei Null anfangen muss :wink:

:tldr
Eigentlich noch mal das gleiche wie in meinem ersten Beitrag nur mit ausführlicherer Motivation.

**Edit1: **
P.S. Was sich auch noch verwursten ließe wäre die jeweilige Steigung der Strecke - die ich lustigerweise habe, da man die Routen mit den SRTM-Daten abgleichen kann und die Höhe einer Position ermitteln kann (genau so eine Abfrage wäre bei OSM mein Glücksfall). Also an Steigungen wird eine Beschleunigung von 30km/h auf 70km/h im Mittel länger dauern als bei einem Gefälle :wink:

Noch eine Frage am Rande… weiß jemand ob man bei OSM eine Richtungsbezogene Abfrage bei der API machen kann also:
Gib mir alle Straßensegmente in einem Window, die in die Richtung “78°” zeigen?

P.P.S. Ich denke fast, dass das hier jetzt doch zu komplex wird… :slight_smile: Ich werde berichten wenn ich fortschritte machen, aber in dem Thread sollten wir im Bezug auf die Frage des damaligen OT bleiben, vieleicht will der ja auch noch eine Antwort haben :wink:

P.P.P.S. Ich habe mittlerweile auch bemerkt das die API von OSM dafür (auf Grund der Nutzungsbedigung) nicht geeignet ist und werde daher doch einen eigenen OSM-Server brauchen…

Edit2:
Noch ein Nachtrag…

Ich bin ein beachtliches Stück weiter gekommen und habe mir jetzt fix ein Phython-Skript zusammengebastelt, welches genau diese Abfrage erledigt. Nutzen tue ich dabei die OverpassAPI die laut Usage policy

bis zu 10.000 Queries pro Tag erlaubt, ohne das ich jemanden damit störe - imho. ist overpass hier auch der richtigere Ansatz, da es hier ja um das “lesen” geht, was ja die osm api gerade nicht will (siehe oben)…

Ich gebe also in das Skript eine gpx-datei mit den Tracks ein, und erhalte den “Way” der jeweiligen Straße in 5m Umkreis um dn GPS-Punkt, der Rest ist jetzt Scriptlogik…

Der bisherige Python-Code ist so simpel, dass ich ihn hier kurz niederschreiben will

import gpxpy
import gpxpy.gpx
import overpass;

api =  overpass.API();
gpx_file = open('mygpx_file.gpx', 'r')
gpx = gpxpy.parse(gpx_file)

for track in gpx.tracks:
    for segment in track.segments:
        for point in segment.points:
            searchstring = 'way(around:5.0, {0}, {1});'.format(point.latitude, point.longitude)
            response = api.Get(searchstring)
            print response;

Ich nutze hierbei den Parser https://github.com/tkrajina/gpxpy und den Wrapper
https://github.com/mvexel/overpass-api-python-wrapper

Damit steht an dieser Stelle eigentlich auch eine Lösung für den Threadersteller bereit.
Naja, fast… da man natürlich das Ergebnis noch parsen muss…