Created
October 11, 2022 15:46
-
-
Save pmakokluev/b86b2f29ea0392d60d1a9ed1c25aa879 to your computer and use it in GitHub Desktop.
Расстояние между двумя точками на карте, заданными с помощью географических координат
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ported 2 GAS from https://ru.stackoverflow.com/questions/289889/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-%D0%B4%D0%B2%D1%83%D0%BC%D1%8F-%D1%82%D0%BE%D1%87%D0%BA%D0%B0%D0%BC%D0%B8-%D0%BD%D0%B0-%D0%BA%D0%B0%D1%80%D1%82%D0%B5-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-%D0%B3%D0%B5%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85-%D0%BA%D0%BE%D0%BE%D1%80 | |
| function test_geodesicDistance() { | |
| var gps_calc={ | |
| "183263": [ | |
| 55.752368, | |
| 37.623879 | |
| ], | |
| "177951": [ | |
| 59.925328, | |
| 30.411519 | |
| ] | |
| }; | |
| var lat1 = 77.1539; | |
| var long1 = -139.398; | |
| var lat2 = -77.1804; | |
| var long2 = -139.55; | |
| var r=geodesicDistance(lat1,long1,lat2,long2); // ~ 17166029 метров | |
| Logger.log(r.toString()); | |
| var geo_lat_sbp=59.939084; | |
| var geo_lon_spb=30.315879; | |
| r=geodesicDistance(geo_lat_sbp,geo_lon_spb,gps_calc["177951"][0],gps_calc["177951"][1]); | |
| Logger.log(r.toString()); | |
| r=geodesicDistance(geo_lat_sbp,geo_lon_spb,gps_calc["183263"][0],gps_calc["183263"][1]); | |
| Logger.log(r.toString()); | |
| } | |
| function geodesicDistance(a_latitude, a_longitude, b_latitude, b_longitude) { | |
| const EarthRadiusInMeters = 6372797.560856; | |
| const DegreeesToRad = 0.017453292519943295769236907684886; | |
| var dtheta = (a_latitude - b_latitude) * DegreeesToRad, | |
| dlambda = (a_longitude - b_longitude) * DegreeesToRad, | |
| mean_t = (a_latitude + b_latitude) * DegreeesToRad / 2.0, | |
| cos_meant = Math.cos(mean_t); | |
| return EarthRadiusInMeters * Math.sqrt(dtheta * dtheta + cos_meant * cos_meant * dlambda * dlambda); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment