iOS_百度地图 步骤:

1.申请百度地图key.    http://lbsyun.baidu.com/apiconsole/key

2.下载百度开发包.      http://api.map.baidu.com/lbsapi/cloud/sdkiosdev-download.htm

3.新建项目.这部分设计添加lib以及资源文件,参考百度的IOS api开发指南做就行,那些内容已经在2013年10月份更新过了,照着里面做就能顺利通过编译。

4.将ViewController的.m改成.mm

5.在委托中.h文件中中加入

#import "BMapKit.h"

并声明变量

BMKMapManager* _mapManager;

在.m委托中加入

_mapManager = [[BMKMapManager alloc]init];

// 如果要关注网络及授权验证事件,请设定 generalDelegate参数

BOOL ret = [_mapManager start:@"3102732B30E0D66EF51415C9E6CE055EC78FF07E" generalDelegate:nil];

if (!ret) {

NSLog(@"manager start failed!");

}

6.注意:

在这里就开始运行程序的话,会出现[UIDevice uniqueGlobalDeviceIdentifier]: unrecognized selector sent to instance0x1ed19370

这么一个bug,解决办法很多,之一:加入4个文件NSString+MD5Addition,UIDevice+IdentifierAddition,直接加入到项目里面就可以,无需引入头文件

下载地址 http://www.kuaipan.cn/file/id_30491149655344975.htm

7.在viewController.mm中的viewDidLoad改为如下代码

- (void)viewDidLoad

{

[superviewDidLoad];

BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0,0, 320, 548)];

self.view = mapView;

// Do any additional setup after loading the view, typically from a nib.

}

保存后运行,一个简单的百度地图API应用就完成了

源代码下载http://www.kuaipan.cn/file/id_30491149655344976.htm

扩展:

1.功能五,搜索,用的很广泛,这个功能很强大,你可以搜索某一坐标点附近的加油站,停车场,宾馆,酒店,餐厅,甚至厕所都能搜索到,比如说你想查找5000米内的加油站,以及1000米内的停车场。

flag = [_search  poiSearchNearBy:@"加油站" center:coor1 radius:5000 pageIndex:0];

flag = [_search  poiSearchNearBy:@"停车场" center:coor1 radius:1000 pageIndex:0];

然后用委托

-(void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error

输出结果。

2.将百度地图视角切换到某一坐标点

-(void)Region{

CLLocationCoordinate2D coor;

coor.latitude =self._latitude;

coor.longitude =self._longitude;

NSDictionary *tip =  BMKBaiduCoorForWgs84(coor);

CLLocationCoordinate2D coor1=  BMKCoorDictionaryDecode(tip);

BMKCoordinateRegion viewRegion = BMKCoordinateRegionMake(coor1, BMKCoordinateSpanMake(0.05,0.05));

BMKCoordinateRegion adjustedRegion = [_mapView regionThatFits:viewRegion];

[_mapView setRegion:adjustedRegion animated:YES];

}

3.清除地图上所有痕迹和路线

-(void)clereOldYJDH{

NSArray* array = [NSArray arrayWithArray:_mapView.annotations];

[_mapView removeAnnotations:array];

array = [NSArray arrayWithArray:_mapView.overlays];

[_mapView removeOverlays:array];

[self Region];

}

//当选中一个annotation views时,调用此接口

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

{

NSLog(@"选中一个annotation views:%f,%f",view.annotation.coordinate.latitude,view.annotation.coordinate.longitude);

}

//当取消选中一个annotation views时,调用此接口

- (void)mapView:(BMKMapView *)mapView didDeselectAnnotationView:(BMKAnnotationView *)view{

NSLog(@"取消选中一个annotation views");

}

//当mapView新添加annotation views时,调用此接口

- (void)mapView:(BMKMapView *)mapView didAddAnnotationViews:(NSArray *)views

{

NSLog(@"mapView新添加annotation views");

}

//当点击annotation view弹出的泡泡时,调用此接口

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

{

NSLog(@"点击annotation view弹出的泡泡");

}

//拖动annotation view时view的状态变化

-(void)mapView:(BMKMapView*)mapView annotationView:(BMKAnnotationView *)view didChangeDragState:(BMKAnnotationViewDragState)newStatefromOldState:(BMKAnnotationViewDragState)oldState

{

NSLog(@"动annotation view时view的状态变化");

}

//标注呈绿色样式大头钉

((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorGreen;

//允许用户拖动

[annotationView setDraggable:YES];

//气泡框左侧显示的View,可自定义

annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_location.png"]];

//气泡框右侧显示的View可自定义

annotationView.rightCalloutAccessoryView =selectButton;

//让标注在进入界面时就处于弹出气泡框的状态

[annotationView setSelected:YES animated:YES];

//整个标注的偏移量

annotationView.centerOffset = CGPointMake(0, -(annotationView.frame.size.height *0.5));

annotationView.annotation = annotation;//绑定对应的标点经纬度

annotationView.canShowCallout =TRUE;//允许点击弹出气泡框

4.在地图上定制标注替代大头钉,可以将文字图片所有能加到view中的,都可以以大头钉的形式显示出来,需要将view转换为image主要代码,最重要的是知道这个原理,然后实现起来就很简单:

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

在这个委托中实现如下代码

UIView *viewForImage=[[UIView alloc]initWithFrame:CGRectMake(0,0, 132, 64)];

UIImageView *imageview=[[UIImageViewalloc]initWithFrame:CGRectMake(0,0, 32,64)];

[imageview setImage:[UIImage imageNamed:@"车位置.png"]];

[viewForImage addSubview:imageview];

UILabel *label=[[UILabelalloc]initWithFrame:CGRectMake(32,0, 100,64)];

label.text=@"陈双超";

label.backgroundColor=[UIColor clearColor];

[viewForImage addSubview:label];

annotationView.image=[self getImageFromView:viewForImage];

-(UIImage *)getImageFromView:(UIView *)view{

UIGraphicsBeginImageContext(view.bounds.size);

[view.layerrenderInContext:UIGraphicsGetCurrentContext()];

UIImage *image =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;

}

在网上发现别人专门建立view来定制气泡和专门建立文件来定制大头钉,觉得那方法对代码管理起来更简单,可读性强。

http://www.kuaipan.cn/file/id_30491149655345085.htm

@interface KYBubbleView : UIScrollView {  //UIView是气泡view的本质

NSDictionary *_infoDict;

UILabel         *titleLabel;//标题label

UILabel         *detailLabel;//副标题label

UILabel         *contactLabel;   //联系人

UILabel         *homeAddresslabel;  //家庭地址

UIButton        *rightButton;

NSUInteger      index;

}

#import "BMKPointAnnotation.h"

@interface KYPointAnnotation : BMKPointAnnotation {

NSUInteger _tag;

}

@property NSUInteger tag;

@end

扩展: 当前为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接口不足之处是没有步行路线,据说还在开发中,相信以后会支持的。

iOS_基于百度地图的开发相关推荐

  1. Android开发-基于百度地图API开发仿滴滴出行APP界面的实现

    前 言 近年来,由于移动互联网快速的发展以及基于移动设备的APP的普及,移动互联网改变了人们的生活方式.从线上的电子支付到线下的出行,移动互联网是当今社会人们生活不可或缺的一部分,而线下出行的网约车的 ...

  2. web前端PC端 百度地图的开发指导

    先看效果图片: 最终效果描述: 1.搜索:有搜索提示,并且可以根据选择进行定位: 2.获取经纬度:点击地图中某点,在文本框中获取当前点的经纬度的值: 3.获取详细地址:点击地图中某点时,将该点的详细地 ...

  3. 开源基于百度地图SDK的Android交通助手App

    BaiduMap-TrafficAssistant    该项目是基于百度地图SDK开发的一款交通助手App,目前已经上线豌豆荚.魅族应用市场.搜狗手机助手等多个安卓应用市场.目前我决定开源该项目,为 ...

  4. 基于百度地图sdk的地图app开发(七)——导航和模拟导航

    这是基于百度地图sdk的地图app开发系列博客第七篇 代码仓库位置:https://github.com/YanhuiLu89/lmap.git 上一篇 基于百度地图sdk的地图app开发(六)--路 ...

  5. 百度地图应用开发(一)

    百度地图应用开发(一) 最近对LBS比较感兴趣,在研究百度地图.先了解下百度地图的大概吧! http://dev.baidu.com/wiki/imap/index.php?title=Android ...

  6. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  7. 气象地图gis php代码,基于百度地图API实现自动气象站点信息显示

    本栏目责任编辑:代 影数据库与信息管理 ComputerKnowledgeand Technology 电脑知识与技术 第9卷第27期 (2013年09月) 基于百度地图API实现自动气象站点信息显示 ...

  8. 使用Angular8和百度地图api开发《旅游清单》

    前言: 本文的目的是通过一步步实现一个旅游清单项目,让大家快速入门Angular8以及百度地图API.我们将收获: Angular8基本用法,架构 使用百度地图API实现自己的地图应用 解决调用百度地 ...

  9. 基于百度地图实现Android定位功能实现

    基于百度地图实现Android定位功能实现 初始化 一>获取SHA1 二>Android studio 配置 (1)下载百度地图sdk (2)解压安装包 (3)回到刚刚配置的jar包,右击 ...

最新文章

  1. Visual Studio中的快捷键
  2. 黄聪:Wordpress 模版技术手册 - WordPress Theme Technical manuals
  3. 会计记忆总结之六:账务处理程序
  4. 51nod 1785 数据流中的算法 (方差计算公式)
  5. “约见”面试官系列之常见面试题之第八十篇之css常见属性(建议收藏)
  6. docker entrypoint入口文件详解
  7. Facebook 开源增强版 LASER,可使用90多种语言
  8. mysql修改表结构 删除字段_mysql更改表结构:添加、删除、修改字段、调整字段顺序...
  9. 微信小程序 data中数据值的更改与储存
  10. RMI:Java中的分布式计算框架
  11. 3大领域,4大方向,做好数据分析岗位的职业规划
  12. [转]论window和Linux之长短
  13. UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞 Dijkstra+构造
  14. luogu 3373 线段树懒标记维护乘与加
  15. java中 基础 知识 逻辑控制
  16. duet连win10_在Windows PC上使用Duet Display时连接不上Apple设备的解决方法之一
  17. 分布式(技术栈、关键技术、PaaS平台、资料推荐、相关论文)
  18. 目标规划问题与LINGO求解
  19. 【xla】六、【构图阶段】xlaRunOp
  20. ZT 安卓手机的安全性 prepare for Q

热门文章

  1. arcgis10之给图层添加注记
  2. 手机也可以快速翻译、PDF翻译超简单
  3. 小白学习编程遇到问题应该如何正确的提问
  4. Verilog HDL 总结(1)
  5. C/C++ 光标:键盘上下键实现菜单移动
  6. EduCoder-Web程序设计基础-html5—表格高级样式的设置-第3关:设置表格的内边框样式
  7. [Graphics]自组织植物建模方法(ContinousLassoBrush)
  8. i5处理器做java够用吗,一般的游戏玩家用i5处理器就够了,这是真的吗?
  9. 开发小程序插件如何实现盈利?
  10. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛