大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
其原理是这样的:保密局开发了一个系统,能将实际的坐标转换成虚拟的坐标。所有在中国销售的数字地图必须使用这个系统进行坐标转换之后方可上市。这是生产环节,这种电子地图被称为火星地图。在使用环节,GPS终端设备必须集成保密局提供的加密算法(集成工作由保密局完成),把从GPS卫星那里得到的坐标转换成虚拟坐标,然后再去火星地图上查找,这样就在火星坐标系上完成了地图的匹配。 所以大家所用的百度,高德等地图定位准是偏差几百米
名词总结:
地球坐标:指WGS84坐标系统
火星坐标:指使用国家保密插件人为偏移后的坐标
地球地图:指与地球坐标对应的客观真实的地图
火星地图:指经过加密偏移后的,与火星坐标对应的地图
坐标系转换算法
1.GCJ-02(火星坐标系)和BD-09转换
2WGS-84(地球坐标系)和BD-09(百度坐标)转换
1 // WGS-84 坐标转换成 BD-09 坐标 2 + (CLLocationCoordinate2D)WorldGS2BaiduGS:(CLLocationCoordinate2D)coordinate 3 { 4 CLLocationCoordinate2D mars = [ALDGeocoder WorldGS2MarsGS:coordinate]; 5 CLLocationCoordinate2D baidu = [ALDGeocoder MarsGS2BaiduGS:mars]; 6 return baidu; 7 } 8 9 // BD-09 坐标转换成 WGS-84 坐标 10 + (CLLocationCoordinate2D)BaiduGS2WorldGS:(CLLocationCoordinate2D)coordinate 11 { 12 CLLocationCoordinate2D mars = [ALDGeocoder BaiduGS2MarsGS:coordinate]; 13 CLLocationCoordinate2D world = [ALDGeocoder MarsGS2WorldGS:mars]; 14 return world; 15 }
3.WGS-84和sogou坐标转换
4火星坐标和地球坐标转换
5WGS-84 和 墨卡托 坐标转换
开发时所面临的现状
获取经纬度(GPS)
-
火星坐标
-
MKMapView
-
地球坐标
-
CLLocationManager
显示经纬度(地图)
-
火星坐标
-
iOS 地图
-
Gogole地图
-
搜搜、阿里云、高德地图
-
地球坐标
-
Google 卫星地图(国外地图应该都是……)
-
百度坐标
-
百度地图
推荐的解决方案:
-
既然是在国内,存储一律用火星坐标,这样在使用国内地图显示时最方便(用百度地图显示时可以一次转换取得)
-
CLLocationManager 拿到的 CLLocation 转为火星坐标,MKMapView 不用处理
-
使用地图 API 进行 地址解析/逆地址解析(Geocoding) 时注意相应使用相应地图商的坐标系
-
部分地图商支持多个坐标系输入,如高德支持地球、火星坐标(这个一直有变动,具体只能参考厂商最新文档了
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167575.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...