1
好吧,我有一個地圖上有一些標記。地圖上有一個點擊事件應該得到最接近的標記,但是當find_closest_marker(event)函數運行時,它會在map.markers.length中斷,說它的未定義。map.markers是未定義谷歌地圖API v3
這裏是什麼即時試圖http://jsfiddle.net/VyzFq/7/
任何人都可以請告訴我,我要去哪裏錯在這裏的鏈接。
好吧,我有一個地圖上有一些標記。地圖上有一個點擊事件應該得到最接近的標記,但是當find_closest_marker(event)函數運行時,它會在map.markers.length中斷,說它的未定義。map.markers是未定義谷歌地圖API v3
這裏是什麼即時試圖http://jsfiddle.net/VyzFq/7/
任何人都可以請告訴我,我要去哪裏錯在這裏的鏈接。
貌似有幾個問題:
1)map.markers陣列尚未聲明。在for循環之上聲明它,並將標記推到標記數組上。
...
var infowindow = new google.maps.InfoWindow();
var marker, i;
map.markers = []; // ADD THIS LINE
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
map.markers.push(marker); // ADD THIS LINE
...
2)find_closest_point函數看不到地圖變量。移動find_closest_point功能,在其中添加了click事件偵聽範圍:
// CHANGE THIS LINE
google.maps.event.addListener(map, 'click', find_closest_marker);
// TO:
google.maps.event.addListener(map, 'click', function(event) {
var lat = event.latLng.lat();
var lng = event.latLng.lng();
var R = 6371;
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);
});
我還忘了添加標題:位置[I] [0],到地圖的選擇,但它的偉大的工作。謝謝您的幫助! :) – MAc 2012-02-06 08:40:03
這裏是其他人的工作版本的鏈接:http://jsfiddle.net/VyzFq/8/ – MAc 2012-02-06 08:41:30
@Glen Robertson +1,你救了我的一天。現在我需要得到最接近的標記,當我告訴google.map分享我的位置,然後從綠色標記計算出我的db之一的紅色。 – HenryW 2013-11-24 18:51:53