【发布时间】:2012-01-27 12:04:32
【问题描述】:
我正在制作一个核心位置驱动的应用程序,我必须为给定的纬度/经度对计算很多东西,例如:
到另一个纬度/经度坐标的距离
向 y 方向移动距离 x 时的目标纬度/经度坐标
有没有开源的东西可以使用?
【问题讨论】:
标签: math geolocation geocoding core-location geography
我正在制作一个核心位置驱动的应用程序,我必须为给定的纬度/经度对计算很多东西,例如:
到另一个纬度/经度坐标的距离
向 y 方向移动距离 x 时的目标纬度/经度坐标
有没有开源的东西可以使用?
【问题讨论】:
标签: math geolocation geocoding core-location geography
由于您使用的是CoreLocation,因此您可以使用@progrmr 指出的CoreLocation's distanceFromLocation。
另一方面,由于您指定了开源,而这不是开源的,您可以按照@MikeT 的建议查看GeographicLib 实现。
(我最初的答案,建议Haversine 公式,有缺陷。正如@MikeT 指出的那样,Haversine 公式仅对球体有效。地球不是一个完美的球体。)
原始的、有缺陷的答案:
听起来你想要Haversine 公式。
Wikipedia page for the Haversine formula 解释了它是什么,并且(at the bottom, under "External links") 包含指向许多实现的链接。我没有检查过,但我不得不想象其中至少有一些是开源项目。
【讨论】:
GeographicLib 已在多种编程语言中实现,包括Java。该库计算旋转椭球体(或椭球体)上测地线的长度和相关数学属性。计算误差一般在微米范围内。
求两个坐标之间的距离:
GeodesicData g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2,
GeodesicMask.DISTANCE);
然后得到g.s12两点之间的距离。
使用Direct 方法找到问题中的第二个示例,即投影给定距离和方向的位置。
【讨论】: