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

恶心列表

  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 百度坐标

总结

  • iOS SDK 的做法还是比较合理的,毕竟他是一个国际化的平台。CLLocationManager 提供地球坐标,这样显示国外地图商的地图服务没问题,碰到火星地图,转一下就好,逆之则没那么容易。而 MKMapView 则与 iOS 地图展示相关,国内地图必须使用火星坐标
  • 本人只是想用户使用 app 时能简简单单定位准确,而不是飞檐走壁狐死首丘。本文只做技术讨论,不敢侵犯任何个人、团体、政党、国家、星球权利,任何XXX对此文不满,请留言,我立刻删之

links

附上 Blog 原文链接:i0xbean.com

iOS 定位坐标不准确的相关整理及解决方案汇总的更多相关文章

  1. iOS 火星坐标相关整理及解决方案汇总(转)

    这几天在处理定位相关的代码,彻彻底底的被火星坐标恶心到了. 恶心列表 从 CLLocationManager 取出来的经纬度放到 mapView 上显示,是错的! 从 CLLocationManage ...

  2. ios 定位

    ios 定位新功能----在程序中实现定位功能 Core Location是iOS SDK中一个提供设备位置的框架.可以使用三种技术来获取位置:GPS.蜂窝或WiFi.在这些技术中,GPS最为精准,如 ...

  3. iOS定位原理和使用建议(转)

    原文:http://ibbs.91.com/thread-1548870-1-1.html 看到很多网友讨论iOS设备定位的问题,这里将我们所了解的关于iPhone.iPad.iPod等的定位原理做详 ...

  4. IOS定位服务的应用

    IOS定位服务的应用 一.授权的申请与设置 二.定位服务相关方法 三.定位服务代理的相关方法 四.定位服务获取到的位置对象 五.航标定位得到的航标信息对象 IOS定位服务的应用 一.授权的申请与设置 ...

  5. iOS定位服务编程详解

    现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 i ...

  6. Appium+Python3+iOS定位元素

    前言: 最近在做IOS自动化测试,IOS的Appium环境都配置OK,执行起来真的慢,慢到怀疑人生,那么今天就来总结一下IOS定位方式和各个定位方式的速度排序. 据我观察,按查找元素的顺序速度,从快到 ...

  7. IOS定位核心与地图

    IOS定位核心与地图                 Core Location以及Map框架包通常能给我们的应用程序添加定位和地图相关的服务.Core Location框架包通常是使用硬件设备来进行 ...

  8. 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例

    你所不知道的 CSS 阴影技巧与细节   关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow  ...

  9. 李洪强iOS开发Swift篇---12_NSThread线程相关简单说明

    李洪强iOS开发Swift篇---12_NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThre ...

随机推荐

  1. Python框架之Django学习笔记(三)

    开始一个项目 第一次使用 Django,必须进行一些初始化设置工作. 新建一个工作目录,例如 D:\tool\python\Python27\workspace\djcode,然后进入该目录. 转到创 ...

  2. Google Optimize 安装使用教程

    Google Optimize 介绍 打开链接 https://optimize.google.com/optimize/signup/ 填入电邮地址后等待注册邀请 Google Optimize是什 ...

  3. SOCK5代理服务器

    SOCK5代理服务器 简单介绍下比较好用的代理服务器,在部署过程中在内外网访问,需要切网比较麻烦,所以可以在互联网区部署sock5代理,通过配置代理切换服务器, 比较方便配置,节省时间. 官网: ht ...

  4. Vue - methods 方法

    一.methods中参数的传递 使用方法和正常的javascript传递参数的方法一样,分为两部: 1.在methods的方法中进行声明,比如我们给add方法加上一个num参数,就要写出add:fun ...

  5. POJ 2763 Housewife Wind(DFS序+LCA+树状数组)

    Housewife Wind Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 11419   Accepted: 3140 D ...

  6. 【14】vuex2.0 之 mutation 和 action

    我们的项目非常简单,当点击+1按钮的时候,count 加1,点击-1按钮的时候,count 减1. 1, mutation The only way to actually change state ...

  7. js,add script async? loaded ok.

    function loadScript(url, callback){ var script = document.createElement_x("script") script ...

  8. ubuntu php编译安装配置

    安装参考:http://ilanni.blog.51cto.com/526870/1569322/ 加载扩展的一些参数参考:http://java-er.com/blog/nginx-php-fpm/

  9. Python_代码练习_写一个判断是否为小数的函数

    这两天在学习函数,练习写一个判断是否为小数的函数,看起来蛮简单的,飞速写完很是得意,然后测了一下,发现差得好多呀,这个并不像想象那样简单,我得到的教训是,想要把一个需求哪怕再小的需求考虑周全,都不是件 ...

  10. 通过vSphere-client虚拟化服务器

    一.什么是vClientvClient是vSphere的重要组件之一.用于用户连接ESXi或vCenter管理和分配vSphere的各种资源.有vClient和WebvClient两个版本.安装部署了 ...