iOS 火星坐标相关整理及解决方案汇总

iOS火星地图与地球坐标(MapKit&CoreLocation)

  (2013-01-15 23:43:02)
标签: 

ios

 

mapkit

 

corelocation

 

火星地图

 

火星坐标

分类: iOS
前言
1、MapKit和CoreLocation分别是 iOS的地图框架和定位框架,说句废话呵呵。
下面有几个名词解释一下,因为发现没有有过“精确定位”需求的同学一般不太了解。
2、 火星地图x国出于安全原因将x国的所有需要出版的地图进行了偏移,这样正确的经纬度就在这种地图上定位不到正确的地点了,而且偏移是非线性的,简单说就是不容易找便宜的规律。这种地图就叫火星地图
3、火星坐标:用正确的坐标经过了与火星地图一样的算法偏移后产生的经纬度坐标。
4、地球地图:通常意义上的地图。
5、地球坐标:通常意义上的经纬度坐标。
6、火星坐标+火星地图=地图定位准确。这个想一下就可以理解,相同的算法偏移后,就能在地图上正确显示定位。

正题
一图胜万言,先上图:
iOS之火星地图与地球坐标(MapKit&CoreLocation)
条件:
1、大头针坐标是通过CoreLocation获取的
2、蓝点是MapKit的isShowUserLocation=YES得到的
3、上方corelocation:120.118093,30.285131的经纬度是CoreLocation获取的,与1对应
4、上方mapkit:120.122886,30.282860的经纬度是从MapKit获取的,与2对应
5、真实的地址是蓝点所在位置,已经非常精确了,误差很小。
推测:
1、高德地图是 火星地图,被x国偏移过了
2、CoreLocation获取的是地球坐标
3、苹果对于 火星地图在使用 isShowUserLocation=YES时用的是火星坐标。

如果想在地图上定位显示正确,并且业务场景也符合,建议使用MKMapView.userLocation.location。获取这个坐标时必须isUserLocationVisible这个只读属性是YES,含义是用户当前所在点(上面说的蓝点)在地图上可见区域显示。

iOS 火星坐标相关整理及解决方案汇总

这几天在处理定位相关的代码,彻彻底底的被火星坐标恶心到了。

恶心列表

  1. 从 CLLocationManager 取出来的经纬度放到 mapView 上显示,是错的!
  2. 从 CLLocationManager 取出来的经纬度去 Google Maps API 做逆地址解析,当然是错的!
  3. 从 MKMapView 取出来的经纬度去 Google Maps API 做逆地址解析终于对了。去百度地图API做逆地址解析,依旧是错的!
  4. 从上面两处取的经纬度放到百度地图上显示都是错的!错的!的!

当时我还不知道火星坐标、XX坐标,大骂苹果SB(我错了)…… 如果你碰到上述情况,接着往下看。

名词解释:

地球坐标 (WGS84)

  • 国际标准,GPS标准从 GPS 设备中取出的原始数据是就是这个
  • 国际地图提供商一般使用的也是这个

火星坐标 (GCJ-02)

  • 中国标准,行货 GPS 设备取出的最终数据是这个
  • 国家龟腚: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。

百度坐标 (BD-09)

  • 百度标准,百度 SDK,地图,Geocoding 用的都是这个。

开发时所面临的现状

获取经纬度(GPS)

  • 火星坐标
    • MKMapView
  • 地球坐标
    • CLLocationManager

显示经纬度(地图)

  • 火星坐标
    • iOS 地图
    • Gogole地图
    • 搜搜、阿里云、高德地图
  • 地球坐标
    • Google 卫星地图(国外地图应该都是……)
  • 百度坐标
    • 百度地图

推荐的解决方案:

  • 既然是在国内,存储一律用火星坐标,这样在使用国内地图显示时最方便(用百度地图显示时可以一次转换取得)
  • CLLocationManager 拿到的 CLLocation 转为火星坐标,MKMapView 不用处理
  • 使用地图 API 进行 地址解析/逆地址解析(Geocoding) 时注意相应使用相应地图商的坐标系
  • 部分地图商支持多个坐标系输入,如高德支持地球、火星坐标(这个一直有变动,具体只能参考厂商最新文档了)

附上相应的转换算法

iOS 平台的转换算法的已经封装了一个 Category,在这里 CLLocation+Sino 。

地图坐标 to 火星坐标

火星坐标 to 地图坐标

火星坐标 vs 百度坐标

总结

  • 火星坐标是天朝的新发明,至于火星坐标能补呢功能保证国家安全,我对此深深怀疑:至少用穷举法精度达到10米内是很容易的
  • GPS厂商和地图厂商都需要加偏、纠偏算法,买算法是要付钱的 , 所以你懂的
  • 火星坐标已经挺有天朝特色了:全民都处以虚幻坐标系之下,而百度又极尽展现了天朝厂商特色,为了垄断不折手段。我朝威武!
  • iOS SDK 的做法还是比较合理的,毕竟他是一个国际化的平台。CLLocationManager 提供地球坐标,这样显示国外地图商的地图服务没问题,碰到火星地图,转一下就好,逆之则没那么容易。而 MKMapView 则与 iOS 地图展示相关,国内地图必须使用火星坐标
  • 本人只是想用户使用 app 时能简简单单定位准确,而不是飞檐走壁狐死首丘。本文只做技术讨论,不敢侵犯任何个人、团体、政党、国家、星球权利,任何XXX对此文不满,请留言,我立刻删之

updates

  • 2013.05.01 『部分地图商支持多个坐标系输入』

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值