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

时间:2013-11-21 15:16:50

标签: javascript google-maps-api-3

我找不到一个简单的答案,所以在这里。

我从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”,但是它给出了我未定义的变量错误,显然可能存在同步问题和诸如此类的......(这可以解释未定义的变量)。

有简单的解决方案吗?

1 个答案:

答案 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;