iOS地图相关iOS学习笔记学无止境

iOS定位之百度地图定位的问题

2016-11-29  本文已影响180人  辉乐轩

今天遇到个问题,客户给了个 矢量地图,然后给了 左上角 & 右下角 的经纬度,让我实时定位,并将自己的位置显示在适量地图上。

问题来了:

我把做好的给客户测试,客户远在内蒙古,我在帝都。客户说咋没有自己的定位呢,小人在哪呢,看不见啊。

尴尬了,在我这好好滴,去她那就不行了,郁闷。

跟客户沟通下,客户的 矢量地图 都是现画的,AI画图,经纬度都是用 北京54采集数据,我也不懂,反正就是测出来的跟 谷歌 的吻合。


那就可以解决了。

客户用的是谷歌地图的经纬度,我用的是百度地图的经纬度,只要转化下就👌了

先了解下

WGS84: 即地图坐标,美国GPS使用的是WGS84的坐标系统。GPS系统获得的坐标系统,基本为标准的国际通用的WGS84坐标系统.

GCJ-02: 即火星坐标,是由中国国家测绘局制订的地理信息系统的坐标系统。它是一种对经纬度数据的加密算法,即加入随机的偏差。国内出版的各种地图系统(包括电子形式),出于国家安全考虑,必须至少采用GCJ-02对地理位置进行首次加密.

BD-09: 即百度坐标: 在GCJ02基础上,进行了BD-09二次加密措施,API支持从WGS/GCJ转换成百度坐标,不支持反转.

/**

*坐标转换函数,从原始GPS坐标,mapbar坐标,google坐标,51地图坐标,mapabc坐标转换为百度坐标(51地图坐标需要显出10000)

*@param coordinate 待转换的坐标

*@param type 待转换的坐标系类型,GPS为原始GPS坐标,COMMON为google坐标,51地图坐标,mapabc坐标

*@return 返回的NSDictionry中包含“x”,“y”字段,各自对应经过base64加密之后的x,y坐标

*/

UIKIT_EXTERN NSDictionary* BMKConvertBaiduCoorFrom(CLLocationCoordinate2D coordinate,BMK_COORD_TYPE type);

/**typedef enum

{

BMK_COORDTYPE_GPS = 0, ///GPS设备采集的原始GPS坐标

BMK_COORDTYPE_COMMON,  ///google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标

} BMK_COORD_TYPE;

*base64加密后的坐标字典解密函数

*@param dictionary 带解密的NSDictionry,该NSDictionry中应包含“x”,“y”字段,各自对应经过base64加密之后的x,y坐标

*@return 解密之后的坐标

*/

UIKIT_EXTERN CLLocationCoordinate2D BMKCoorDictionaryDecode(NSDictionary* dictionary);

用这两个方法转一下,就OK了,完美解决!

效果图

小人就是当前位置,爽

下面这段在其他地方看到的,应该有所帮助

3.5.2  BD-09 转换为 WGS84.GCJ-02(百度没公开API,只能google了)

在Github 找到这个转换算法https://github.com/TinyQ/TQLocationConverter

*  将WGS-84转为GCJ-02(火星坐标)+(CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc;

*  将GCJ-02(火星坐标)转为百度坐标+ (CLLocationCoordinate2D)transformFromGCJToBaidu:(CLLocationCoordinate2D)p;

*  将百度坐标转为GCJ-02(火星坐标)+ (CLLocationCoordinate2D)transformFromBaiduToGCJ:(CLLocationCoordinate2D)p; *  将GCJ-02(火星坐标)转为WGS-84+ (CLLocationCoordinate2D)transformFromGCJToWGS:(CLLocationCoordinate2D)p;

上一篇下一篇

猜你喜欢

热点阅读