iOS 火星坐标相关整理及解决方案汇总(转)
这几天在处理定位相关的代码,彻彻底底的被火星坐标恶心到了。
恶心列表
- 从 CLLocationManager 取出来的经纬度放到 mapView 上显示,是错的!
- 从 CLLocationManager 取出来的经纬度去 Google Maps API 做逆地址解析,当然是错的!
- 从 MKMapView 取出来的经纬度去 Google Maps API 做
逆地址解析终于对了。去百度地图API做逆地址解析,依旧是错的! - 从上面两处取的经纬度放到百度地图上显示都是错的!错的!的!
当时我还不知道火星坐标、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 火星坐标
- 地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法 (推荐!)
- 地图 API:百度的 高德的
火星坐标 to 地图坐标
- 数据库查表转换 中国区 GPS坐标 修正(适用于google地图)
- iOS 私有 API (已不可用)
火星坐标 vs 百度坐标
总结
- 火星坐标是天朝的新发明,至于火星坐标能补呢功能保证国家安全,我对此深深怀疑:至少用穷举法精度达到10米内是很容易的
- GPS厂商和地图厂商都需要加偏、纠偏算法,买算法是要付钱的 , 所以你懂的
- 火星坐标已经挺有天朝特色了:全民都处以
虚幻坐标系之下,而百度又极尽展现了天朝厂商特色,为了垄断不折手段。我朝威武! - iOS SDK 的做法还是比较合理的,毕竟他是一个国际化的平台。CLLocationManager 提供地球坐标,这样显示国外地图商的地图服务没问题,碰到火星地图,转一下就好,逆之则没那么容易。而 MKMapView 则与 iOS 地图展示相关,国内地图必须使用火星坐标
- 本人只是想用户使用 app 时能简简单单定位准确,而不是飞檐走壁狐死首丘。本文只做技术讨论,不敢侵犯任何个人、团体、政党、国家、星球权利,任何XXX对此文不满,请留言,我立刻删之
iOS 火星坐标相关整理及解决方案汇总(转)的更多相关文章
- iOS 定位坐标不准确的相关整理及解决方案汇总
这几天处理定位相关的代码,彻彻底底的被火星坐标恶心到了. 恶心列表 从 CLLocationManager 取出来的经纬度放到 mapView 上显示,是错的! 从 CLLocationManager ...
- ios 解决有关火星坐标的问题
CLLocationManager 定位获取CLLocation 是地球坐标,而MKMapView 获取的是天朝火星坐标,这就导致了使用定位的时候,显示用户的蓝点和当前定位信息偏差(因为蓝点是调用了M ...
- IOS LocationManager定位国内偏移,火星坐标(GCJ-02)解决方法
转载自:http://blog.csdn.net/swingpyzf/article/details/16972351 纠偏也可参考:http://www.2cto.com/kf/201310/253 ...
- ios 百度地图,火星坐标,地球坐标互转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- iOS、mac开源项目及库汇总
原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499 iOS每日一记------------之 中级完美大整理 iOS.m ...
- Android WebView常见问题及解决方案汇总
Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- Android之Android WebView常见问题及解决方案汇总
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变 ...
随机推荐
- java客户端连接MongoDB数据库的简单使用
1.下载mongoDB的jar包,并引入到工程的CLASSPATH中下载:mongodb2.5驱动包下载 如果使用maven项目,最新的依赖如下: <dependency> <gro ...
- Java集合类之向量Vector
package com.test; import java.util.*; public class Demo7_3 { public static void main(String[] args) ...
- 批量生成卡号密码的php程序
<?php header('Content-Type:text/html; charset=utf-8'); function MakeCard() { set_time_limit(0); / ...
- Java 数组倒序
String s[] = {,,,,,,}; ; i < s.length; i ++){ System.-i] +","); }
- Ember.js demo6
<!DOCTYPE html> <html> <head> <meta name="description" content=" ...
- Android开发UI之自定义视图属性
Android框架中,所有自定义的view类都继承自View,也可以继承Button等view的子类 为了允许ADT能够与view交互,必须提供一个能够获取Context和作为属性的Attribute ...
- Linux 性能监测工具总结
前言: Linux系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存.CPU.硬盘……)出了问题.在Linux系统中,所有的运行参数保存在虚拟目录/ ...
- API函数
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...
- JDK/bin目录下的不同exe文件的用途(转)
新安装完JDk 大家是否发现安装目录的bin文件夹有很多exe文件 下面就为大家讲解不同exe文件的用途 javac:Java编译器,将Java源代码换成字节代 java:Java解释器,直接从类文件 ...
- Tomcat输出catalina.out的大小控制
资源URL:http://download.csdn.net/detail/attagain/7771065 Tomcat默认生成的日志文件catalina.out,随着时间的推移,逐渐增大,可能达到 ...