2012-05-20 57 views
0

我有一個多維的緯度和經度陣列,還有一個單一的標記「m」。我需要從數組中獲得兩個最接近「m」的點,以創建另外兩個標記。任何幫助將不勝感激。尋找更近的點在谷歌地圖上創建標記

這是拉特和離子吸附

var locations= [ 
        ['loc1', 54.1121824,-1.3983992], 
        ['loc2', 54.2121824,-1.4323992], 
        ['loc3', 54.4121824,-1.5993992], 
        ['loc4', 54.3871874,-1.6773992], 
        ['loc5', 54.1963824,-1.5983992] 
       ]; 

我想要得到的最多兩個最近的點到m = 54.1143824,-1.4963992從他們創建兩個標記

+0

你嘗試過什麼到目前爲止?也許如果發佈你的代碼的人可以給解決方案。 – Salman

回答

3

其中一個組件的陣列使用的geometry庫功能computeDistanceBetween(from:LatLng, to:LatLng, radius?:number)其中radius是可選的(地球半徑)。

必須使用libraries參數包括:geometry與JS API:

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

現在,你可以通過你的數據循環,節省了每個座標和特殊標記m之間的計算距離。其結果將是米默認(改變半徑可選會給不同的單位)

對於座標數據的每一行,做一個rowLatLng = new google.maps.LatLng(row[1], row[2])

google.maps.geometry.spherical.computeDistanceBetween(rowLatLng, m.getPosition())

然後,我能想到的最好辦法提取兩個最近點的方法是使用一個對象{ locationname: "loc1", distance: 20 }來保存將哪個點與標記「m」進行比較,以及計算的距離是多少。更好的辦法是,可以從位置變量中保存「行」索引,以便輕鬆地調整座標。

這些對象的數組可以按距離排序。我發現了一個帖子在這裏:Sorting an array of JavaScript objects與下列答案通過價格排序房屋:

homes.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) }); 
+0

謝謝你的答案,它的作品完美。 – Lucy

+0

不客氣,路林! –

0

我有一些代碼,我的主計算機上,但基本上這裏是你必須做的:

  • 通過座標循環並計算每一個與M之間的距離(半正矢式)
  • 存儲每個陣列中的
  • 排序陣列與位置的名稱距離

賓果。

編輯:

一些代碼來計算半正弦波:

Number.prototype.toRad=function() { 
return this * (Math.PI/180); 
} 


function Haversine=function(lat1, lon1, lat2, lon2) { 
    var R = 6371; // km 
    var dLat = (lat2-lat1).toRad(); 
    var dLon = (lon2-lon1).toRad(); 
    var lat1 = lat1.toRad(); 
    var lat2 = lat2.toRad(); 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 
    return d; 
}