GPS以及iOS系统定位获得的坐标是地理坐标系WGS1984,Web地图一般用的坐标细是投影坐标系WGS 1984 Web Mercator,国内出于相关法律法规要求,对国内所有GPS设备及地图数据都进行了加密偏移处理,代号GCJ-02,这样GPS定位获得的坐标与地图上的位置刚好对应上,特殊的是百度地图在这基础上又进行一次偏移,所以在处理系统定位坐标及相关地图SDK坐标时需要转换处理下,根据网络资源,目前有一些公开的转换算法。
系统定位坐标显示在原生地图、谷歌地图或高德地图–WGS1984转GCJ-02
苹果地图及谷歌地图用的都是高德地图的数据,所以这三种情况坐标处理方法一样,即将WGS1984坐标转换成偏移后的GCJ-02才可以在地图上正确显示位置。
通过这个工具类可将iOS原生地图获取的坐标点转换为地图上正确表示的真实坐标点:

.h

  //
//  GPSLocationTool.h
//  Zar
//
//  Created by carayfire-Develop on 16/6/8.
//  Copyright © 2016年 Crazyfire technology development Co. Ltd. All rights reserved.
//#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>@interface GPSLocationTool : NSObject
/***  public:原生地图获取坐标转化为真实坐标**  @param latLng 原生坐标点**  @return 真实坐标点*/
+ (CLLocationCoordinate2D)transform:(CLLocationCoordinate2D)latLng;
@end

.m

//
//  GPSLocationTool.m
//  Zar
//
//  Created by carayfire-Develop on 16/6/8.
//  Copyright © 2016年 Crazyfire technology development Co. Ltd. All rights reserved.
//#import "GPSLocationTool.h"
#import <CoreLocation/CoreLocation.h>@implementation GPSLocationToolconst double a = 6378245.0;
const double ee = 0.00669342162296594323;/***  public:原生地图获取坐标转化为真实坐标**  @param latLng 原生坐标点**  @return 真实坐标点*/
+ (CLLocationCoordinate2D)transform:(CLLocationCoordinate2D) latLng
{double wgLat = latLng.latitude;double wgLon = latLng.longitude;double mgLat;double mgLon;if ([self outOfChina:wgLat :wgLon ]){return latLng;}double dLat = [self transformLat:wgLon-105.0 :wgLat - 35 ];double dLon = [self transformLon:wgLon-105.0 :wgLat - 35 ];double radLat = wgLat / 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);mgLat = wgLat + dLat;mgLon = wgLon + dLon;CLLocationCoordinate2D loc2D ;loc2D.latitude = mgLat;loc2D.longitude = mgLon;return loc2D;
}#pragma mark private
+ (BOOL) outOfChina:(double) lat :(double) lon
{if (lon < 72.004 || lon > 137.8347) {return true;}if (lat < 0.8293 || lat > 55.8271) {return true;}return false;
}+ (double) transformLat:(double)x  :(double) y
{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) + 320 *sin(y * M_PI / 30.0)) * 2.0 /3.0;return ret;
}+ (double) transformLon:(double) x :(double) y
{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;
}@end

iOS-地理坐标转换,原生地图获取的原始坐标转换为地图真实坐标相关推荐

  1. h5页面调用百度地图获取当前位置并在地图上标注出来

    在项目中越来越多的用到了手机的GRS定位功能,使用百度地图API获取当前位置并在地图上标注出来首先应该在官网上注册key 点击获取密钥,注册获取key. 完整代码如下: <!DOCTYPE ht ...

  2. 百度地图获取地区/省市县json地图区域数据

    获取省市县json地图区域数据 共三步: 1.打开百度api连接如下 http://lbsyun.baidu.com/jsdemo.htm#c1_10 2.复制以下代码粘贴到打开的页面的源代码编辑器中 ...

  3. 百度地图坐标查询(真实坐标)

    因为百度地图使用的是自己加密之后的坐标系,所以和网络上常用的WGS84坐标系有较大的偏差,不过百度地图API有现成的转换方法直接用就是,代码如下 1.添加坐标查询方法 theLocation(){if ...

  4. openlayers地图坐标转换为屏幕像素坐标,屏幕像素坐标转成地图实际坐标

    前言: openlayers的地图坐标的转换,地图坐标与屏幕像素坐标的互转. 具体方法: 地图坐标转屏幕像素(getPixelFromCoordinate):入口 屏幕像素转地图坐标(getCoord ...

  5. 百度地图获取河流_华为AR地图: 导航功能确实不错,还有更多AR新场景也值得关注...

    2020年4月8日,华为消费者业务CEO余承东在国内线上直播的过程中,发布了一款关于全新的导航软件-华为AR地图. 华为的AR地图不仅有地图导航的功能,它还借助于5G.AR.AI和高清摄像头硬件等技术 ...

  6. html百度地图获取城镇街道,集成百度地图根据地址获取经纬度,定位地址到街道...

    根据地址查询经纬度 $(function(){ var map = new BMap.Map("container"); map.centerAndZoom("北京&qu ...

  7. android高德地图获取海拔_高德导航地图能显示海拔高度吗

    现在人们生活水平普遍提高,私家车成为老百姓的常态,选择周末或者节假日来一场自驾游还是非常给力的,很多年轻人都喜欢挑战自己,去西部自驾游,这个就需要知道海拔信息了,那么高德地图能导航出海拔数据吗? 高德 ...

  8. 实用工具|零代码实现地理坐标转换(GCJ-02、BAIDU-09、WGS-84三种地理坐标系转换)

    1 工具获取方式 扫描下面二维码,关注地学大数据公众号,输入地理坐标转换,即可获取下载链接 如果是手机用户可以保存或截图二维码 并在微信扫一扫功能中识别二维码. 2 工具介绍 地理坐标系转换工具(下文 ...

  9. html 高德地图坐标,百度地图,高德地图,HTML5经纬度比较

    对于一个地点的经纬度,是确定的?这个问题,我想很多人都会回答,肯定了,可实际上呢?我只能呵呵了. 在使用百度地图的过程中,发现一个很奇怪的现象,有时候调用百度地图js API时,后得到一个错的离谱的地 ...

最新文章

  1. TOMCAT 高并发配置
  2. Centos7.x 安装 Supervisord
  3. 处理网络故障常用的命令
  4. LeetCode 86. 分隔链表 中等难度
  5. react-template 包含客户端,服务端渲染完整示例
  6. install npm 到某个文件下执行_如何将npm安装到指定目录?
  7. html 用svg缩放拉伸,html – 拉伸SVG以适应其父级的100%高度和宽度
  8. shiro学习(17):easyui布局测试
  9. RTX5 | 线程管理03 - 线程退出osThreadExit
  10. java mysql 输入数据库_如何用JAVA录入数据到SQL数据库
  11. kubernetes--pod的生命周期管理(PostStart,PreStop)
  12. iOS ASI--文件下载
  13. Java第二次作业參考代码
  14. 如何设计一个好看的 404 错误页面 ?
  15. 开发QQ桌球瞄准器(1):桌球瞄准器介绍与使用方法
  16. win7管理员取得所有权
  17. webclient 爬虫bug
  18. 玩转华为ENSP模拟器系列 | 配置设备使用SNMPv2c与网管通信示例
  19. 唯品会的html文件,唯品会网页打不开
  20. 线性代数(1)- 向量空间

热门文章

  1. RFID技术在固定资产管理中的作用
  2. 基于梁氏—克里曼信息流的因果分析理论及应用——理论部分
  3. 想成为管理者必须会讲的68个超级经典小故事
  4. PHP代码审计DVWA[JavaScript]
  5. 在ABP中通过EF直接执行原生Sql的解决方案
  6. 【软考系统架构设计师】2009年下系统架构师论文写作历年真题
  7. SpringSecurity OAuth2.0认证授权-part1
  8. ReDim Preserve只能改变数组最末维大小​​​​​​​
  9. 6-TCP 协议(序号和确认号)
  10. Discuz! 移动端开发笔记-API篇(一)——获取主题列表中帖子的缩略信息