PYTHON:使用python基于纬度/经度找到两点之间距离的最佳方法是什么?

时间:2017-12-07 05:35:39

标签: python geopy

我正在使用python django开发基于位置的应用。我想根据纬度/经度找到两点之间的距离。我找到了几个答案但最终结果(距离)各不相同。请找我找到距离的最佳方法。感谢

1 个答案:

答案 0 :(得分:2)

根据您的评论,我假设您需要计算不到50英里的短距离, 最简单的不太准确的方法是协调点距离公式,即aka,毕达哥拉斯距离公式 enter image description here

其中a,b显然是纬度,经度对。现在一度纬度= 68~69英里或111公里。请记住,这只是一个近似值。 只需将等式的结果乘以纬度里程。这给了一个相当粗略的过滤器,当我来到短距离时,我用它来按需要进行多次计算,使用google api显示结果可能相当昂贵(时间,带宽,配额明智)考虑到我应用程序需要每次搜索过滤大约100个结果。此外,我建议添加20%~30%的变化以包括实际道路距离。

确定。如果你还在读这个,那么你需要更准确的结果。

然后使用它,记得将此代码转换为python格式。我刚刚和我一起使用了javascript代码。

  function getDistanceLatLong(lat1,Long1,lat2,Long2) {
  var RK = 6371; // Radius of the earth in km
  var RM = 3959;
  var dLat = deg2rad(lat2-lat1);  // deg2rad below
  var dLong = deg2rad(Long2-Long1); 

  var a =  Math.sin(dLat/2) * Math.sin(dLat/2) +  
           Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
           Math.sin(dLong/2) * Math.sin(dLong/2); 

  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = RK * c; // Distance in kiloMeters choose this or
  var d = RM * c; // Distance in Miles
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}