iOS_基于百度地图的开发
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_基于百度地图的开发相关推荐
- Android开发-基于百度地图API开发仿滴滴出行APP界面的实现
前 言 近年来,由于移动互联网快速的发展以及基于移动设备的APP的普及,移动互联网改变了人们的生活方式.从线上的电子支付到线下的出行,移动互联网是当今社会人们生活不可或缺的一部分,而线下出行的网约车的 ...
- web前端PC端 百度地图的开发指导
先看效果图片: 最终效果描述: 1.搜索:有搜索提示,并且可以根据选择进行定位: 2.获取经纬度:点击地图中某点,在文本框中获取当前点的经纬度的值: 3.获取详细地址:点击地图中某点时,将该点的详细地 ...
- 开源基于百度地图SDK的Android交通助手App
BaiduMap-TrafficAssistant 该项目是基于百度地图SDK开发的一款交通助手App,目前已经上线豌豆荚.魅族应用市场.搜狗手机助手等多个安卓应用市场.目前我决定开源该项目,为 ...
- 基于百度地图sdk的地图app开发(七)——导航和模拟导航
这是基于百度地图sdk的地图app开发系列博客第七篇 代码仓库位置:https://github.com/YanhuiLu89/lmap.git 上一篇 基于百度地图sdk的地图app开发(六)--路 ...
- 百度地图应用开发(一)
百度地图应用开发(一) 最近对LBS比较感兴趣,在研究百度地图.先了解下百度地图的大概吧! http://dev.baidu.com/wiki/imap/index.php?title=Android ...
- 基于百度地图实现Android定位功能实现(详解+教程)
基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...
- 气象地图gis php代码,基于百度地图API实现自动气象站点信息显示
本栏目责任编辑:代 影数据库与信息管理 ComputerKnowledgeand Technology 电脑知识与技术 第9卷第27期 (2013年09月) 基于百度地图API实现自动气象站点信息显示 ...
- 使用Angular8和百度地图api开发《旅游清单》
前言: 本文的目的是通过一步步实现一个旅游清单项目,让大家快速入门Angular8以及百度地图API.我们将收获: Angular8基本用法,架构 使用百度地图API实现自己的地图应用 解决调用百度地 ...
- 基于百度地图实现Android定位功能实现
基于百度地图实现Android定位功能实现 初始化 一>获取SHA1 二>Android studio 配置 (1)下载百度地图sdk (2)解压安装包 (3)回到刚刚配置的jar包,右击 ...
最新文章
- Visual Studio中的快捷键
- 黄聪:Wordpress 模版技术手册 - WordPress Theme Technical manuals
- 会计记忆总结之六:账务处理程序
- 51nod 1785 数据流中的算法 (方差计算公式)
- “约见”面试官系列之常见面试题之第八十篇之css常见属性(建议收藏)
- docker entrypoint入口文件详解
- Facebook 开源增强版 LASER,可使用90多种语言
- mysql修改表结构 删除字段_mysql更改表结构:添加、删除、修改字段、调整字段顺序...
- 微信小程序 data中数据值的更改与储存
- RMI:Java中的分布式计算框架
- 3大领域,4大方向,做好数据分析岗位的职业规划
- [转]论window和Linux之长短
- UESTC 1633 去年春恨却来时,落花人独立,微雨燕双飞 Dijkstra+构造
- luogu 3373 线段树懒标记维护乘与加
- java中 基础 知识 逻辑控制
- duet连win10_在Windows PC上使用Duet Display时连接不上Apple设备的解决方法之一
- 分布式(技术栈、关键技术、PaaS平台、资料推荐、相关论文)
- 目标规划问题与LINGO求解
- 【xla】六、【构图阶段】xlaRunOp
- ZT 安卓手机的安全性 prepare for Q
热门文章
- arcgis10之给图层添加注记
- 手机也可以快速翻译、PDF翻译超简单
- 小白学习编程遇到问题应该如何正确的提问
- Verilog HDL 总结(1)
- C/C++ 光标:键盘上下键实现菜单移动
- EduCoder-Web程序设计基础-html5—表格高级样式的设置-第3关:设置表格的内边框样式
- [Graphics]自组织植物建模方法(ContinousLassoBrush)
- i5处理器做java够用吗,一般的游戏玩家用i5处理器就够了,这是真的吗?
- 开发小程序插件如何实现盈利?
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛