环境:Xcode 9.3.1 百度地图pods集成后,pod 'BaiduMapKit'
此文章是在百度地图用了很久之后才写的,所以集成的坑我这里就不写了
坑A: 以前只用pod 'BaiduMapKit'就完事儿了,但是最近百度地图更新了。。。用pods更新后你会发现百度地图将定位功能BMKLocationKit分离出来了,还有相关的一些属性名和函数都修改了
解决方法:没办法,得加入pod 'BMKLocationKit' ,更新pods,然后根据xcode报红的位置改了。。。
坑B:百度地图用的是自己的坐标,也就是下面的BD-09坐标,要用就得转换。。。
简单介绍一下主流的坐标系:
1.GCJ-02 俗称火星坐标系,由中国国家测绘局制订的地理信息系统的坐标系统。一般中国官方发布的地图上标注的经纬度都是这种坐标系的,与实际经纬度有偏差。
2.WGS84:World Geodetic System 1984,俗称地球坐标系,是为GPS全球定位系统使用而建立的坐标系统。一般手持设备(比如手机)从GPS卫星获取的坐标系就是这个坐标系。google地图、soso地图、aliyun地图、mapabc地图和amap地图所用此坐标
3.墨卡托(Mercator)坐标系,是由荷兰地图学家墨卡托(Mercator)在1569年拟定,假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的“墨卡托投影”绘制出的世界地图。
4.BD-09 百度坐标系,百度在GCJ-02要求加密的基础上,又自己对坐标加密了一次。
坑C:连续定位回调函数的回调其实是火星坐标,非百度坐标,要进行地理反编码的话是需要转换成百度地图的
/**
* @brief 连续定位回调函数。
* @param manager 定位 BMKLocationManager 类。
* @param location 定位结果,参考BMKLocation。
* @param error 错误信息。
*/
- (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager didUpdateLocation:(BMKLocation * _Nullable)location orError:(NSError * _Nullable)error;
坑D:计算指定两点之间的距离方法有两个坑:①需要加入头文件#import <BaiduMapAPI_Utils/BMKUtilsComponent.h>
②这两个参数是 用BMKMetersBetweenMapPoints构造(将经纬度坐标转换为投影后的直角地理坐标) 而不能用BMKMapPointMake来构造,否则会出现计算出来的distance为0
/**
*计算指定两点之间的距离
*@param a 第一个坐标点
*@param b 第二个坐标点
*@return 两点之间的距离,单位:米
*/
UIKIT_EXTERN CLLocationDistance BMKMetersBetweenMapPoints(BMKMapPoint a, BMKMapPoint b);