... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Streckenlänge Berechnung (Verfahren)
#1
Hallo,

ich möchte verstehe, wie RouteConverter die Länge eines Tracks ermittelt. Hierzu die beigefügte Datei mit zwei Punkten als .gpx und exportiert als .xlsx mit einer Zusatzspalte, in der die Länge mit Pythagoras (siehe Kompf, einfachstes Verfahren) berechnet wird:
Distanz gemäß RouteConverter: 3.251 m
Distanz gemäß Pythagoras:       3.809 m
Für verschiedene Strecken finde ich jeweils Unterschiede zwischen 80 und 90%, hier 85,35%; die RouteConverter-Strecken sind immer kürzer.

Danke, Michael
[url=https://nowtransfer.de/rclength1.gpx][/url]
Reply
#2
Hallo Michael,

mit der vereinfachten Formel komme ich auf 3,183 km, was zwar nicht ganz passt, aber doch schon nah dran ist.
Wenn man spasshalber Latitude und Longitude vertauscht, dann komme ich auf 3,905km, das ist zwar nicht ganz Dein 3,809km, aber nah dran.

Kann es sein, dass bei deiner Formel was vertauscht ist?

Servus
Richard
Reply
#3
(18.08.2020, 15:52)MichaelRC Wrote: Hallo,

ich möchte verstehe, wie RouteConverter die Länge eines Tracks ermittelt. Hierzu die beigefügte Datei mit zwei Punkten als .gpx und exportiert als .xlsx mit einer Zusatzspalte, in der die Länge mit Pythagoras (siehe Kompf, einfachstes Verfahren) berechnet wird:
Distanz gemäß RouteConverter: 3.251 m
Distanz gemäß Pythagoras:       3.809 m
Für verschiedene Strecken finde ich jeweils Unterschiede zwischen 80 und 90%, hier 85,35%; die RouteConverter-Strecken sind immer kürzer.

Danke, Michael
[url=https://nowtransfer.de/rclength1.gpx][/url]

Du hast die Formel falsch in Excel programmiert, die beiden Streckenfaktoren fehlen. Mit

Code:
=WURZEL((71,5*(A3-A2))^2+(111,3*(B3-B2))^2)*1000

bekommst du 3184 m als Ergebnis bei deinem Muster, was weniger als 70 m oder 2% Unterschied sind. Diese pythagoreische Formel liefert auch nur für einzelne, sehr kleine Entfernungen einen halbwegs brauchbaren Näherungswert. Für alles andere führt kein Weg an der Berechnung der Orthodrome vorbei, ich vermute, daß RC hierzu eine vorhandene Bibliothek verwendet.
Grüße
Hans

Reply
#4
(19.08.2020, 07:33)nordlicht Wrote: [..]
ich vermute, daß RC hierzu eine vorhandene Bibliothek verwendet.

So ähnlich... ich habe dazu Code portiert von einem deutlich komplexeren Modell, das die Erde akkurater modelliert und damit auf der ganzen Erdoberfläche genauere Entfernungsberechnungen ermöglicht. Das Ergebnis ist hier:
https://github.com/cpesch/RouteConverter...aring.java

Im Quelltext stehen die Details.
--
Christian
Reply
#5
Danke, habe verstanden.
(Wie) Ist es möglich, die Längen einzelner Segmente zu exportieren, die ja in der Punktliste (Spalten Distanz oder Distanzunterschied) angezeigt werden? Habe erfolglos mit .XLSX etc. experimentiert.
Alternativ könnte ich auch eine Berechnung vornehmen, allerdings kann ich kein JAVA und deshalb die GitHub-Anwendung nicht ohne Weiteres nutzen.
Danke, Michael
Reply
#6
(22.08.2020, 16:14)MichaelRC Wrote: ... eine Berechnung vornehmen
Ich habe jetzt als Alternative zur Standard-Formel


Code:
=WURZEL((71,5*(A3-A2))^2+(111,3*(B3-B2))^2)*1000
nach der Haversine-Formula diese LibreOffice-Formel eingesetzt:


Code:
Distanz [m] =6371000*ARCCOS(COS(BOGENMASS(90-B9))*COS(BOGENMASS(90-B10))+SIN(BOGENMASS(90-B9))*SIN(BOGENMASS(90-B10))*COS(BOGENMASS(A9-A10))))


Abweichung der Strecken-Summe für eine Test-Datei:


  • RouteConverter = 2.680 m,
  • Standard-Formel = 2.635 m,
  • Haversine-Formel = 2.676 m.
Reply
#7
(22.08.2020, 16:14)MichaelRC Wrote: (Wie) Ist es möglich, die Längen einzelner Segmente zu exportieren, die ja in der Punktliste (Spalten Distanz oder Distanzunterschied) angezeigt werden? Habe erfolglos mit .XLSX etc. experimentiert.

Den Wunsch das zu tun habe ich auch schon mal geäußert, wurde abgeblockt. Letztlich habe ich keine Ahnung warum Christian das grundsätzlich nicht erlaubt bzw. unterstützt. (Ich meine damit, warum man die Positionsliste wie sie eingestellt und zu sehen ist, nicht exportieren kann).

MfG
Reply
#8
(23.08.2020, 10:40)Zeppelin Wrote: Den Wunsch das zu tun habe ich auch schon mal geäußert, wurde abgeblockt.

Der Darstellung möchte ganz deutlich widersprechen. Ich verstehe das Problem und begrüsse eine Lösung. Da ist nichts, was ich blockiere oder nicht erlaube.

Nur zu, implementiert Lösungen und stellt Pull Requests!

(23.08.2020, 10:40)Zeppelin Wrote: Letztlich habe ich keine Ahnung warum Christian das grundsätzlich nicht erlaubt bzw. unterstützt. (Ich meine damit, warum man die Positionsliste wie sie eingestellt und zu sehen ist, nicht exportieren kann).

Wie gesagt, ich erlaube das und unterstütze Lösungen. Wenn man sich den Quelltext genauer anschaut, wird man feststellen, dass es folgende Herausforderungen gibt:

  1. In die Zwischenablage werden durch Cut/Copy 2 Formate geschrieben: eine Liste von Objekten der Klasse NavigationPosition, wenn man innerhalb von RouteConverter Paste aufruft, und dieselben Objekte als Glopus-Format serialisiert.
  2. Das Glopus-Format unterstützt keine Distanzen.
  3. Distanzen stehen nur auf der View-Ebene zur Verfügung aber nicht im Model, lassen sich also nicht durch die NavigationFormate schreiben, die nur auf dem Model arbeiten.
  4. Im Endeffekt müsste die komplette Cut/Copy/Paste-Logik neu implementiert werden und die Daten aus dem View mit dem Model kombinieren.
  5. Ich glaube, das sind viele Stunden Arbeit.

Irgendwie kommt mir das bekannt vor - das habe ich doch schon hier im Forum mal beschrieben. Wieder 15 Minuten fürs Forum aufgewendet und nicht fürs Programmieren... so geht die kostbare Zeit dahin.
--
Christian
Reply
#9
Hallo Christian,

danke für deine Erläuterungen. Wenn das wirklich so kompliziert ist, geht es sicher auch ohne auslesen der Distanz.
Ich programmiere in VB/NET und ich dachte die Tabelle bzw. Übersicht wäre eine Art 'ListBox' bzw. 'ListView'. Unter VB ist das auslesen einer gefüllten Box recht einfach. z.B.:

My.Computer.Clipboard.SetText(ListView1.Items(ListView1.SelectedItems(0).Index).Text & "," & ListView1.Items(ListView1.SelectedItems(0).Index).SubItems(1).Text & "," & ListView1.Items(ListView1.SelectedItems(0).Index).SubItems(2).Text & "," & ListView1.Items(ListView1.SelectedItems(0).Index).SubItems(3).Text)

Damit würde man eine komplette Zeile mit 4 Spalten durch ',' getrennt in die Zwischenablage kopieren. Mit einer For...Next Schleife dann der Rest der Zeilen in die Zwischenablage. So könnte man natürlich auch gleich in eine Datei schreiben lassen etc.

Wenn das unter Java nicht geht, wie gesagt ich kann mit leben.


MfG
Reply
#10
(24.08.2020, 08:34)Zeppelin Wrote: Wenn das unter Java nicht geht, wie gesagt ich kann mit leben.

Es geht schon. Und hätte ich es damals anders gebaut, wäre es einfacher...
--
Christian
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)