zoukankan      html  css  js  c++  java
  • 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 百度坐标

    总结

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

    links

    附上 Blog 原文链接:i0xbean.com

  • 相关阅读:
    第二章例2-9
    第二章例2-8
    第二章例2-7
    第二章例2-6
    第二章例2-5
    第二章例2-4
    第二章例2-3
    第二章例2-2
    第二章例2-1
    第一章例1-2
  • 原文地址:https://www.cnblogs.com/yingkong1987/p/3357295.html
Copyright © 2011-2022 走看看