博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS基于百度地图的开发 (百度地图BMKSearch问题) (作者不允许转载 我也没办法 ......
阅读量:5977 次
发布时间:2019-06-20

本文共 1272 字,大约阅读时间需要 4 分钟。

hot3.png

当前为iOS提供的SKD版本为1.2.1,这里主要讲一下这个版本存在的一些问题,以及开发注意事项。

1. BMKMapView是百度地图类,当创建多个BMKMapView对象时,这些对象会共享一些数据(没有仔细研究具体共享哪些数据),因此会产生以下问题:

    A. 当对其中一个BMKMapView通过手势来进行放大、缩小、移动等操作时,其他的BMKMapView对象会自动进行放大、缩小、移动。

    B. 启动应用程序时,首先显示出来的BMKMapView可以得到用户的当前位置,其他的BMKMapView可能要等一段时间或者完全无法得到用户当前的位置。

2. 为了解决1.B中的问题,可以只使用一个BMKMapView对象,比如在两个不同的UIView中共享同一个BMKMapView对象。此外,有一个方法可以基本上解决1.A的问题。假设UIView A和UIView B均有BMKMapView(可以为不同或同一个对象),在UIView A和UIVIew B之间进行切换时,记录下各自当前BMKMapView的Frame,然后在显示的时候再通过设置Frame来恢复到切换前的状态。这个方法的缺点是,在切换很快的时候,ViewDidAppear不一定会被调用,ViewWillDisapper的调用顺序不确定,不过可以满足普通操作的要求。

3. BMKSearch提供了搜索、地址解析等功能。百度通过回调来响应搜索结果,关键的问题是,有时回调并不会被调用(个人感觉是BMKSearch之后,百度的SDK无法正确找到回调函数,比如处于不同的线程等等)。为了能让百度SDK正确找到回调,建议如下:

    A. 在没有得到回调之前,不要释放BMKSearch对象,最好做成全局对象。(必须)

    B. 在搜索路线时,如果起始位置是通过经纬度来表示的,那么节点信息中除了设置经纬度pt信息外,一定要设置name信息(不能为空字符串)。(必须)

    C. 不能同时进行多个搜索。(必须)

    D. 在每次通过BMKSearch对象进行搜索之前,最好是将其delegate设置为nil,然后进行release,然后再alloc,然后再进行搜索。(强烈建议)

    E. 所有的搜索的操作均不要通过委托或其他线程的回调等等来发起,应该是由本对象主动发起,并且本对象作为搜索代理,这样百度SDK才能正确找到回调函数。(强烈建议)

4. 有时需要判断当前用户经纬度是否是在国内,可以通过BMKSearch的地址反解析之后的回调来判断,如果返回的错误码为BMKErrorResultNotFound,那么有可能不在国内,因为其他的原因也可能导致返回此错误码。

5. 其实,最好的解决方法是采用AutoNavi高德地图api,如果是iOS6,那么直接可以直接使用MKMapView,其采用的就是AutoNavi接口。目前AutoNavi接口不足之处是没有步行路线,据说还在开发中,相信以后会支持的。

转载于:https://my.oschina.net/tonyyang/blog/127432

你可能感兴趣的文章
ARTS打卡计划第三周-Tips
查看>>
CSS将样式规则与HTML元素相关联
查看>>
BZOJ 3930 [CQOI2015]选数
查看>>
Xcode 8 插件安装
查看>>
[PaaS] 深入 Cloud Foundry(一)构架 (转载)
查看>>
【开发技术】视频URL采集
查看>>
com+组件日志记录(log4net)
查看>>
螺旋矩阵
查看>>
【五】MongoDB管理之生产环境说明
查看>>
2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)
查看>>
Shell与ShellScript
查看>>
weblogic服务器保存图片失败解决办法
查看>>
php闭包函数简析
查看>>
Py中的类型注解【转载】
查看>>
BZOJ 4627: [BeiJing2016]回转寿司
查看>>
Oracle免安装绿色版-PLSQL连接报12154
查看>>
ExtJS grid简单应用之 展示JSON数据
查看>>
依赖范围
查看>>
ARC下的所有权修饰符
查看>>
sonar 代码质量管理平台
查看>>