只需显示两点之间的距离(KM)

Simply display distance in KM between two points

本文关键字:KM 之间 两点 距离 显示      更新时间:2023-09-26

我找不到一个简单的答案,所以到此为止。

我正在从wordpress的帖子中获取纬度和经度坐标。我把它们放在一个数组中,以这样初始化我的标记(忽略超时和其他事情,我只想让标记按1下降。):

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);
        }

现在我的问题来了。如何获取从用户位置到每个标记的距离?

我尝试过各种各样的东西,比如同步的"computeDistanceBetween",但它给我的未定义变量带来了错误,显然可能存在同步问题等等。。。(这将解释未定义的变量)。

有简单的解决方案吗?

计算两点之间大圆距离的一种方法是使用haversine公式。

您可以通过以下操作获得距离(脚本中的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;