當移動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);
});
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
沒有留言:
發佈留言