【问题标题】:Excel formula to calculate the distance between multiple points using lat/lon coordinatesExcel公式使用纬度/经度坐标计算多个点之间的距离
【发布时间】:2014-08-27 17:59:46
【问题描述】:

我目前正在绘制一个包含两个表的模拟数据库架构:Booking 和 Waypoint。

  • Booking 存储出租车预订信息。

  • Waypoint 存储旅途中的接送点和经纬度位置。每个序列都是旅程中的一站。

如何在 Excel 中计算每次旅程中不同站点之间的距离(使用纬度/经度数据)?

有没有办法在 Excel 中以编程方式定义它,即,可以将公式放入 mileage 列(Booking 表),查找匹配序列(通过 bookingId)在Waypoint 表并返回结果?

示例 1:

两站的旅程:

1   1   1   MK4 4FL, 2, Levens Hall Drive, Westcroft, Milton Keynes 52.002529   -0.797623
2   1   2   MK2 2RD, 55, Westfield Road, Bletchley, Milton Keynes   51.992571   -0.72753

根据谷歌,4.1 英里,在Booking 表的mileage 列中输入,其中id = 1

示例 2:

3 站的旅程:

6   3   1   MK7 7DT, 2, Spearmint Close, Walnut Tree, Milton Keynes 52.017486   -0.690113
7   3   2   MK18 1JL, H S B C, Market Hill, Buckingham              52.000674   -0.987062
8   3   1   MK17 0FE, 1, Maids Close, Mursley, Milton Keynes        52.040622   -0.759417

根据谷歌,27.7 英里,在Booking 表中的mileage 列中输入id = 3

【问题讨论】:

  • 虽然在地图上计算直线上的距离(“loxodromic 距离”)很容易,而在大圆上计算距离(“正交距离”)并不难,但计算陆地上相当准确的里程需要更多在表示路线的图上解决最小长度路径问题的复杂解决方案——这反过来又需要良好的路线数据库。我建议为此功能使用现成的专用软件,除非您真的不关心准确性。如果是这种情况,请告诉我,我会找到公式...我在某处有它们...
  • @jsalvata 感谢您回复我。准确性不是真正的问题:)
  • 这是一个很好的链接:stackoverflow.com/questions/365826/…。一张海报提到了“haversine”,这是计算球体距离的公式的名称。谷歌“haversine excel”,你会得到一些结果。

标签: excel formula


【解决方案1】:

如果您想找到两点之间的距离,只需使用此公式即可获得以公里为单位的结果,如果需要,只需转换为英里。

A 点:LAT1、LONG1 B点:LAT2、LONG2

ACOS(COS(RADIANS(90-Lat1)) *COS(RADIANS(90-Lat2)) +SIN(RADIANS(90-Lat1)) *SIN(RADIANS(90-lat2)) *COS(RADIANS(long1) -long2)))*6371

问候

【讨论】:

    【解决方案2】:

    直到最近,精确的地图都是通过三角测量来构建的,这本质上是毕达哥拉斯定理的应用。对于任何一对坐标之间的距离,取 x 坐标差的平方和 y 坐标差的平方和的平方根。然而,x 和 y 坐标必须采用相同的单位(例如英里),这涉及将纬度和经度值分解。这可能会很复杂,因为经度的因素取决于纬度(绕北极走一圈比绕赤道走远),但在你的情况下,北纬 52o 的因素应该起作用。由此得出的结果(可以检查here)与您给出的示例大约有 20% 的差异(在第二种情况下,配对 ID 6 和 7 并将该结果添加到配对 ID 7 和 8 的结果中)。

    【讨论】:

      【解决方案3】:

      由于您说准确性并不重要,并且假设距离很小(例如小于 1000 英里),您可以使用等距距离。

      为此,计算纬度差 (dlat) 和经度差 (dlon)。如果您有任何机会(不太可能)穿过 180º 子午线,请取模 360º 以确保经度差在 -180º 和 180º 之间。还要计算平均纬度 (alat)。

      然后计算:

      distance= 60*sqrt(dlat^2 + (dlon*cos(alat))^2)
      

      此距离以海里为单位。根据需要应用转化。

      解释:这利用了这样一个事实,即根据定义,一海里总是等于一分弧度的纬度。余弦对应于子午线在接近两极时彼此靠近的事实。剩下的只是应用毕达哥拉斯定理——它要求地球的相关部分是平的,这当然只是小距离的一个很好的近似。

      【讨论】:

        【解决方案4】:

        这完全取决于距离是多少以及您需要什么精度。基于“地球局部平坦”模型的计算对于长距离不会提供很好的结果,但对于短距离它们可能没问题。假设地球是一个完美球体的模型(例如,Haversine 公式)提供了更好的准确性,但它们仍然不会产生测地线等级结果。 有关详细信息,请参阅Geodesics on an ellipsoid。 其中一种高精度(毫米的分数)解决方案称为Vincenty's formulae。对于我的 Excel VBA 实现看这里https://github.com/tdjastrzebski/Vincenty-Excel

        【讨论】:

          猜你喜欢
          • 2011-09-16
          • 2010-09-06
          • 2016-02-03
          • 2012-10-13
          • 2012-01-26
          • 2011-04-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多