Knud Schröder: Entfernungsberechnung

Hallo liebe Forummer!

Nachdem ich immer mehr Threads über Recht, Links, Abmahnwahnsinn lese (die ich auch voll unterstütze, insbesondere
den aktuellen Rechtsstreit von Stefan, Kess und Uschi usw.), möchte ich mich zwischendurch auch mal wieder mit dem
lieben Internet als solches beschäftigen, wo es noch zu keinen Rechtsproblemen gekommen ist - bisher ...

Von meiner Firma (bei der ich arbeite, gehört mir nicht!) weiss ich, dass man für Frachtkosten-Berechnungen Tabellen
bzw. Dateien bekommen (kaufen) kann, die die Entfernung von einem fixen Standort zu jeder Postleitzahl beinhalten.

Wenn jetzt aber der Ausgangspunbkt ebenso flexibel ist, wie der Endpunkt, dann haben wir sowas wie ein Routenplaner
nur sehr viel einfacher, denke ich (hoffe ich).

Nur wie sieht so eine "Berechnung" aus? Wird eine halt um ein vielfaches größere Tabelle benutzt, in der alle möglichen
Verbindungen gespeichert sind, ähnlich die beim fixen Ausgangspunkt?

Kennt sich einer mit der Technik und dem Hintergrund aus, um die Entfernung von PLZ zu PLZ zu berechnen?

Danke für Eure Hilfe !

Knud

  1. Hi,

    Wenn jetzt aber der Ausgangspunbkt ebenso flexibel ist, wie der Endpunkt, dann haben wir sowas wie ein Routenplaner
    nur sehr viel einfacher, denke ich (hoffe ich).

    kommt drauf an, ob Du Wegstrecke meinst oder Luftlinie. Ersteres ist deutlich komplizierter...

    Nur wie sieht so eine "Berechnung" aus?

    Luftlinie: a²+b²=c², mit a=Delta-x, b=Delta-y, c=Entfernung.
    Wegstrecke: Im Zweifel ausmessen :-)

    Wird eine halt um ein vielfaches größere Tabelle benutzt, in der alle möglichen
    Verbindungen gespeichert sind, ähnlich die beim fixen Ausgangspunkt?

    Möglich. So eine Tabelle ist dann zweidimensional mit identischer Spalten- und Zeilenbezeichnung, und an der Diagonalen gespiegelt. Die Diagonale selbst enthält Nullwerte, da von=nach ist.

    Cheatah

    1. Hi,

      kommt drauf an, ob Du Wegstrecke meinst oder Luftlinie. Ersteres ist deutlich komplizierter...

      Luftlinie würde auf jeden Fall reichen.

      Luftlinie: a²+b²=c², mit a=Delta-x, b=Delta-y, c=Entfernung.

      Also, wenn ich das richtig verstehe, hole ich mir eine Tabelle mit den allen Entfernungen von meiner eigenen PLZ aus.
      Dann hole ich mir die Entfernung von meiner PLZ zu der angegebenen Ausgangs-PLZ.
      Als nächstes die Entfernung von mir zur Ziel-PLZ.
      Danach die dritte Seite ausrechnen - ergibt die Entfernung zwischen gewünschten PLZ's.

      Gute Idee! Danke erstmal!

      Knud

      1. Hi,

        Luftlinie: a²+b²=c², mit a=Delta-x, b=Delta-y, c=Entfernung.

        Also, wenn ich das richtig verstehe, hole ich mir eine Tabelle mit den allen Entfernungen von meiner eigenen PLZ aus.

        [...]

        nicht wirklich - dazu bräuchtest Du noch den Winkel. Ich dachte an x/y-Koordinaten, also etwa Längen- und Breitengrad.

        Dann hole ich mir die Entfernung von meiner PLZ zu der angegebenen Ausgangs-PLZ.
        Als nächstes die Entfernung von mir zur Ziel-PLZ.
        Danach die dritte Seite ausrechnen - ergibt die Entfernung zwischen gewünschten PLZ's.

        Als Gegenbeispiel nehmen wir mal an, Du säßest in München und wolltest die Entfernung zwischen Hamburg und Bremen ausrechnen...

        Cheatah

        1. Hi,
          »»  dazu bräuchtest Du noch den Winkel. Ich dachte an x/y-Koordinaten, also etwa Längen- und Breitengrad.

          Tja, nachdem ich in meinem finsteren Hinterstübchen meine allerletzten Mathe-Kenntnisse ausgekramt habe,
          brauche ich tatsächlich einen bekannten Winkel im Dreieck. Hab ich aber leider nicht.

          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.

          Und da wäre ich wieder bei meiner Ausgangsfrage: wie muss eine Tabelle aussehen, damit ich die Entfernung
          zweier beliebiger Postleitzahlen berechnen kann (Luftlinie)?

          Knud

          1. Hallo Knud,

            Ich frage mich aber nun wie es denn die kleinen süssen Progrämmchen tatsächlich machen.

            Die Programme berechnen die Entfernung ja in Abhängigkeit von der gewählten Strecke (nur BABs oder LSs oder BSs oder gemischt/ schnellste Strecke, kürzeste Strecke, gerinster Verbrauch,...)
            Ich vermute stark, daß die Berechnungen auf Vermessungsdaten beruhen, die ja irgendwann mal erhoben wurden. Jetzt muß das Programm nur anhand "komplexer Algorithmen" zwei Städte virtuell verbinden, um die Entfernung zu bestimmen.
            Ob man irgendwo an solche Vermessungsdaten rankommt (ohne teuer zu bezahlen) wage ich zu bezweifeln. Vielleicht weis beim "Bundesamt für Bauwesen und Raumordnung" (Quelle:<www.bundesamt.de>) jemand bescheid ;-)

            Gruß AlexBausW

          2. 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

        2. Moin!

          nicht wirklich - dazu bräuchtest Du noch den Winkel. Ich dachte an x/y-Koordinaten, also etwa Längen- und Breitengrad.

          Mmh, funktioniert so aber nur, wenn man lediglich ein hinreichend kleines Gebiet betrachtet. Sonst muss man leider auch die Erdkruemmung beruecksichtigen, was nicht ganz unkompliziert ist.

          Als Gegenbeispiel nehmen wir mal an, Du säßest in München und wolltest die Entfernung zwischen Hamburg und Bremen ausrechnen...

          Tja, Satz des Pythagoras gilt halt nur im rechtwinkligen Dreieck (und nur in einer Ebene!).

          So lange

    2. kommt drauf an, ob Du Wegstrecke meinst oder Luftlinie. Ersteres ist deutlich komplizierter...

      Naja, wir haben damals "travelling salesman" als zweite Übungsaufgabe für Rekursion gemacht (3. Semester), und das ist 20 Jahre her ... das sollte heute eigentlich Oberstufenstoff sein, oder?

  2. Hallo Knud

    Und so funktionierts

    Meine Beispielwerte beziehen sich auf Österreich du müsstest dir die entsprechenden Werte für Deutschland halt aus einer Landkarte herausmessen.

    So sieht die Tabelle aus:

    PLZ   Breite   Länge      .......Ortsname usw
    2466  16,33    47,955
    2700  16,264   47,912
    2263  16,68    48,25
    2345  14,75    48,14
    .........

    Jede deutsche Stadt kommt als einzelne Zeile in die Tabelle
    Auch deine Startstadt ist nur als eine einzige zeile vorhanden.
    Damit kannst du alle Luftlinienentfernungen in Deutschland berechnen.
    Dabei wird hinter dem Komma der Dezimalanteil geschrieben und nicht die minuten
    14 grad 30 minuten schreibt sich also 14,5

    Bsp. Entfernung zwischen 2700 und 2345

    Zuerst einige Konstanten:

    km_je_lgrad = 75,6    -- ein Längengrad hat ca. 75,6 km
    km_je_bgrad = 110,7   -- ein Breitengrad hat ca. 110,7 km
    -- Diese Werte gelten für Österreich
    -- Mein Bsp. Bezieht sich daruf, dass Deutschland als Fläche angesehen wird,
    -- für die diese Werte anhand einer Landkarte ermittelt werden können.
    -- für grössere bereiche (z.B. ganz Europa) müsstest du ein Mathematikbuch
    -- Kapitel sphärische Trigonometrie heranziehen.

    -- hol dir nun die werte für startpunkt und endpunkt aus der tabelle:
    s_l = 47,912   -- länge von PLZ 2700
    s_b = 16,264   -- breite von PLZ 2700
    e_l = 48,14    -- länge von PLZ 2345
    e_b = 14,75    -- breite von PLZ 2345

    delta_l = e_l - s_l                = 0,228     -- horizontale entfernung in längengraden
    delta_b = e_b - s_b                = -1,514    -- vertikale entfernung in breitengraden
    delta_x = delta_l * km_je_lgrad    = 17,2368   -- horizontale entfernung in km
    delta_y = delta_b * km_je_bgrad    = -167,5998 -- horizontale entfernung in km

    -- trigonometrische berechnung nach pythagoras
    -- a² + b² = c²
    -- c = wurzel (a² + b²)
    -- a = delta_x
    -- b = delat_y
    c = sqrt((delta_x * delta_x)+(delta_y * delta_y))
      = sqrt(  297,10727424     +   28089,69296004  )
      = 168,483827812285888841400886475398        -- entfernung zwischen den PLZs in km.

    schwitz uff fertig!

    karl :-)‚