2017-01-09 71 views
-1

我試圖使用任何代碼片段來選擇最短的標記到我目前的位置,以便我可以給他/她發送一條消息,但我無法理解他們中的任何一個。 所以我寫了我自己的一個,它給了我一個正確的答案,但我擔心它是否會用很多標記工作良好。優步示例谷歌地圖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

爲計算點之間的距離(不使用地圖API),你可以使用Haversine Formula

距離函數:

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的調用並改用距離函數,但最終取決於您將如何使用它。 –