回答
首先,你必須添加事件偵聽
google.maps.event.addListener(map, 'click', find_closest_marker);
然後創建通過標記列陣循環和使用haversine formula從點擊計算每個標誌物的距離的函數。
function rad(x) {return x*Math.PI/180;}
function find_closest_marker(event) {
var lat = event.latLng.lat();
var lng = event.latLng.lng();
var R = 6371; // radius of earth in km
var distances = [];
var closest = -1;
for(i=0;i<map.markers.length; i++) {
var mlat = map.markers[i].position.lat();
var mlng = map.markers[i].position.lng();
var dLat = rad(mlat - lat);
var dLong = rad(mlng - lng);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(rad(lat)) * Math.cos(rad(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;
distances[i] = d;
if (closest == -1 || d < distances[closest]) {
closest = i;
}
}
alert(map.markers[closest].title);
}
這跟蹤最近的標記並提醒其標題。
我有我的標誌作爲數組我的地圖對象
很好的例子,但是,如果我點擊芝加哥附近的標記,我會在警報窗口中看到紐約。是一個小錯誤,所以芝加哥沒有正確列出,或其他? – user198003 2010-10-31 12:52:50
是的,這是一個錯誤,我修正了它=) – Galen 2010-10-31 18:50:15
不開放一箇舊的線程,但我試圖實現這一點,它似乎向東搜索,而不是找到最接近。因此,如果我搜索一個位置,它將向東搜索並找到最接近的位置,即使西面有一個REAL關閉。那有意義嗎? – LeeR 2011-05-23 22:35:55
您可以使用類似MBRContains(g1,g2)的東西。
頁面未找到配對,所以您需要重新編輯第回答 – Val 2012-04-19 14:39:22
@Val Done.Thanks – 2012-04-19 15:49:20
上面的公式並不適用於我,但我沒有任何問題。通過您的當前位置的功能,並遍歷標記的數組找到最接近:
function find_closest_marker(lat1, lon1) {
var pi = Math.PI;
var R = 6371; //equatorial radius
var distances = [];
var closest = -1;
for(i=0;i<markers.length; i++) {
var lat2 = markers[i].position.lat();
var lon2 = markers[i].position.lng();
var chLat = lat2-lat1;
var chLon = lon2-lon1;
var dLat = chLat*(pi/180);
var dLon = chLon*(pi/180);
var rLat1 = lat1*(pi/180);
var rLat2 = lat2*(pi/180);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(rLat1) * Math.cos(rLat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
distances[i] = d;
if (closest == -1 || d < distances[closest]) {
closest = i;
}
}
// (debug) The closest marker is:
console.log(markers[closest]);
}
可以在google.maps.geometry.spherical命名空間中的computeDistanceBetween()方法。
+1這是迄今爲止的最佳答案。 – bruchowski 2014-09-02 23:17:43
這完全適合我 – ChrisRich 2014-10-21 00:28:33
這個答案應該標記爲 – 2016-03-30 07:03:19
這裏是我的偉大工程的另一個函數,返回公里距離:
function distance(lat1, lng1, lat2, lng2) {
var radlat1 = Math.PI * lat1/180;
var radlat2 = Math.PI * lat2/180;
var radlon1 = Math.PI * lng1/180;
var radlon2 = Math.PI * lng2/180;
var theta = lng1 - lng2;
var radtheta = Math.PI * theta/180;
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
dist = Math.acos(dist);
dist = dist * 180/Math.PI;
dist = dist * 60 * 1.1515;
//Get in in kilometers
dist = dist * 1.609344;
return dist;
}
我想對雷歐的建議擴大對任何人對如何計算最近的位置和實際提供迷茫一個工作解決方案:
我在markers
陣列中使用標記eg var markers = [];
。
然後讓我們像下面的var location = new google.maps.LatLng(51.99, -0.74);
我們的立場,然後我們只是減少我們對標記我們有像這樣的位置:
markers.reduce(function (prev, curr) {
var cpos = google.maps.geometry.spherical.computeDistanceBetween(location.position, curr.position);
var ppos = google.maps.geometry.spherical.computeDistanceBetween(location.position, prev.position);
return cpos < ppos ? curr : prev;
}).position
什麼彈出是你最親密的標誌LatLng
對象。
- 1. Google Maps API v3標記座標
- 2. Google Maps API V3上的限制標記
- 3. Google maps api v2 - 在地圖上找到最近/最近的標記/點數?
- 4. Google Maps API v3:標記未被刪除
- 5. 刷新標記 - Google Maps JavaScript API v3
- 6. 多標記問題(Google Maps API v3)
- 7. Google maps api v3刪除標記時dragstart
- 8. 在Google Maps API V3中繪製標記
- 9. Google Maps API v3 SVG標記消失
- 10. Google Maps JS API v3標記顏色
- 11. Google Maps API v3多個標記Infowindow
- 12. Google Maps API V3 - 檢查座標是否靠近後端的DirectionRoute
- 13. Google Maps API V3:fromContainerPixelToLatLng
- 14. Google Maps API v3 - maxZoomService
- 15. Google Maps API v3 BrowserIsCompatible
- 16. Google Maps v3中的彈性標記
- 17. Google Maps API v2 vs Google Maps API v3?
- 18. 如何在Google Maps API v3中將標記添加到標記
- 19. Google Maps API V3 - Internet Explorer
- 20. Google maps api v3 + marker clusterer:centering map?
- 21. google maps api v3 + infoBubble in markerClusterer
- 22. Google Maps API標記標題
- 23. 獲取相對於屏幕的標記座標Google Maps API v3
- 24. Google Maps API v3 MouseEvent標記不是鼠標的返回位置
- 25. Google地圖標記不顯示(Google Maps API v3)
- 26. Google Maps API:查找指定點的最近點並對其進行分組
- 27. Google Maps API v3,刪除標記圖標或更改爲「空白」?
- 28. Google Maps API v3,點擊時如何更改標記圖標
- 29. Google Maps API v3:如何動態更改標記圖標?
- 30. Google Maps API V3返回610,0,0,0
您是否使用任何數據庫來存儲標記的座標? – 2010-10-30 08:14:45
當然,標記位置存儲在MySQL數據庫中。 – user198003 2010-10-31 11:11:46