1

5〜7秒ごとにgps信号をデータベースに保存しています。データベースからすべての緯度と経度の値を「合計」すると、これまでに移動した距離を確認するにはどうすればよいですか。そして、この結果を毎日どのように見ることができますか?

例えば。ライブプレビューで車を追跡しているとき、その日のライブデータとして合計する距離が必要です。たとえば、特定のトラックの月間キロメートルを探しているときは?

私はこのリンクを見てましたが、配列に既にデータがあるため、動的にデータを埋める方法がわかりません。

同じことをすでに実装している場合は、いくつかのアイデアと例を教えてください。

ホイールがすでに作成されている場合、なぜホイールを作成するのですか :)

ありがとうございました

4

2 に答える 2

2

いくつかの三角法はあなたをそこに導きます。

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;
}
于 2012-06-03T21:28:39.893 に答える
1

または、Google Maps API の Geometry Library を使用して同じことを行うこともできます。

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script>
<script type="text/javascript">

  function initialize() {
    var myLatLng = new google.maps.LatLng(0, -180);
    var myOptions = {
      zoom: 3,
      center: myLatLng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var coordinates = [
        new google.maps.LatLng(37.772323, -122.214897),
        new google.maps.LatLng(21.291982, -157.821856),
        new google.maps.LatLng(-18.142599, 178.431),
        new google.maps.LatLng(-27.46758, 153.027892)
    ];
    console.log(google.maps.geometry.spherical.computeLength(coordinates));


  }
</script>
于 2012-06-03T22:59:59.923 に答える