首页 > 其他分享 >iOS根据两点经纬度坐标计算指南针方位角

iOS根据两点经纬度坐标计算指南针方位角

时间:2023-01-10 20:11:36浏览次数:59  
标签:bearing CLLocation 方位角 经纬度 double iOS cos coor2

目录

需求

在地图导航时,始终保持当前路段竖直超前。

设计

因地图暴露的方法中只有设置地图相对于正北的方向角的方法。因此,需要实现“根据两点经纬度坐标计算指南针方位角”的算法,这样在每次切换路段时,调用算法计算新路段指南针方位角,然后设置地图相对于正北的方向角即可实现需求。
示意图如下:
截屏2023-01-10 15.57.34

算法实现原理详见文末引用。下面贴出基于 OC 语言的代码实现。

代码实现

新建CLLocation 分类方法

#import <CoreLocation/CoreLocation.h>

+ (double)ca_getCompassAngleFromCoor1:(CLLocationCoordinate2D)coor1 coor2:(CLLocationCoordinate2D)coor2 {
    double long1 = coor1.longitude;
    double lat1 = coor1.latitude;
    double long2 = coor2.longitude;
    double lat2 = coor2.latitude;
         
    double φ1 = [CLLocation toRadius:lat1];
    double φ2 = [CLLocation toRadius:lat2];
    double Δλ = [CLLocation toRadius:(long2 - long1)];
    
    double x = cos(φ1) * sin(φ2) - sin(φ1) * cos(φ2) * cos(Δλ);
    double y = sin(Δλ) * cos(φ2);
    double θ = atan2(y, x);
    
    double bearing = [CLLocation toDegrees:θ];
    return bearing;
}

+ (double)toDegrees:(double)radius {
    return radius * 180.0 / M_PI;
}

+ (double)toRadius:(double)degree {
    return degree * M_PI / 180.0;
}

调用示例

double bearing = [CLLocation ca_getCompassAngleFromCoor1:(CLLocationCoordinate2DMake(20, 20)) coor2:(CLLocationCoordinate2DMake(20, 140))];
NSLog(@"bearing:%.2f", bearing);
//设置地图方位角...

结论

经测试,上面算法可以满足需求,且效果正确!

https://www.movable-type.co.uk/scripts/latlong.html

标签:bearing,CLLocation,方位角,经纬度,double,iOS,cos,coor2
From: https://www.cnblogs.com/Dast1/p/17041011.html

相关文章

  • Qt-Qt之实现框选地图功能(返回选中区域经纬度)
     .pro1QT+=coregui23greaterThan(QT_MAJOR_VERSION,4):QT+=widgets45CONFIG+=c++1167#Thefollowingdefinemakesyourcompi......
  • iOS OC 中的对象、 类 和 元类
    一、对象的结构体typedefstructobjc_object{Classisa;}*id;isa指针:这个指针指向他所属的类。这个对象的isa指针指向他的类。二、类的结构体typedefst......
  • VUE3 AXIOS 封装
    网上找了很多AXIOS的封装但是都不是很满意,后来参考其他人的实现做了改动后特分享出来http.ts文件封装importtype{AxiosRequestConfig,AxiosResponse}from'axios......
  • 鹅鸭杀ios下载教程
    1.打开AppStore,点右上角头像,滑到屏幕底部,退出登录2.滑到屏幕顶部,用我提供的AppleID登录3.搜索goosegooseduck下载搞定,记得退出我的账号......
  • 2023年最新ios证书申请流程
    做过前端多端开发的朋友们都知道,hbuilderx或apicloud这些开发工具的uniapp框架可以开发ios应用,使用他们的云打包即可。云打包的时候需要一个私钥证书和一个profile文件,这......
  • Ajax(Fetch&Axios)
    传统服务器传统服务器的结构是基于MVC模式Model--数据模型View--视图,用来呈现Controller--控制器,复杂加载数据并选择视图来呈现数据传统的服务器是直接为客户端......
  • JSON to TS 转化 Axios 请求类型约束
    JSONtoTS扩展插件的使用作用场景作用是快速转化React+TS的Axios拿回数据的类型约束定义 步骤一.获取数据当页面中发起请求成功,获取到接口所携带的数据时,cons......
  • 分享用Adobe Air向iOS移植游戏的经验
    分享用AdobeAir向iOS移植游戏的经验​​http://gamerboom.com/archives/47931​​发布时间:2012-02-2117:04:42Tags:​​AdobeAir​​​,​​​iOS移植游......
  • 小米主题高仿IOS
    主题类型:混搭预览效果如下混搭列表图如下测试MIUI版本12-13-14通用......
  • iOS不想上架
     本文介绍了如何从MacOSXCatalina将IPA文件上传到AppStore的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!问题描述我刚......