IOS 地球坐标-火星坐标-百度坐标 转换

news/2024/11/17 22:21:43/

如果你正需要这样的工具,保证拿过去就能用
如果你还不知道这是什么工具,我保证以后的iOS开发中肯定会用
如果你是iOS大牛,期待您能指点一下 ^_^

好了,废话不多说了。上干货


坐标系介绍

首先介绍一下目前的定位坐标系统
1、地球坐标 :( 代号:GPS、WGS84 )--- 有W就是世界通用的
也就是原始坐标体系,这是国际公认的世界标准坐标体系;

使用 WGS84 坐标系统的产品有
苹果的 CLLocationManager获取的坐标


2、火星坐标:(代号:GCJ-02)--- * G国家 C测绘 J局 02年测绘的*
为了保证国家安全,不被逮人获知精准的地点,国内使用的一切坐标,都必须是经过测绘局精密处理的坐标。你要是不用?估计你也不能不用,呵呵

使用 GCJ-02 火星坐标系统的产品有
高德地图腾讯地图阿里云地图灵图51地图

注意:现在苹果系统自带的地图使用的是高德地图,所以苹果地带的地图应用,用的是GCJ-02的坐标系统。但是代码中CLLocationManager获取到的是WGS84坐标系的坐标


3、其他坐标 :百度坐标系统(代号:BD-09)
大百度地图的坐标系统,岂能跟你们一样。百度坐标是在火星坐标的基础上再次加密计算而获得的

使用 BD-09 坐标系统的产品有
百度地图

坐标转换

开发中你会遇到这样的需求
1、通过当前和地址的经纬度,点击导航按钮
2、如果手机装有百度地图,就跳转百度地图导航
3、如果没有百度,有高德地图,就跳转到高德地图导航
4、如果在没有,就跳转腾讯地图导航
如果········来人,把产品经理拖出去,宰掉!!!

在开发过程中,通过 CLLocationManager 拿到地球坐标坐标。就可以在跳转不同导航产品之前,进行坐标转换

地球坐标 ---> 火星坐标

- (NSDictionary *)locationMarsFromEarth_earthLat:(double)latitude earthLon:(double)longitude {// 首先判断坐标是否属于天朝if (![self isInChinaWithlat:latitude lon:longitude]) {return @{@"latitude":@(latitude),@"longitude":@(longitude)};}double a = 6378245.0;double ee = 0.00669342162296594323;double dLat = [self transform_earth_from_mars_lat_lat:(latitude - 35.0) lon:(longitude - 35.0)];double dLon = [self transform_earth_from_mars_lng_lat:(latitude - 35.0) lon:(longitude - 35.0)];double radLat = latitude / 180.0 * M_PI;double magic = sin(radLat);magic = 1 - ee * magic * magic;double sqrtMagic = sqrt(magic);dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * M_PI);dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * M_PI);double newLatitude = latitude + dLat;double newLongitude = longitude + dLon;NSDictionary *dic = @{@"latitude":@(newLatitude),@"longitude":@(newLongitude)};return dic;
}
- (BOOL)isInChinaWithlat:(double)lat lon:(double)lon {if (lon < 72.004 || lon > 137.8347)return NO;if (lat < 0.8293 || lat > 55.8271)return NO;return YES;
}
- (double)transform_earth_from_mars_lat_lat:(double)y lon:(double)x {double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(fabs(x));ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;ret += (20.0 * sin(y * M_PI) + 40.0 * sin(y / 3.0 * M_PI)) * 2.0 / 3.0;ret += (160.0 * sin(y / 12.0 * M_PI) + 3320 * sin(y * M_PI / 30.0)) * 2.0 / 3.0;return ret;
}- (double)transform_earth_from_mars_lng_lat:(double)y lon:(double)x {double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(fabs(x));ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;ret += (20.0 * sin(x * M_PI) + 40.0 * sin(x / 3.0 * M_PI)) * 2.0 / 3.0;ret += (150.0 * sin(x / 12.0 * M_PI) + 300.0 * sin(x / 30.0 * M_PI)) * 2.0 / 3.0;return ret;
}

火星坐标 <---> 百度坐标


/** 百度坐标 => 火星坐标 */
- (NSDictionary *)marsLocationFromBaidu_baiduLat:(double)latitude baiduLon:(double)longitude {double x_pi = 3.14159265358979324 * 3000.0 / 180.0;double x = longitude - 0.0065, y = latitude - 0.006;double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);double newLatitude = z * sin(theta);double newLongitude = z * cos(theta);NSDictionary *dic = @{@"latitude":@(newLatitude),@"longitude":@(newLongitude)};return dic;
}/** 火星坐标 => 百度坐标 */
- (NSDictionary *)baiduLocationFromMars_marsLat:(double)latitude marsLon:(double)longitude {double x_pi = 3.14159265358979324 * 3000.0 / 180.0;double x = longitude, y = latitude;double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);double newLatitude = z * sin(theta) + 0.006;double newLongitude = z * cos(theta) + 0.0065;NSDictionary *dic = @{@"latitude":@(newLatitude),@"longitude":@(newLongitude)};return dic;
}



作者:Biharry
链接:https://www.jianshu.com/p/fbf25d379959
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


http://www.ppmy.cn/news/964017.html

相关文章

爬取豆瓣影评,告诉你《流浪地球》在讲什么!

今天忽然想爬取《流浪地球》的豆瓣影评并分析这部电影在讲一些什么把内容&#xff0c;在还没开始写的时候&#xff0c;我认为这个爬虫应该很简单&#xff0c;但是&#xff0c;经过我写完之后&#xff0c;发现并不是那么容易&#xff0c;豆瓣给爬虫设置了很多反爬虫&#xff0c;…

【徐云流浪中国】地图版

06月14日 70公里 麻扎兵站 骑行新藏线&#xff0c;七十公里来到麻扎兵站&#xff0c;路边废弃房里起锅烧油度过平淡的一天 起点 终点 叶城县 中国新疆维吾尔自治区喀什地区 36.445623, 77.006781 今日露营地&#xff1a;麻扎兵站&#xff0c;70公里左右 06月13日 55公里 …

《流浪地球》读后感

朝闻道 一群顶尖学者,为了追求某个答案,答应排险者,看到真理的美后只能存活10分钟 啊啊啊啊,话说恐龙灭绝的原因我也想知道啊 虽说好奇心害死猫,但好奇心永远无法被抹除的吧

Python爬虫实践《流浪地球》豆瓣影评分析及实践心得

一段多余的话 多余的话不多说&#xff0c;我想聊聊在进行实践分析中遇到的困难与心得。下载jupyter进行分析的一些建议 我们安装juputer前&#xff0c;首先需要安装python&#xff0c;因为本人曾经上过自然语言处理课&#xff0c;所以已经安装完成&#xff08;3.8版本&#x…

爬虫实战之《流浪地球》豆瓣影评分析(三)

4. 分析评论数量及评分与时间的关系 首先导入数据&#xff0c;进行一个初步的统计&#xff1a; import pandas as pd data pd.read_csv(doubanliulangdiqiu.csv,encoding GB18030) data[评分].value_counts()可以看到这样的情况&#xff1a; 如果没有数据&#xff0c;可以去…

爬虫实战之《流浪地球》豆瓣影评分析(二)

3. 分析好评与差评的关键信息 依靠绘制词云图&#xff0c;来分析好评与差评的关键信息的区别 数据预处理 依靠上一篇爬取到的csv文件&#xff0c;来进行分析&#xff0c;首先导入文件&#xff0c;重点是短评正文的信息。 首先是使用结巴库来进行分词&#xff0c;然后去除停用…

爬虫实战之《流浪地球》豆瓣影评分析(一)

背景与挖掘目标获取豆瓣评论数据分析好评与差评的关键信息分析评论数量及评分与时间的关系分析评论者的城市分布情况 1. 背景与挖掘目标 豆瓣&#xff08;douban&#xff09;是一个社区网站。网站由杨勃&#xff08;网名“阿北”&#xff09; 创立于2005年3月6日。该网站以书影…

《流浪地球》影评数据爬取分析

《流浪地球》影评数据爬取分析 人生苦短&#xff0c;我用Python。 阿巴阿巴阿巴&#xff0c;爬虫初学者&#xff0c;志在记录爬虫笔记&#xff0c;交流爬虫思路。 话不多说&#xff0c;开始进行操作。 对于电影数据影评的爬取&#xff0c;这里选取的网站是豆瓣网&#xff08;…