Javascript 仅显示两点之间的距离(以KM为单位)
我找不到一个简单的答案,就这样吧 我正在从wordpress的帖子中获取纬度和经度坐标。我将它们放在一个数组中,以初始化我的标记(忽略超时等,我只希望标记以1乘以1的方式删除): 现在我的问题来了。如何获取用户位置到每个标记的距离 我尝试过各种各样的方法,比如同步的“ComputedDistanceBeween”,但它给出了我未定义的变量错误,显然可能存在同步问题等等。。。(这可以解释未定义的变量)Javascript 仅显示两点之间的距离(以KM为单位),javascript,google-maps-api-3,Javascript,Google Maps Api 3,我找不到一个简单的答案,就这样吧 我正在从wordpress的帖子中获取纬度和经度坐标。我将它们放在一个数组中,以初始化我的标记(忽略超时等,我只希望标记以1乘以1的方式删除): 现在我的问题来了。如何获取用户位置到每个标记的距离 我尝试过各种各样的方法,比如同步的“ComputedDistanceBeween”,但它给出了我未定义的变量错误,显然可能存在同步问题等等。。。(这可以解释未定义的变量) 有简单的解决办法吗 计算两点之间大圆距离的一种方法是使用哈弗公式 您可以通过以下操作获得距离(脚
有简单的解决办法吗 计算两点之间大圆距离的一种方法是使用哈弗公式 您可以通过以下操作获得距离(脚本中的d变量):
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
谢谢,我会试试这个。`AsSynchronous“ComputedIstanceBeween`-ComputedIstanceBeween不是异步的。然而,地理定位和initMarkers函数都需要时间才能完成。
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
/*var userPos = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);*/
userPos = google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
}, function() {
handleNoGeolocation(true);
});
} else {
// Browser doesn't support Geolocation
handleNoGeolocation(false);
}
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;