我找不到一个简单的答案,所以在这里。
我从wordpress帖子中获取纬度和经度坐标。我把它们放在一个数组中来初始化我的标记(忽略超时和东西,我只是希望标记逐一丢弃..):
function initMarkers(){
for (i = 0; i < locations.length; i++) {
setTimeout(function(y){
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[y][2], locations[y][1]),
map: map,
animation: google.maps.Animation.DROP,
icon: iconMarker
})
gmarkers.push(marker);//Adds the marker object to array
//console.log(gmarkers[i].getPosition());
},500 * i, i);// end setTimeout
}// end for
}
这没有问题。请注意,我将标记对象添加到“gmarkers”以便最终能够使用其参数。
此时,地图出现,标记掉落,没有错误。
我也将用户的地理位置存储在“userPos”中。
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);
}
现在出现了我的问题。如何获得用户位置到每个标记的距离?
我已经尝试了各种各样的事情,比如ascynchronous“computeDistanceBetween”,但是它给出了我未定义的变量错误,显然可能存在同步问题和诸如此类的......(这可以解释未定义的变量)。
有简单的解决方案吗?
答案 0 :(得分:0)
计算两点之间的大圆距离的一种方法是使用半正式公式。
您可以通过执行以下操作来获取距离(脚本中的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;