1

好吧我有一個餐廳列表。所有的餐廳都有一個地址,我想這樣做,你可以在輸入字段中寫一個位置,然後它會顯示餐廳列表中最接近的第一個,然後下降..例如:如何使「xx km」從位置,地理位置/谷歌api

正在搜索: Valby(丹麥城市)

Restaurant Ankrara - 2 km from Valby 
Restaurant JuicyFood - 3 km from Valby 
Restaurant FoodJuicy - 5 km from Valby 
Restaurant Blabla - 22 km from Valby 

經過對SO的研究和問題後,我發現我需要使用地理編碼和谷歌地圖API。

好的,所以我進入了將您輸入的內容(上例中的城市Valby)轉換爲地理編碼(緯度/經度座標)的步驟。

然後我有座標到地址。

我怎樣才能計算城市和餐館地址座標之間的公里?

對於這個例子,這裏是城市的「Valby」的電線:

55.662133, 12.508028 

這裏是3間餐廳地址線:

55.667029, 12.527715 
55.6939821, 12.4934945 
55.6696885, 12.3755492 

(我怎麼能告訴他們最接近/最接近的第一個然後下降< - 對於接受的答案不需要,我最終爲此提出了一個新問題)

+0

爲了說明一下,你需要跟隨道路的距離,還是隻需要一條直線? – Ragnar123

+0

直線距離 – Karem

回答

1

您可以計算距離:

var pos = new google.maps.LatLng(55.662133, 12.508028); 

var r1 = {name: "rest1", lat: 55.667029, lng: 12.527715, dist: 0}; 
var r2 = {name: "rest2", lat: 55.6939821, lng: 12.4934945, dist: 0}; 
var r3 = {name: "rest3", lat: 55.6696885, lng: 12.3755492, dist: 0}; 

var r = [r3, r2, r1]; 
for (var i = 0; i < r.length; ++i) { 
    var p = new google.maps.LatLng(r[i].lat, r[i].lng); 
    var d = google.maps.geometry.spherical.computeDistanceBetween(pos, p); 
    r[i].dist = d; 
} 

,然後對它們進行排序:

r.sort(function(r1, r2) {return r1.dist - r2.dist;}); 

詳情參見running source code on jsfiddle

+0

http://jsfiddle.net/tLaLT/我得到NaN – Karem

+0

computeDistanceBetween(p1,p2):p1和p2必須是LatLng。你可以檢查我的程序。 – Jiri

+0

好吧,它開始工作,但一個問題。當我這樣做:computeRestaurants(55.662133,12.508028),然後它看起來像函數computeRestaurants(pos){var pos = new google.maps.LatLng(pos); }我得到NaN。我發現它的原因是它添加了括號,()所以它新增了google.maps.LatLng(((55.662133,12.508028));它不起作用並給出了NaN。我該如何解決這個問題,以便它可以從函數中取出位置? – Karem