【问题标题】:Is there a library or framework for geodesic lat/long coordinate calculations?是否有用于测地纬度/经度坐标计算的库或框架?
【发布时间】:2012-01-27 12:04:32
【问题描述】:

我正在制作一个核心位置驱动的应用程序,我必须为给定的纬度/经度对计算很多东西,例如:

  • 到另一个纬度/经度坐标的距离

  • 向 y 方向移动距离 x 时的目标纬度/经度坐标

有没有开源的东西可以使用?

【问题讨论】:

    标签: math geolocation geocoding core-location geography


    【解决方案1】:

    由于您使用的是CoreLocation,因此您可以使用@progrmr 指出的CoreLocation's distanceFromLocation

    另一方面,由于您指定了开源,而这不是开源的,您可以按照@MikeT 的建议查看GeographicLib 实现。

    (我最初的答案,建议Haversine 公式,有缺陷。正如@MikeT 指出的那样,Haversine 公式仅对球体有效。地球不是一个完美的球体。)

    原始的、有缺陷的答案:

    听起来你想要Haversine 公式。

    Wikipedia page for the Haversine formula 解释了它是什么,并且(at the bottom, under "External links") 包含指向许多实现的链接。我没有检查过,但我不得不想象其中至少有一些是开源项目。

    【讨论】:

    • Haversine 公式仅适用于球体上的计算。问题是寻找测地线库,通常在an ellipsoid of revolution 中暗示。
    • 好点@MikeT。我已经更新了我的答案,以包含您更好的建议,并在我的原始答案中提及缺陷。
    【解决方案2】:

    github 上有一些 C 函数可以从坐标对或给定起点和航向的目标坐标进行航向。 Distance 在您可以使用 CLLocation 完成的坐标之间。

    这些是基于余弦球定律并从算法herehere 推导出来的。

    【讨论】:

      【解决方案3】:

      GeographicLib 已在多种编程语言中实现,包括Java。该库计算旋转椭球体(或椭球体)上测地线的长度和相关数学属性。计算误差一般在微米范围内。

      求两个坐标之间的距离:

      GeodesicData g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2,
                                              GeodesicMask.DISTANCE);
      

      然后得到g.s12两点之间的距离。

      使用Direct 方法找到问题中的第二个示例,即投影给定距离和方向的位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-04
        • 2013-08-07
        • 2014-12-16
        • 2016-02-03
        • 1970-01-01
        • 2016-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多