thomaskekeisen.de

Aus dem Leben eines Bildschirmarbyters

Distanz zwischen mehreren Geo-Koordinaten

Für meine Artikel Projekt geo-commit: zu jedem git-Commit auch die GPS-Position speichern sowie Projekt geo-commit: Ein Zwischenergebnis war es nötig, dass ich über Google Tabellen die Entfernung zwischen den einzelnen Positionen, die mir jeweils mit Längen- sowie Breitengrad vorlagen, zu berechnen.

Leider gehört das Berechnen der Entfernung zweier Punkte, die als Geo-Koordinate vorliegen, nicht zum Standard-Funktionsumfang von Google Tabellen. Hier darum eine Anleitung, wie diese Funktion über die Makro-Funktion der browserbasierten Tabellenkalkulation nachgerüstet werden kann.

Scripteditor öffnen

Der Scripteditor von Google Tabellen kann über den Reiter "Tools" geöffnet werden. Der Titel des neuen Scripts kann vorzugsweise genau wie die neue Funktion, also DISTANCE_IN_METERS , genannt werden. Anschließend muss folgender Code dort eingefügt werden:

            
                function DISTANCE_IN_METERS (latitude1, longitude1, latitude2, longitude2) {
                    Utilities.sleep(Math.random() * 1000);

                    var earthRadiusInMeters = 6371000;

                    var positionFrom = {
                        latitude:  parseFloat(latitude1),
                        longitude: parseFloat(longitude1)
                    }

                    var positionTo = {
                        latitude:  parseFloat(latitude2),
                        longitude: parseFloat(longitude2)
                    };

                    var distanceInRadians = {
                        latitude:  (positionTo.latitude  - positionFrom.latitude) * Math.PI / 180,
                        longitude: (positionTo.longitude - positionFrom.longitude) * Math.PI / 180
                    };

                    var a = (
                        Math.sin(distanceInRadians.latitude      / 2)   * Math.sin(distanceInRadians.latitude / 2) +
                        Math.cos(positionFrom.latitude * Math.PI / 180) * Math.cos(positionTo.latitude * Math.PI / 180) *
                        Math.sin(distanceInRadians.longitude     / 2)   * Math.sin(distanceInRadians.longitude / 2)
                    );

                    var c                = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
                    var distanceInMeters = Math.round(earthRadiusInMeters * c);

                    return distanceInMeters;
                }
            
        

Dieser Code implementiert Sinus versus und Kosinus versus und rechnet die Entfernung anschließend in Meter um. Die erste Zeile Utilities.sleep(Math.random() * 1000); ist nur nötig, wenn, wie in meinem Fall, mehrere Tausend Zeilen verarbeitet werden. Ohne diese Zeile stürzt der Service von Google ab respektive verweigert wegen einer vermeintlichen Überlastung seinen Dienst.

Screenshot: Der gezeigte Code im Scripteditor von Google

Nutzung der Formel

Die neue Funktion kann direkt mit ihrem Namen - in diesem Fall wie vorhin definiert DISTANCE_IN_METERS - in Google Tabellen verwendet werden. So kann beispielsweise die Entfernung von der AfD-Parteizentrale zum nächsten Entsorgungszentrum für Sondermüll berechnet werden: DISTANCE_IN_METERS('13.3481463';'52.5016595';'13.314990';'52.486460') . Natürlich können statt fester Werte auch Felder referenziert werden: DISTANCE_IN_METERS(B3;B2;C3;C2) .

Screenshot: Beispielrechnung: Entfernung zwischen AfD-Parteizentrale und nächstem Recyclinghof für Sondermüll

Teilen

Kommentare