IOS开发百度地图API 百度地图开发者api

IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽

IOS百度地图开发POISearch搜索附近停车场,附近加油站

IOS百度地图视角跳到用户当前位置

IOS百度地图开发实时路况

IOS开发百度地图自动导航

IOS开发百度地图在大头钉上加文字和图片,点击这个整体再弹出气泡

IOS开发百度地图实现经纬度导航,无需地名。

第一部分--牛刀小试

百度地图零基础到各种效果界面。上面的几行不用看,那是为了SEO,就是为了让我这篇博客让更多的人搜索到,上面的问题我都已经解决,我QQ915893620,有问题欢迎和我交流。我也会持续更新兄弟们的问题。下面是步骤:

1.申请百度地图key,要想使用百度地图,你需要申请key,这个key是安桌苹果通用,但是你的项目名必须跟你的key吻合,至于什么是项目名,不多说,到网址http://api.map.baidu.com/lbsapi/cloud/ios-mobile-apply-key.htm申请,



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

3.建立一个项目,项目名为cscapp,然后加入3个框架,MapKit.framework,CoreLocation.framework,QuartzCore.framework,将下载的开发包inc,libbaidumapapi.a,mapapi.bundle这三个文件加入到程序中

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.注意:在这里就开始运行程序的话,我在我的iphone上运行这个百度地图,会出现-[UIDeviceuniqueGlobalDeviceIdentifier]: unrecognized selector sent toinstance 0x1ed19370

这么一个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 anyadditional setup after loading the view, typically from anib.

}

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

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

百度地图的功能很强大,上面只是牛刀小试

第二部分

在开始之前,要对坐标有个了解,手机自带GPS定位功能,获得的GPS坐标无法直接在国内地图中直接使用,因为经过了偏移转换,目的是为了国家安全,假如小日本知道全中国任意点的精确坐标,可以把国内的任意地图资源整合的话,那么它的导弹想打到哪就是哪。当然这只是一方面。

还有新手注意,别在软件中使用多个地图,也不要同一界面中同一地图的多个窗口。地图授权是根据项目名,那么在项目中需要多处使用的话,要使用单例模式。如果在多个界面加载了地图界面,各个界面由于是使用单例模式会相互干扰,所以可以根据需要进行重定位。

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

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

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

然后用委托-(void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)typeerrorCode:(int)error

输出结果。

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

-(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 = [_mapViewregionThatFits:viewRegion];

[_mapViewsetRegion:adjustedRegion animated:YES];

}

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

-(void)clereOldYJDH{

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

[_mapViewremoveAnnotations:array];

array =[NSArray arrayWithArray:_mapView.overlays];

[_mapViewremoveOverlays:array];

[selfRegion];

}

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

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

{

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

}

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

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

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

}

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

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

{

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

}

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

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

{

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

}

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

- (void)mapView:(BMKMapView *)mapViewannotationView:(BMKAnnotationView *)viewdidChangeDragState:(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;//允许点击弹出气泡框

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

- (BMKAnnotationView *)mapView:(BMKMapView *)viewviewForAnnotation:(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=[[UILabel alloc]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();

returnimage;

}

在网上发现别人专门建立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;

NSUIntegerindex;

}

#import "BMKPointAnnotation.h"

@interface KYPointAnnotation : BMKPointAnnotation {

NSUInteger_tag;

}

@property NSUInteger tag;

@end

部分效果图





第三部分

1.有一个朋友问我他做导航时,传参数遇到问题,就是输入汉字部分没有,仅靠两点的经纬度怎么实现路线导航,他试了很久没弄出来。然后我把解决这个问题的源码贴出来。我做的是驾车路线,如果需要步行或者公交则需要作调整。主要涉及的方法如下,实现这个的代码,我直接从我的项目中弄出来的http://www.kuaipan.cn/file/id_30491149655345069.htm

-(void)onClickDriveSearch

{

NSLog(@"%f,%f,%f,%f",_startCoordainateXText,_startCoordainateYText,_endCoordainateXText,_endCoordainateYText);

count =0;

isLoadingMap=2;

if(!_endCoordainateXText ||!_endCoordainateYText)isLoadingMap=1;

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

[_mapViewremoveAnnotations:array];

array =[NSArray arrayWithArray:_mapView.overlays];

[_mapViewremoveOverlays:array];

CLLocationCoordinate2D startPt = (CLLocationCoordinate2D){0,0};

CLLocationCoordinate2D endPt = (CLLocationCoordinate2D){0,0};

if(_startCoordainateXText &&_startCoordainateYText ) {

startPt =(CLLocationCoordinate2D){_startCoordainateYText,_startCoordainateXText };

}

IOS开发百度地图API 百度地图开发者api
if(_endCoordainateYText&& _endCoordainateXText ) {

endPt =(CLLocationCoordinate2D){ _endCoordainateYText,_endCoordainateXText};

}

BMKPlanNode*start = [[BMKPlanNode alloc]init];

start.pt =startPt;

start.name =nil;

BMKPlanNode*end = [[BMKPlanNode alloc]init];

end.pt =endPt;

end.name =nil;

BOOL flag =[_search drivingSearch:nil startNode:start endCity:nilendNode:end];

if (!flag){

NSLog(@"search failed");

}

[startrelease];

[endrelease];

[selfRegion];

}

2.在其他软件中打开百度地图,并在百度软件中实现导航,搜索等。 在这里仅仅实现打开百度地图,如果打不开,则跳到App Store下载百度地图软件。

第一步,配置plist文件,如下图,特别注意URL Scheme不要加s



第二步,判断能否打开URL,能打开就打开,不能打开就跳转到百度地图,可能有的同学要做一打开百度地图就导航,或者显示搜索到的关键字的结果。这个就是改下下面代码中的的stringURL,带什么参数,需要对照百度协议,打开http://developer.baidu.com/map/uri-introios.htm对照协议。

NSString*stringURL= [NSStringstringWithFormat:@"mapbarnaviiap:"];

NSURL *url = [NSURLURLWithString:stringURL];

if ([[UIApplicationsharedApplication] canOpenURL:url]) {

[[UIApplicationsharedApplication] openURL:url];

}else{

UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"提示"message:@"您未安装百度地图,是否立即前往APPStore安装!"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"立即安装",@"稍后安装",nil];

[alertshow];

[alertrelease];

}

  

爱华网本文地址 » http://www.413yy.cn/a/25101013/183507.html

更多阅读

ios地图线路导航 ios 调用高德地图导航

ios可以调用自带的googlemap实现路径导航,方法非常简单,只需要告诉系统出发点和目的地,代码实现方法如下:[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:[NSStringstring

iOS开发:用xcode5开发第一个helloworld程序 精 火线精英

iOS开发:用xcode5开发第一个helloworld程序 精——简介任何程序开发的学习都是从helloworld开始的,那么如何建立ios开发的第一个helloworld程序,网上也有很多教程,但是很多是老版本的xcode来写的教程,随着ios7的普及,xcode也升级到了新的

IOS开发系列之json解析阿堂教程 json解析视频教程

在前两篇文章中,阿堂分享了关于ios中xml常用的解析方式的实例,这篇文章,阿堂将会介绍json的解析方式的实例。同样,在介绍之前,阿堂先对常见的json解析框架作下简单总结。 SBJson:它是比较老的json编码/解码框架,原名是json-framework。这

声明:《IOS开发百度地图API 百度地图开发者api》为网友往事深处少年蓝分享!如侵犯到您的合法权益请联系我们删除