0

私は現在、Google マップ API を使用する Javascript プログラムに取り組んでいます。必要なこと:

  1. ユーザーが場所を入力できるようにします。
  2. ユーザーが「検索」ボタンをクリックすると、ユーザーが入力した場所が経度と緯度の座標に変換されます。
  3. 次に、アルゴリズムを実行して、ユーザーが入力した場所と 20 のハードコードされた lng および lat 座標との間の距離を計算します。
  4. キロ単位で距離を出力します。
  5. 次に、ループして最短距離を見つけ、lng と lat id を取得して、どの場所が最短距離であったかを知る必要があります。

手順 1 と 2 はなんとか完了しましたが、場所のインデックス (それを識別する方法) と lng 点と lat 点を格納する方法が見つからないため、それらをループして比較することができません。ユーザーが入力した場所。また、すべてのポイントで最も近い距離と緯度を見つけるための最短距離を見つける方法もわかりません。

どんな助けでも大歓迎です、

ありがとう!

4

1 に答える 1

0

この回答を目的に合わせて調整できるはずです。

//forumla for calculating distances between points
var getDistance = function(p1, p2) {
  var rad = function(x) {return x*Math.PI/180;}
  var R = 6371; // earth's mean radius in km
  var dLat  = rad(p2.lat() - p1.lat());
  var dLong = rad(p2.lng() - p1.lng());

  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
          Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) * Math.sin(dLong/2) * Math.sin(dLong/2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  var d = R * c;

  return d.toFixed(3);
}

// LatLng object with your current coordinates
var yourLocation = new google.maps.LatLng(yourlat, yourlng);

// populate an array of hard coded LatLng objects 
var twentypoints = {};
twentypoints['hardcodedName1'] = new google.maps.LatLng(lat1, lng1);
twentypoints['hardcodedName2'] = new google.maps.LatLng(lat2, lng2);
twentypoints['hardcodedName3'] = new google.maps.LatLng(lat3, lng3);
  ...

// calculate the minimum distance
var closestLocName, minDist;
for (var hardcodedName in twentypoints) {
  tempMinDist = getDistance(twentypoints[hardcodedName], yourLocation));
  if (minDist === undefined || tempMinDist < minDist) {
    minDist = tempMinDist;
    closestLocName = hardcodedName;
  }
}

console.log('Closest location is called ' + closestLocName + '.');
console.log('Closest location is ' + minDist + 'km away.');
于 2012-11-09T00:19:25.670 に答える