最近刚完成app中地图的应用,感觉非常的曲折,折腾了很久,刚才开始一直不能成功使用百度地图api,报一大堆的错误,后来换到高德地图,又发现服务端使用的百度的经纬度,又从高德换回百度,泪奔。

这里简单比较下高德地图和百度地图,个人觉得高德地图api导入真是非常简单,而且还分成几种版本;相比较百度地图api的导入就繁琐多了,主要是导入静态库文件,初次使用真的是繁琐,百度提供了三种导入方式,最后还是觉得合并静态库文件比较方便,不然要在xcode中作很多设置,而且还要根据各种情况更改,所以我建议还是选择第二种方式。

使用百度地图的API时,最好去官方技术论坛下载两个pdf文件:IOS开发教程-第一部分和第二部分的pdf文件,这两个文件太有用了,不要去看demo,也不要去搜索教程,就用这个两个文件就够了,没事不要去论坛提问,很难得到回复,都是一堆官方的回复,几乎无用。

iOS开发教程-第一部分.pdf 主要是如何申请key,和如何导入API到xcode工程。这里一定要按照pdf中的指示去做,否则问题多多。导入静态库的时候最好选择第二种方式,维护起来比较简单。有些配置(比如libary search paths和header search paths)在你导入的时候xcode已经为你设置好了,所以可以不用考虑

如果导入过程完美,后面开发起来都是十分简单的事情,百度api介绍也比较完整,用起来很顺手。

iOS开发教程-第二部分.pdf 主要就是对百度地图功能的各种介绍,这个你不会得到全部的可用的东西,需要结合demo一起用,先从pdf中找到你需要的功能,有个大体的了解,再去看demo中的代码,然后再实际应用到你的工程中。

列几个遇到的问题

1.百度读取CLLocationCoordinate2D的问题,最新版本(V2.5)CLLocationCoordinate2DMake的两个参数与之前函数的相反,这个困扰了我很久,以前版本跟现在版本的程序,用同一个经纬度,旧版的可以显示标注,新版的却不可以。

例如:旧版是这样子

[self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(118.144992,24.497386)];

新版要这样才行

[self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(24.497386,118.144992)];

不知道为什么百度要这样做

2.BMKMapViewDelegate 的方法

- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view

这个在点击同一个标注以后只会执行一次,要点击其他的标注再来点击才会执行

后来发现可以在每次执行的时候调用一下这个  [mapView deselectAnnotation:view.annotation animated:YES];

这样同一个标注可以一致执行了,别问我为什么需要这个功能,因为我把标注的气泡隐藏了,只能通过点击标注来实现了。

3.计算屏幕内的标注方法,这里直接上代码了,实验过是可用的

首先将经纬度转化为屏幕内坐标

CGPoint point = [self.mapView convertCoordinate:annotationitem.coordinate toPointToView:self.mapView];

然后判断坐标是否在地图可见范围内

CGRectContainsPoint(CGRectMake(0, 44, self.mapView.frame.size.width, self.mapView.frame.size.height-44-49), point)

4.BMKMapViewDelegate 的方法

- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id<BMKAnnotation>)annotation

使用此方法时,都可能会用到自定义的BMKAnnotationView类,但是请在给自定义类BMKAnnotationView,调用新定义的方法或属性时,先执行

annotationView.annotation = annotation;

保证在你要执行的其他代码前面就好

-------------------------------------------------------------------------------------------------------------------------------

由于实际并没有使用到百度地图太多复杂的功能,所以也只能总结到这里了。。。。

百度地图 IOS版开发经验分享的更多相关文章

  1. iOS开发---集成百度地图完善版

    一.成为百度的开发者.创建应用 http://developer.baidu.com/map/index.php?title=首页 (鼠标移向 然后选择你的项目需要的功能 你可以在里面了解到你想要使用 ...

  2. 百度地图ios环境配置

    1 前言 由于工作需要,要开始捣腾百度地图了,今天上午初始牛刀,各种碰壁,无奈之下,中午睡了一觉,养精蓄锐,以备下午大战三百回合,所幸下午中午把百度地图Demo捣腾出来了,在此与大家分享,环境搭建教程 ...

  3. 百度地图 iOS SDK - 坐标转换方法

    百度地图 Android SDK 要么 iOS SDK 或各种 API 工具产品,我们使用百度自己的加密坐标系. 员在使用过程中,位置点都是通过 GPS 或者其它途径获取的.所以与百度地图所使用的坐标 ...

  4. 百度地图js版定位控件

    一 概述 百度地图在最新版已加入浏览器定位控件,个人认为应该是既高德地图更新了一个浏览器也能定位功能后,百度不甘落后自己简简单单,草草写了个这个功能的定位控件 GeolocationControl 这 ...

  5. 百度地图--JS版

    百度地图JS版本 ----选择关键字地图展示对应地址---- CSS body, html { width: %; height: %; margin: ; font-family: "微软 ...

  6. 百度地图移动版API 1.2.2版本(Android)地图偏移的最佳解决办法

    Import import com.baidu.mapapi.CoordinateConvert;import com.baidu.mapapi.GeoPoint; Code GeoPoint p = ...

  7. 调用百度、高德地图App,百度地图网页版,App定位

    https://www.jianshu.com/p/296a3995adc2 https://blog.csdn.net/qq_26598821/article/details/51087785 ht ...

  8. cordova百度地图定位Android版插件

    本插件利用百度地图提供的定位功能进行Android版手机定位. 为什么没有iOS版? 因为iOS版有官方的定位插件cordova-plugin-geolocation可以使用. 请参照:cordova ...

  9. ios添加百度地图方法

    Hello BaiduMapiOS SDK 引入头文件 引入静态库文件 引入系统framework 引入mapapi.bundle资源文件 初始化BMKMapManager 创建BMKMapView ...

随机推荐

  1. Busybox下mdev配置说明

    [TOC] mdev说明 mdev是busybox自带的一个简化版的udev,适合嵌入式应用场合.其具有使用简单的特点.它的作用就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需要的节点 ...

  2. C++ new(1)

    如果找工作的同学看一些面试的书,我相信都会遇到这样的题:sizeof 不是函数,然后举出一堆的理由来证明 sizeof 不是函数.在这里,和 sizeof 类似,new 和 delete 也不是函数, ...

  3. Geoserver发布WMS服务出错分析

    使用Geoserver发布一个空间表,在图层预览的过程中没有任何问题,但是当我根据这个空间表传创建视图再发布wms服务,访问时就会报错,错误信息如下: Caused by: java.sql.SQLE ...

  4. C++ macro(宏)使用小结

    谈起C++中的宏,我们第一个想到的应该就是“#define”,它的基本语法长得像这样: #define macroname(para1, para2, para3, ... ,paran) macro ...

  5. [树莓派]安装node环境

    本文并非node的编译安装,据说这要花很长时间,所以一开始我就是拒绝的.本文展示的是如何部署ndoe的编译好的执行文件. node的官网上下载目录里本身就有针对arm的编译好的执行文件.地址在这里:h ...

  6. POJ 1679 The Unique MST --Kruskal应用

    这题可以用次小生成树解,这里用Kruskal算法来做.每条边除维护u,v,w外,还维护: used:表示这条边是否加过 eq:表示有没有与这条边相等的边 del:删除标记,以便删边之用 如果对于一个最 ...

  7. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》

    这篇文章比较易懂,易理解: 首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层W ...

  8. 第2章 面向对象的设计原则(SOLID):1_单一职责原则(SRP)

    1. 单一职责原则(Single Responsibility Principle,SRP) 1.1 单一职责的定义 (1)定义:一个类应该仅有一个引起它变化的原因.这里变化的原因就是所说的“职责”. ...

  9. as3 Point

    首先我们看看Point类的属性:x:Number——该点的水平坐标y:Number——该点的垂直坐标length:Number——从(0,0)到此点的线段长度(只读属性)从length属性我们可以看到 ...

  10. HTML5和css3的总结四

    HTML5的新东西总结四: 1>video和audio 声明方法(可以制作背景音乐) var oV/oA=new Video()/Audio(); oV/oA.src=''; oV/oA.pla ...