百度地图开发 之 坑中坑

环境: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

②这两个参数是     用BMKMetersBetweenMapPoints构造(将经纬度坐标转换为投影后的直角地理坐标)      而不能用BMKMapPointMake来构造,否则会出现计算出来的distance为0

/**

*计算指定两点之间的距离

*@param a 第一个坐标点

*@param b 第二个坐标点

*@return 两点之间的距离,单位:米

*/

UIKIT_EXTERN CLLocationDistance BMKMetersBetweenMapPoints(BMKMapPoint a, BMKMapPoint b);

你可能感兴趣的:(IOS)