いくつかの三角法はあなたをそこに導きます。
Lat/Lngが2Dサーフェス上のX/Y座標と同じくらい単純であるといいのですが。残念ながら、私たちは地球と呼ばれる(非常に素晴らしい)球体に住んでいるため、緯度と経度は、地球の中心(緯度)または地球上に描く想像上の線(経度)を基準にした三角形の角度を指します。歴史的なものはきちんとしていますが、それはここでのポイントではありません。
球上の距離を計算するためにHaversineフォーラムを使用しました。これについては、必要に応じて詳しく読むことができます。
簡単にするために、ここにコードを投稿します。私はJavascriptで書いたので、それが得られます:)2つのlat/ lngポイントAとBが与えられた場合、次のようになります。
// units can be english (miles) or metric (km)
var units = "english";
function calculate_distance(a, b) {
var R = (units == "english") ? 3958.7558 : 6371;
var dLat = (a.lat - b.lat) * Math.PI / 180;
var dLon = (a.lng - b.lng) * Math.PI / 180;
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(a.lat * Math.PI / 180) * Math.cos(b.lat * Math.PI / 180) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return R * c;
}
この関数をポイントのペア間で繰り返し適用し、距離を合計すると...ビンゴ。
function get_distance(list_of_points) {
if (list_of_points.length == 0) return 0;
var sum = 0;
var last_point = list_of_points.shift();
while (list_of_points.length > 0) {
var next_point = list_of_points.shift();
sum += calculate_distance(last_point, next_point);
last_point = next_point;
}
return sum;
}