2017-01-09 2 views
-1

私は彼/彼女にメッセージを送ることができるように、私は現在の場所に最短のマーカーを選択するコードのスニペットを使用しようとしましたが、それらのいずれかを理解できませんでした。 私は自分のものを書いたので正解ですが、多くのマーカーでうまくいくかどうか心配です。ここUberサンプルGoogleマップJS API

それは次のとおりです。

// data 
      var json1 = [ 
       { 
        "id": "34324" 
        , "title": "Stockholm" 
        , "lat": 59.3 
        , "lng": 18.1 
        , "description": "Stockholm is the capital and the largest city of Sweden" 
     } 
         , { 
        "id": "4343212" 
        , "title": "Oslo" 
        , "lat": 59.9 
        , "lng": 10.8 
        , "description": "Oslo is a municipality, and the capital and most populous city of Norway" 
     } 
    ] 
      var tempArray = json1; 
      var resultsarray = []; 
      for (var i = 0; i < tempArray.length; i++) { 
       var xx = json1[i]; 
       var point = new plugin.google.maps.LatLng(xx.lat, xx.lng); 
       var distance = plugin.google.maps.geometry.spherical.computeDistanceBetween(MyLocation, point); 
       resultsarray.push(distance); 
      }; 
      var min = Math.min.apply(Math, resultsarray); 
      var b = 0; 
      for (var e = 0; e < resultsarray.length; e++) { 
       if (resultsarray[e] == min) { 
        b = e; 
        break; 
       } 
      }; 
      var theshortestone = tempArray[b]; 

答えて

0

あなたはHaversine Formula

距離関数を使用することができます(マップのAPIを使用せずに)点までの間の距離を計算するには:

function getDistance(lat1, lon1, lat2, lon2) { 
    var R = 6371; // Radius of the earth in km 
    var dLat = deg2rad(lat2-lat1); // deg2rad below 
    var dLon = deg2rad(lon2-lon1); 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
      Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; // Distance in km 
    return d; 
} 

function deg2rad(deg) { 
    return deg * (Math.PI/180) 
} 

あなたのコード:

var yourLat = 60.3, 
    yourLong = 58.2; 

for (var i = 0; i < tempArray.length; i++) { 
    var xx = json1[i]; 
    var distance = getDistance(yourLat, yourLong, xx.lat, xx.lng); 
    resultsarray.push(distance); 
}; 
+0

私はどうですか?それは良いですか?あなたはそれについてどう思いますか ? –

+0

@BishoyWadie処理する必要のあるデータの量に依存すると思います。たとえば、ループ内のGoogle Maps APIへの呼び出しを削除し、代わりに距離関数を使用するスクリプトのパフォーマンスを向上させることができますが、最終的にはどのように使用するかによって異なります。 –

関連する問題