【问题标题】:Distance between two lat,lon points两个纬度,经度点之间的距离
【发布时间】:2011-04-04 12:18:29
【问题描述】:

是否可以使用从 google apis 返回的纬度和经度以经典方式比较距离(2 点之间的距离:d = sqrt(pow(lat2-lat1, 2) + pow(lon2-lon1, 2)))而不转换为米或某物?我需要它只是为了比较找到从一系列点到参考点的最近点。例如:

假设我们有两个 (lat,lon) 点:(40.2535425,22.88245345) 和 (40.2565795,22.8884539) 我们想找到最接近 (40.2335425,22.83245345) 的女巫。可以应用上面的代码来查找距离吗?或者我们需要找到距离,比如说以米为单位(使用半正弦公式或其他),首先从参考点的每个点开始,然后比较值?

我问这个问题是因为我不知道 google apis 作为 lat, lon 返回的值到底是什么!我的意思是不是 deg-min-sec 吗?

谢谢...

【问题讨论】:

  • google 'great distance' - 您应该能够将这些 lat long 值传递给标准化函数以获取沿地球表面的距离。
  • 在两极附近,经度的行为很有趣。在 +/-90 度纬度,经度 == 0 距离。所以我想毕达哥拉斯的方式不会在任何地方都有效。
  • 如果您只是在最接近的位置之后,请不要在计算中进行平方根。如果 aa b (假设您保持一切积极)。保存根直到你真正需要距离值。

标签: google-maps distance latitude-longitude


【解决方案1】:

不,因为经线会向两极汇聚。如果您的点相对靠近,您可以这样估算距离:

d = sqrt(pow(lat2-lat1, 2) + cos(lat1)*pow(lon2-lon1, 2))

如果您需要在远距离上获得更高的精度,有几个花哨的公式可以计算 great-circle distances,但我发现转换为单位圆上的 3D 坐标然后做一个简单的毕达哥拉斯距离更简单,然后是 2 sin-1(d/2) 转换回角度(尽管我可以理解有些人可能会发现 not 发现这更简单,:-)。

【讨论】:

  • 有一个计算大圆距离的 JavaScript 公式,stackoverflow.com/a/27943/368691
  • “d”能否以米/英里为单位进行转换?我之所以问是因为我对以下事实感到困惑,因为有 180 度纬度但 360 度经度,我认为“d”只能用于比较距离,但不能用于计算绝对距离......但我会如果可以以某种方式转换“d”,那将非常高兴:)
【解决方案2】:

您还可以使用新几何库中的computeDistanceBetween(),我认为它会返回以米为单位的距离

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2013-10-25
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多