![]() |
Entfernungsberechnung
Hallo,
kennt jemand eine Möglichkeit um die Entfernung zwischen zwei Orten über Straßen zu ermitteln. Gibt es da irgendwelche API's zu Programmen oder Schnittstellen im Internet??? Vielen Dank an alle! |
Re: Entfernungsberechnung
Hi!
Nein, ich kenne keine solche Möglichkeit. Dafür müsste auch jemand seine Datenbank mit allen Verkehrswegen zur Verfügung stellen... Ggf. kannst du das bei Map24 einkaufen (bei relativ hohem Jahresmindestumsatz). Du kannst aber über eine GeoDB die geographischen Koordinaten ermitteln und dann die direkte Entfernung ermitteln... Wenn du möchtest, kann ich mal in meinem Quellenfundus gucken. Mamphil |
Re: Entfernungsberechnung
Hi Mamphil,
vielen Dank für deine Antwort. Wenn du mir was aus deinem Quellenfundus schicken kannst, wäre das sehr nett von dir! |
Re: Entfernungsberechnung
Mich würde das auch interessieren! Könntet ihr das dann hier public machen? Danke
Gruss pajofego |
Re: Entfernungsberechnung
Hi!
Ich benutze das Projekt ![]() Bei dem Datenbank-Dump handelt es sich um einen MySQL-Dump, der sollte aber ggf. auch für andere DBs verwendbar sein. Darin findest du dann die Felder "breite" und "laenge", also die geographischen Koordinaten. Zuerst müssen die Daten vom Kugel-Koordinatensystem ins kathesische Koordinatensystem umgewandelt werden:
Delphi-Quellcode:
var
geoBreite, geoLaenge, lambda, phi: Double; geoKoordX, geoKoordY, geoKoordZ: Longint; const Erdradius = 6371000; // Mittlerer Erdradius in Metern nach PAETEC Formelsammlung S. 112
Delphi-Quellcode:
Jetzt habe ich die Koordinaten in einem rechtwinkligen Koordinatensystem in der Einheit "Meter" wenn ich davon ausgehe, dass die Erde eine perfekte Kugel mit r=Erdradius=6371000 m ist.
// Umwandlung der Kugel-Koordinaten ins kathesische Koordinatensystem:
// Umrechnung ins Bogenmaß lambda := geoLaenge * PI / 180; phi := geoBreite * PI / 180; geoKoordX := Round(Erdradius * cos(phi) * cos(lambda)); geoKoordY := Round(Erdradius * cos(phi) * sin(lambda)); geoKoordZ := Round(Erdradius * sin(phi)); Um die Entfernung zweier Orte zu ermitteln, berechnest du erst einmal die direkte Entfernung (also Sichkontakt, durch die Erde hindurch):
Delphi-Quellcode:
Als nächstes benötigen wir den Winkel Ort1-Erdmittelpunkt-Ort2 (also am Erdmittelpunkt):
// Nach dem Satz des Pythagoras (ungetestet)
Entfernung1 := round(sqrt( (geoKoordX1-geoKoordX2)*(geoKoordX1-geoKoordX2) + (geoKoordY1-geoKoordY2)*(geoKoordY1-geoKoordY2) + (geoKoordZ1-geoKoordZ2)*(geoKoordZ1-geoKoordZ2) ));
Delphi-Quellcode:
Jetzt gilt es, die Bogenlänge eines Bogens mit dem Radius "Erdradius" und dem Winkel "lamdba" zu ermitteln. Wir erinnern uns, dass der Umfang eines Kreises U=2*PI*r ist. Wir benötigen davon lambda/360°. Die Länge des Kreisausschnitts ist also l=U*lambda/360=2*PI*r*lambda/360=PI*r*lambda/180.
// Wir recyclen lambda:
lambda := 2 * abs(arcsin(Entfernung1 / (2 * Erdradius))); Allerinds liegt lamdba im Bogenmaß vor. Die Umrechnung von Bogenmaß ins Gradmaß sieht so aus: Gradmaß = Bogenmaß * 180 / PI. Also: l = PI*r*lambdaGrad/180 = PI*r*lambdaBogen*180/PI/180 Überraschung ;) Wir können kürzen: l = r * lambdaBogen Also:
Delphi-Quellcode:
Ich hoffe, ich habe in die Teile zur Entfernungsermittlung keinen Fehler eingebaut, die habe ich nämlich gerade zusammengeschrieben...
// Entfernung2 ist die Entfernung über den Bogen:
Entfernung2 := Erdradius * lambda Mamphil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz