AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Entfernungsberechnung

Ein Thema von Stefan Dieler · begonnen am 26. Dez 2004 · letzter Beitrag vom 26. Dez 2004
Antwort Antwort
Stefan Dieler
(Gast)

n/a Beiträge
 
#1

Entfernungsberechnung

  Alt 26. Dez 2004, 09:52
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!
  Mit Zitat antworten Zitat
Benutzerbild von Mamphil
Mamphil

Registriert seit: 17. Jul 2004
Ort: Garching b. München
149 Beiträge
 
Delphi 7 Professional
 
#2

Re: Entfernungsberechnung

  Alt 26. Dez 2004, 10:00
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
The laws of physics are the canvas God laid down on which to paint his masterpiece. “Leonardo Vetra” in Dan Brown’s “Angels & Demons”
  Mit Zitat antworten Zitat
Stefan Dieler
(Gast)

n/a Beiträge
 
#3

Re: Entfernungsberechnung

  Alt 26. Dez 2004, 10:03
Hi Mamphil,

vielen Dank für deine Antwort.
Wenn du mir was aus deinem Quellenfundus schicken kannst,
wäre das sehr nett von dir!
  Mit Zitat antworten Zitat
pajofego

Registriert seit: 6. Okt 2004
103 Beiträge
 
#4

Re: Entfernungsberechnung

  Alt 26. Dez 2004, 10:54
Mich würde das auch interessieren! Könntet ihr das dann hier public machen? Danke

Gruss pajofego
  Mit Zitat antworten Zitat
Benutzerbild von Mamphil
Mamphil

Registriert seit: 17. Jul 2004
Ort: Garching b. München
149 Beiträge
 
Delphi 7 Professional
 
#5

Re: Entfernungsberechnung

  Alt 26. Dez 2004, 12:46
Hi!

Ich benutze das Projekt OpenGeoDb - freie Geokoordinaten-Datenbank nach Orten und PLZs. Das ist kostenlos und enthält so wie ich das sehe alle Orte. Kleine "Kaffs" und Stadtteile sind (noch) nicht enthalten. Zum Beispiel gibt es für Berlin nur einen Eintrag.

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:
// 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));
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.

Um die Entfernung zweier Orte zu ermitteln, berechnest du erst einmal die direkte Entfernung (also Sichkontakt, durch die Erde hindurch):
Delphi-Quellcode:
// Nach dem Satz des Pythagoras (ungetestet)
Entfernung1 := round(sqrt(
           (geoKoordX1-geoKoordX2)*(geoKoordX1-geoKoordX2)
         + (geoKoordY1-geoKoordY2)*(geoKoordY1-geoKoordY2)
         + (geoKoordZ1-geoKoordZ2)*(geoKoordZ1-geoKoordZ2)
         ));
Als nächstes benötigen wir den Winkel Ort1-Erdmittelpunkt-Ort2 (also am Erdmittelpunkt):
Delphi-Quellcode:
// Wir recyclen lambda:
lambda := 2 * abs(arcsin(Entfernung1 / (2 * Erdradius)));
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.
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:
// Entfernung2 ist die Entfernung über den Bogen:
Entfernung2 := Erdradius * lambda
Ich hoffe, ich habe in die Teile zur Entfernungsermittlung keinen Fehler eingebaut, die habe ich nämlich gerade zusammengeschrieben...

Mamphil
The laws of physics are the canvas God laid down on which to paint his masterpiece. “Leonardo Vetra” in Dan Brown’s “Angels & Demons”
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz