Distanz zweier Punkte

Moin, ich hab mich natürlich im Netz mal umgeschaut, aber mal davon abgesehen, dass ich verschiedene Formeln gefunden habe, waren alle für Daten im Grad,Minuten,Sekunden-Format. Hat vielleicht jemand mal einen Link zu einer äußerst präzisen Formel die mit dem von OSM verwendeten Format - 53.5640262, 9.9911691 - funktioniert UND die am besten gleich ein Beispiel in irgendeiner Programmiersprache dabei hat, damit ich nicht noch irgendwelche Zeichen aus der Welt der Mathematik im Netz finden und erforschen muss, um das ganze zu verstehen? Falls es für sowas auch auf osm.org eine akkurate Formel geben sollte > unter Development hab ich’s nicht gefunden…

Na, Du könntest einfach bei den gefundenen Formeln die Minuten und Sekunden gleich Null setzen und bei der Gradzahl Deine Kommazahlen einsetzen :slight_smile: Vom Geocaching kenne ich das GC-Excel-Tool: http://www.thomas-siems.de/geocaching/links.htm#software Aus der Excel-Tabelle (Tab: Richtung und Entfernung) müsstest Du auch die Formel extrahieren können. Das rechnet zwar auch mit Grad, Minuten, Sekunden, funktioniert aber auch mit Kommazahlen… Grüße, Tobi-Wan

Danke, für den Tipp.

http://forum.openstreetmap.org/viewtopic.php?id=1723 (Post #3) Das war vor ein paar Tagen hier drin. Die Formel ist direkt aus Excel übernommen, wobei die Namen “Latx” und Lonx" von mir im Tabellenblatt so definiert waren. Da kannst Du auch Zellbezüge a la “A1” reinschreiben. Kristian

Die Formel von krza gilt allerdings nur auf einer Kugeloberfläche und der Fehler liegt damit soweit ich weiß in unseren Breitengraden durchschnittlich bei ein paar Promille. Weiß nicht, ob dir das reicht, da du ja nach einer “äußerst präzisen” Formel fragst. Falls du die Distanzen auf Ellipsoiden berechnen willst, gibts hier (http://www.movable-type.co.uk/scripts/latlong-vincenty.html) verwendbaren Code dafür und auch die Parameter für ein paar Ellipsoide.

Bei kismet (kismetwireless.net) ist in der gpsd.cc auch eine hübsche Formel drin, die die Daten im OSM-Format erwartet, also 53.5640262, 9.9911691 double EarthDistance(double in_lat, double in_lon, double in_lat2, double in_lon2) { double x1 = in_lat * M_PI / 180; double y1 = in_lon * M_PI / 180; double x2 = in_lat2 * M_PI / 180; double y2 = in_lon2 * M_PI / 180; double dist = 0; if (x1 != x2 && y1 != y2) { dist = sin(x1) * sin(x2) + cos(x1) * cos(x2) * cos(y2 - y1); dist = CalcRad((double) (in_lat + in_lat2) / 2) * (-1 * atan(dist / sqrt(1 - dist * dist)) + M_PI / 2); } return dist; } double CalcRad(double lat) { double a = 6378.137, r, sc, x, y, z; double e2 = 0.081082 * 0.081082; lat = lat * M_PI / 180.0; sc = sin (lat); x = a * (1.0 - e2); z = 1.0 - e2 * sc * sc; y = pow (z, 1.5); r = x / y; r = r * 1000.0; return r; } Gleich hübsch in C :slight_smile: Gruß iaby