计算Google Maps V3中两点之间的距离

您如何计算Google Maps V3中两个标记之间的距离? (相似于V2中的distanceFrom函数。) html

谢谢.. 算法


#1楼

使用PHP,您能够使用如下简单函数计算距离: api

// to calculate distance between two lat & lon

function calculate_distance($lat1, $lon1, $lat2, $lon2, $unit='N') 
{ 
  $theta = $lon1 - $lon2; 
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
  $dist = acos($dist); 
  $dist = rad2deg($dist); 
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);

  if ($unit == "K") {
    return ($miles * 1.609344); 
  } else if ($unit == "N") {
      return ($miles * 0.8684);
    } else {
        return $miles;
      }
}

// function ends here

#2楼

不得不作...动做脚本的方式 函数

//just make sure you pass a number to the function because it would accept you mother in law...
public var rad = function(x:*) {return x*Math.PI/180;}

protected  function distHaversine(p1:Object, p2:Object):Number {
    var R:int = 6371; // earth's mean radius in km
    var dLat:Number = rad(p2.lat() - p1.lat());
    var dLong:Number = rad(p2.lng() - p1.lng());

    var a:Number = Math.sin(dLat/2) * Math.sin(dLat/2) +
                Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) * Math.sin(dLong/2) * Math.sin(dLong/2);
    var c:Number = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d:Number = R * c;

    return d;
}

#3楼

使用google能够使用球状apigoogle.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);google

可是,若是球形投影或正弦波解决方案的精度对您来讲不够精确(例如,若是您靠近极点或计算更长的距离),则应使用其余库。 spa

我在这里的 Wikipedia上找到了有关该主题的大多数信息。 code

查看任何给定算法的精度是否足够的一个技巧是填写地球的最大和最小半径,并查看差别是否可能致使您的用例出现问题。 能够在本文中找到更多详细信息 htm

最终,Google API或Haversine能够毫无问题地知足大多数目的。 对象


#4楼

请参阅GLatLng对象上的distanceFrom函数; 在v2和v3之间,功能参数略有变化。 ip


#5楼

若是要本身计算,能够使用Haversine公式:

var rad = function(x) {
  return x * Math.PI / 180;
};

var getDistance = function(p1, p2) {
  var R = 6378137; // Earth’s mean radius in meter
  var dLat = rad(p2.lat() - p1.lat());
  var dLong = rad(p2.lng() - p1.lng());
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) *
    Math.sin(dLong / 2) * Math.sin(dLong / 2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d; // returns the distance in meter
};
相关文章
相关标签/搜索