Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅显示两点之间的距离(以KM为单位)_Javascript_Google Maps Api 3 - Fatal编程技术网

Javascript 仅显示两点之间的距离(以KM为单位)

Javascript 仅显示两点之间的距离(以KM为单位),javascript,google-maps-api-3,Javascript,Google Maps Api 3,我找不到一个简单的答案,就这样吧 我正在从wordpress的帖子中获取纬度和经度坐标。我将它们放在一个数组中,以初始化我的标记(忽略超时等,我只希望标记以1乘以1的方式删除): 现在我的问题来了。如何获取用户位置到每个标记的距离 我尝试过各种各样的方法,比如同步的“ComputedDistanceBeween”,但它给出了我未定义的变量错误,显然可能存在同步问题等等。。。(这可以解释未定义的变量) 有简单的解决办法吗 计算两点之间大圆距离的一种方法是使用哈弗公式 您可以通过以下操作获得距离(脚

我找不到一个简单的答案,就这样吧

我正在从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;