GreatCircle是一个iOS框架,它为CLLocation类提供一系列扩展。
CLLocation类只提供了一个方法
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location
用于计算两个GPS位置之间的距离。因此,iOS开发者必须“自行”解决更复杂的GPS位置计算问题。
GreatCircle,它是基于Chris Veness(Geodesy函数项目的所有者)的出色工作,为CLLocation类提供了一组完整的扩展方法,使处理GPS位置和对这些位置进行计算变得简单易行。
(有关更一般的介绍,请参阅:可移动类型脚本纬度/经度计算参考)
到目前为止,我已经致力于将球面地球模型移植过来,它提供了一个简单公式,覆盖了大多数用例的精度要求。
GreatCircle可以通过Carthage依赖管理器或作为CocoaPod使用。
github "softwarenerd/GreatCircle"
在应用程序目标“通用”设置选项卡的“链接框架和库”部分,将磁盘上的Carthage/Build/iOS文件夹中的GreatCircle.framework拖放到应用程序目标
在应用程序目标的“构建阶段”设置选项卡中,单击“+”图标并选择“新建Run Script阶段”。创建一个Run Script,在以下内容中指定您的shell(例如 bin/sh
),将以下内容添加到shell下的脚本区域
/usr/local/bin/carthage copy-frameworks
并在“输入文件”下添加您想要使用的框架的路径,例如
$(SRCROOT)/Carthage/Build/iOS/GreatCircle.framework
将 GreatCircle
添加到您的 podfile 中
target 'MyApp' do
use_frameworks!
pod 'GreatCircle', '~> 1.0'
end
然后使用以下命令进行安装
pod install
如果您是首次在项目中使用 CocoaPod,您需要将 ProjectName.xcodeproj
文件切换到由 pod install
命令创建的 ProjectName.xcworkspace
根据需要将 GreatCircle 框架导入到您的源文件中。
扩展方法
-crossTrackDistanceToStartLocation:endLocation
返回相对于指定起始位置和终止位置的交叉航向距离(以米为单位)。
-crossTrackLocationToStartLocation:endLocation
返回表示相对于指定起始位置和终止位置的交叉航向点的位置。
-distanceToOtherLocation
返回此位置与其他位置之间的距离(以米为单位)。
-finalBearingToOtherLocation
返回此位置与其他位置之间的最终航向(以度为单位)。最终航向是从其他位置到当前位置的初始航向的相反方向 180°。最终航向将根据距离和纬度而有所不同。
-initialBearingToOtherLocation
返回此位置与其他位置之间的初始航向(以度为单位)。
+intersectionOfLocation:andBearing:withLocation:andBearing
返回表示两个路径的交点的位置,每个路径都由一个位置和航向指定。如果两条路径不相交,则返回 nil。
-isEqualToOtherLocation
比较此位置与其他位置是否相等。
-locationWithBearing:distance
返回表示从当前位置起,指定航向和距离的位置。
-midpointToOtherLocation
返回表示此位置与其他位置之间中点的位置。
GreatCircle 仍在开发中,我们非常欢迎您的贡献。请随意分支仓库并提交 PR。
GreatCircle 在 MIT 许可证 下发布。