0

Entfernung und Richtung zwischen 2 Standorten

“Berechnung der Entfernung zwischen zwei geographischen Punkten”;
“”;
“sourceLat: Latitude Startpunkt”;
“sourceLon: Longitude Startpunkt”;
“destLat: Latitude Zielpunkt”;
“destLon: Longitude Zielpunkt”;
“”;
“Rückgabewert: Entfernung in Kilometer”;
“”;
function calculateDistance(sourceLat : number,sourceLon : number,destLat : number,destLon : number) do
    let PI := 3.14159265359;
    let R := 6371;
    “”;
    let sourceLatRad := sourceLat * PI / 180;
    let sourceLonRad := sourceLon * PI / 180;
    let destLatRad := destLat * PI / 180;
    let destLonRad := destLon * PI / 180;
    “”;
    let x := (destLonRad - sourceLonRad) * cos((sourceLatRad + destLatRad) / 2);
    let y := destLatRad - sourceLatRad;
    sqrt(x * x + y * y) * R
end;
“*************************************************************************************************”;
“Berechnung des Winkels (Vollkreis 0-360 rechtslaufend - 0 = Norden) - Startpunkt -> Zielpunkt”;
“”;
“sourceLat: Latitude Startpunkt”;
“sourceLon: Longitude Zielpunkt”;
“destLat: Latitude Zielpunkt”;
“destLon: Longitude Zielpunkt”;
“”;
“Rückgabewert: Winkel in Grad”;
“”;
function calculateCircleDegrees(sourceLat : number,sourceLon : number,destLat : number,destLon : number) do
    let PI := 3.14159265359;
    “”;
    let sourceLatRad := sourceLat * PI / 180;
    let sourceLonRad := sourceLon * PI / 180;
    let destLatRad := destLat * PI / 180;
    let destLonRad := destLon * PI / 180;
    “”;
    let alpha := atan2(destLonRad - sourceLonRad, destLatRad - sourceLatRad) * 180 / PI;
    if alpha < 0 then 360 + alpha else alpha end
end

5 Antworten

null
    • Sebastian_Nicklas
    • vor 2 Tagen
    • Gemeldet - anzeigen

    Hallo, es ist ja schon ein paar Jährchen her, aber genau diese Lösung, DER ENTFERNUNG ZWISCHEN 2 GEOGRAPHISCHEN PUNKTEN, hab ich gesucht. Allerdings gibt das Feld mir kein Ergebnis heraus. Kann mir bitte jemand helfen?

      • mirko3
      • vor 2 Tagen
      • Gemeldet - anzeigen

      Zu dieser Zeit, als Peter das schöne Script schrieb, litt das Forum unter einem Bug. Kopierte Scripte waren unbrauchbar, wenn sie Anführungszeichen enthielten. Versuche mal so:

      function calculateCircleDegrees(sourceLat : number,sourceLon : number,destLat : number,destLon : number) do
          let PI := 3.14159265359;
          let sourceLatRad := sourceLat * PI / 180;
          let sourceLonRad := sourceLon * PI / 180;
          let destLatRad := destLat * PI / 180;
          let destLonRad := destLon * PI / 180;
          let alpha := atan2(destLonRad - sourceLonRad, destLatRad - sourceLatRad) * 180 / PI;
          if alpha < 0 then 360 + alpha else alpha end
      end;
      
      function calculateDistance(sourceLat : number,sourceLon : number,destLat : number,destLon : number) do
          let PI := 3.14159265359;
          let R := 6371;
          let sourceLatRad := sourceLat * PI / 180;
          let sourceLonRad := sourceLon * PI / 180;
          let destLatRad := destLat * PI / 180;
          let destLonRad := destLon * PI / 180;
          let x := (destLonRad - sourceLonRad) * cos((sourceLatRad + destLatRad) / 2);
          let y := destLatRad - sourceLatRad;
          round(sqrt(x * x + y * y) * R, 2)
      end;
      
      • Sebastian_Nicklas
      • gestern
      • Gemeldet - anzeigen

       Danke für deine Hilfe. Allerdings stelle ich grad fest dass ich ein riesen Denkfehler über die Funktionsweise des Scriptes hatte. Ich dachte, wenn ich 2 Textfelder mit Ortsangabe habe, errechnet es die Entfernung. OMG wie dumm von mir :(

      Hab es kapiert und wie folgt geändert. Weil ich ja nun je 2x Latitude und 2x Longitude -Angaben benötige, habe ich eine Tabelle B erstellt, in die via TRIGGER BEI ÄNDERUNG die Ortsangaben (Start u. Ziel) aus Tabelle A automatisch übernommen werden.

      Aber wie baue ich nun eben dieses Script auf? Orte stehen in Tabelle A --> in Tabelle B mit 3 Spalten steht der Ort als Textfeld, Latitude und Longitude als Zahlenfeld.

      Ich danke echt vielmals für eure/deine Unterstützung.

      • mirko3
      • gestern
      • Gemeldet - anzeigen

      Wenn Du statt Textfelder ein Standortfeld benutzt, dann enthält dieses automatisch die Latitude und Longitude. Auslesen kannst Du sie mit longitude(Standortfeld), latitude(Standortfeld). Damit sparst Du Dir weitere Felder in Untertabellen. Je nachdem, was Deine Tabelle für eine Funktion haben soll, reichen Dir ja Standortfelder und du benötigst nicht extra noch Textfelder für die Orte. Wenn doch, dann muß man leider händisch die Orte noch eintragen, da die Kartenapps (Google in der Ninox-private Cloud, Karten in der Ninox-Mac-App) die Standorte unterschiedlich formatieren und sie damit unsicher auslesbar sind. Mal so als Beispiel eine DB in Anlage. Das Script steht als Trigger im StandortB-Feld im zweiten Tabulator. Mirko

      • Sebastian_Nicklas
      • vor 6 Stunden
      • Gemeldet - anzeigen

       vielen vielen Dank für deine Unterstützung. Ich habe meine Tabelle umgebaut so dass ich deinen Vorschlag nutzen kann. Läuft super!