Tom: Entfernungsberechnung

Beitrag lesen

Hallo

Ich frage mich aber nun wie es denn die kleinen süssen Progrämmchen tatsächlich machen.
Eine Möglichkeit wäre halt eine grosse Tabelle. Angenommen 6000 PLZs in Deutschland, jede mit jeder verbunden,
das gibt ne Menge Sätze (6000*6000 also 36 Millionen), kann also eigentlich nicht sein.
Kann mir auch nicht vorstellen, dass die über Polarkoordinaten darankommen.

Nein, gemeint ist eine Tabelle, die etwa 6000 Datensätze enthält, wobei jeder Datensatz unter anderem die Informationen PLZ, Längengrad und Breitengrad enthält.
Natürlich kannst Du anstelle von Längen- und Breitengraden (in Grad, Minuten und Sekunden) auch ein beliebiges (eigenes) Koordinatensystem über Deutschland legen, dass z.B. als Basiseinheit 1 km aufweist, sodass Deine Berechnungen später wesentlich schneller erfolgen würden.
Dabei bleibt es Dir überlassen, ob Du den Nullpunkt dieses Koordinatensystems irgendwo in den Südwesten Deutschland legst (bzw. sogar ausserhalb), damit Deine Längen-/Breitenwerte alle positiv bleiben oder das Koordinatensystem auf Deine eigene Position legst, damit die Distanzberechnungen zu Deiner Position einfacher wird ;-)

Die Daten zu dieser Tabelle musst Du Dir natürlich noch besorgen (siehe Posting von AlexBausW). Das Koordinatensystem der gelieferten Daten ist weitgehend egal, Du kannst im Regelfall die Daten automatisiert umrechnen und dann in Deine Tabelle abfüllen.

Die Berechnung der Distanz zwischen zwei Orten sieht dann in etwa so aus (in Perl mit DBI):

DB-Connect initialisieren

$dbHandle = DBI->connect($data_source, $username, $auth);

Länge und Breite des 1. Ortes auslesen

($x1, $y1) = $dbHandle->selectrow_array("SELECT Laenge, Breite FROM Orte WHERE plz=".$plz1);

Länge und Breite des 2. Ortes auslesen

($x2, $y2) = $dbHandle->selectrow_array("SELECT Laenge, Breite FROM Orte WHERE plz=".$plz2);

Distanz berechnen

$Dist = sqrt( ($y1 - $y2)**2 + ($x1 - $x2)**2 );

#Ergebnis ausgeben
print $Dist;

Grüsse
Tom