Google Map ~ map move event trigger on distance above 10 km

想寫一個程式是

當移動google map之後~~~~~對server端要求一些數據

但又不希望過多的小距離移動~~~而產生不必要的要求次數太多

這時就可以用經緯度來判斷上次要求數據的經緯度以及現在地圖中心的經緯度來計算距離

在判斷要不要做要求


以下是example~~~(needs jQuery)

GEvent.addListener(map, "moveend", function () {

if($(window).data('prevGetNearbyLat') != null && $(window).data('prevGetNearbyLng') != null){

var currentLat = map.getCenter().lat();
var currentLng = map.getCenter().lng();
var prevLat = $(window).data('prevGetNearbyLat');
var prevLng = $(window).data('prevGetNearbyLng');

if(calculateDistance(prevLat, prevLng, currentLat, currentLng, 'K') < 10){
return;
}

}


//do something
var lat = map.getCenter().lat();
var lng = map.getCenter().lng();

$(window).data('prevGetNearbyLat', lat);
$(window).data('prevGetNearbyLng', lng);

});



//calculate two points distance

function calculateDistance(lat1, lon1, lat2, lon2, unit) {
var radlat1 = Math.PI * lat1/180;
var radlat2 = Math.PI * lat2/180;
var radlon1 = Math.PI * lon1/180;
var radlon2 = Math.PI * lon2/180;
var theta = lon1-lon2;
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;
if (unit=="K") { dist = dist * 1.609344 }
if (unit=="N") { dist = dist * 0.8684 }
return dist;
}


distance calculator reference
http://www.zipcodeworld.com/samples/distance.js.html

沒有留言: