当前位置: 首页 > news >正文

baidumap demo(二)

接口说明

百度地图API提供的搜索服务包括:POI检索,多关键字检索,公交方案检索,驾车路线检索,步行路线检索,地理编码,反地理编码,公交详情检索,在线建议查询,短串分享。 
所有检索请求接口均为异步接口,您必须实现BMKSearchDelegate协议,在一个时刻只能有一个BMKSearch接受回调消息,因此如果在不同的viewController中使用多个BMKSearch,需要在页面切换对BMKSearch的delegate做处理,代码如下:

源码 复制 打印 关于
  1. -(void)viewWillAppear:(BOOL)animated  
  2. {  
  3.     _search.delegate = self;  
  4. }  
  5. -(void)viewWillDisappear:(BOOL)animated  
  6. {  
  7.     _search.delegate = nil;  
  8. }  

在检索到结果后,API会回调BMKSearchDelegate对应的接口,通知调用者检索结果数据。
BMKSearchDelegate对应的接口如下:

源码 复制 打印 关于
  1. /** 
  2.  *返回POI搜索结果 
  3.  *@param poiResultList 搜索结果列表,成员类型为BMKPoiResult 
  4.  *@param type 返回结果类型: BMKTypePoiList,BMKTypeAreaPoiList,BMKAreaMultiPoiList 
  5.  *@param error 错误号,@see BMKErrorCode 
  6.  */  
  7. - (void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error{  
  8. }  
  9. /** 
  10.  *返回公交搜索结果 
  11. *@param result 搜索结果 
  12.  *@param error 错误号,@see BMKErrorCode 
  13.  */  
  14. - (void)onGetTransitRouteResult:(BMKPlanResult*)result errorCode:(int)error{  
  15. }  
  16.    
  17. /** 
  18.  *返回驾乘搜索结果 
  19.  *@param result 搜索结果 
  20.  *@param error 错误号,@see BMKErrorCode 
  21.  */  
  22. - (void)onGetDrivingRouteResult:(BMKPlanResult*)result errorCode:(int)error{  
  23. }  
  24. /** 
  25.  *返回步行搜索结果 
  26.  *@param result 搜索结果 
  27.  *@param error 错误号,@see BMKErrorCode 
  28.  */  
  29. - (void)onGetWalkingRouteResult:(BMKPlanResult*)result errorCode:(int)error{  
  30. }  
  31. /** 
  32.  *返回地址信息搜索结果 
  33.  *@param result 搜索结果 
  34.  *@param error 错误号,@see BMKErrorCode 
  35.  */  
  36. - (void)onGetAddrResult:(BMKAddrInfo*)result errorCode:(int)error{  
  37. }  
  38. /** 
  39.  *返回公交详情搜索结果 
  40.  *@param result 搜索结果 
  41.  *@param error 错误号,@see BMKErrorCode 
  42.  */  
  43.  - (void)onGetBusDetailResult:(BMKBusLineResult*)result errorCode:(int)error{  
  44. }  
  45. /**  
  46.  *返回suggestion搜索结果  
  47.  *@param result 搜索结果  
  48.  *@param error 错误号,@see BMKErrorCode  
  49.  */   
  50. - (void)onGetSuggestionResult:(BMKSuggestionResult*)result errorCode:(int)error{    
  51. }     
  52. /**  
  53.  *返回poi详情分享url  
  54.  *@param url 返回结果url  
  55.  *@param error 错误号,@see BMKErrorCode  
  56.  */   
  57. - (void)onGetShareUrl:(NSString*) url withType:(BMK_SHARE_URL_TYPE) urlType errorCode:(int)error {    
  58. }  

POI检索

百度地图API提供以下几类POI检索类型:城市内检索,周边检索,范围检索,多关键字检索。 
此处以城市内检索为例说明: 
在ViewController.h中声明BMKSearch对象,并将ViewController实现BMKSearchDelegate协议,代码如下:

源码 复制 打印 关于
  1. @interface PoiSearchDemoViewController : UIViewController<BMKMapViewDelegate, BMKSearchDelegate> {    
  2.     IBOutlet BMKMapView* _mapView;    
  3.     BMKSearch* _search;    
  4. }    

在ViewController.m的viewDidLoad中创建BMKSearch对象,设置对应的delegate,并实现BMKSearchDelegate协议中获取POI结果的方法,代码如下:

源码 复制 打印 关于
  1. - (void)viewDidLoad {     
  2.     [super viewDidLoad];    
  3.     _search = [[BMKSearch alloc]init];    
  4.     _search.delegate = self;    
  5.     //发起POI检索    
  6.     [_search poiSearchInCity:@"北京" withKey:@"西单" pageIndex:0];    
  7. }    
  8. - (void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error    
  9. {    
  10.     if (error == BMKErrorOk) {    
  11.         BMKPoiResult* result = [poiResultList objectAtIndex:0];    
  12.         for (int i = 0; i < result.poiInfoList.count; i++) {    
  13.             BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];    
  14.         BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];    
  15.             item.coordinate = poi.pt;    
  16.            item.title = poi.name;    
  17.             [_mapView addAnnotation:item];    
  18.             [item release];    
  19.         }    
  20.     }    
  21. }   

运行效果如图:iosdev12.jpg 
示例代码请参考相关下载demo工程中的PoiSearchDemoViewController.mm文件

公交方案检索

在ViewController.h中声明BMKSearch对象,并将ViewController实现BMKSearchDelegate协议,代码参考Demo中的示例代码.
在ViewController.m中创建BMKSearch对象,设置对应的delegate,并实现BMKSearchDelegate协议中获取公交路线结果的方法,代码如下:

源码 复制 打印 关于
  1. - (void)viewDidLoad {     
  2.     [super viewDidLoad];    
  3.     _search = [[BMKSearch alloc]init];    
  4.     _search.delegate = self;    
  5.     //发起公交检索    
  6.     BMKPlanNode* start = [[BMKPlanNode alloc]init];    
  7.     start.name = @"天安门";    
  8.     BMKPlanNode* end = [[BMKPlanNode alloc]init];    
  9.     end.name = @"百度大厦";    
  10.         [_search transitSearch:@"北京" startNode:start endNode:end];    
  11.     [start release];    
  12.     [end release];    
  13. }    
  14. - (void)onGetTransitRouteResult:(BMKPlanResult*)result errorCode:(int)error    
  15. {    
  16.     // 在此处添加您对公交方案结果的处理    
  17. }    

将公交方案对应的路线和关键点绘制在地图上,效果如下图:
iosdev13.jpg 
示例代码请参考相关下载demo工程中的RouteSearchDemoViewController.mm文件

驾车路线检索

在ViewController.h中声明BMKSearch对象,并将ViewController实现BMKSearchDelegate协议,代码参考Demo中的示例代码.
在ViewController.m中创建BMKSearch对象,设置对应的delegate,并实现BMKSearchDelegate协议中获取驾车路线结果的方法,代码如下:

源码 复制 打印 关于
  1. - (void)viewDidLoad {     
  2.     [super viewDidLoad];    
  3.     _search = [[BMKSearch alloc]init];    
  4.     _search.delegate = self;    
  5.     //发起公交检索    
  6.     BMKPlanNode* start = [[BMKPlanNode alloc]init];    
  7.     start.name = @"天安门";    
  8.     BMKPlanNode* end = [[BMKPlanNode alloc]init];    
  9.     end.name = @"百度大厦";    
  10.     [_search drivingSearch:@"北京" startNode:start endCity:@"北京" endNode:end];    
  11.     [start release];    
  12.     [end release];    
  13. }    
  14. - (void)onGetDrivingRouteResult:(BMKPlanResult*)result errorCode:(int)error    
  15. {    
  16.     // 在此处添加您对驾车方案结果的处理    
  17. }   

将驾车方案对应的路线和关键点绘制在地图上,效果如下图:
iosdev14.jpg 
示例代码请参考相关下载demo工程中的RouteSearchDemoViewController.mm文件

驾车路线途经点检索

源码 复制 打印 关于
  1. BMKPlanNode* start = [[[BMKPlanNode alloc]init] autorelease];  
  2. start.pt = startPt;  
  3. start.name = _startAddrText.text;  
  4. BMKPlanNode* end = [[[BMKPlanNode alloc]init] autorelease];  
  5. end.name = _endAddrText.text;  
  6. NSMutableArray * array = [[[NSMutableArray alloc] initWithCapacity:10] autorelease];  
  7. BMKPlanNode* wayPoint1 = [[[BMKPlanNode alloc]init] autorelease];  
  8. wayPoint1.cityName = @"北京";  
  9. wayPoint1.name = @"清华大学";  
  10. [array addObject:wayPoint1];  
  11. BOOL flag = [_search drivingSearch:_startCityText.text startNode:start endCity:_endCityText.text endNode:end throughWayPoints:array];  

注意:途经点传入的数组内容为BMKPlanNode,途经点长度最大限制为10个,超过10个途经点的请求不会被发送。BMKPlanNode数据结构新添加cityName属性,标记途经点的城市,如果不填默认用startCity。

步行路线检索

在ViewController.h中声明BMKSearch对象,并将ViewController实现BMKSearchDelegate协议,代码参考Demo中的示例代码.
在ViewController.m中创建BMKSearch对象,设置对应的delegate,并实现BMKSearchDelegate协议中获取步行路线结果的方法,代码如下:

源码 复制 打印 关于
  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.     _mapView.delegate = self;  
  4.     _search = [[BMKSearch alloc]init];  
  5.     _search.delegate = self;  
  6.     //发起步行检索  
  7.     BMKPlanNode* start = [[BMKPlanNode alloc]init];  
  8.     start.name = @"天安门";  
  9.     BMKPlanNode* end = [[BMKPlanNode alloc]init];  
  10.     end.name = @"百度大厦";  
  11.     [_search walkingSearch:@"北京" startNode:start endCity:@"北京" endNode:end];  
  12.     [start release];  
  13.     [end release];  
  14. }  
  15. - (void)onGetWalkingRouteResult:(BMKPlanResult*)result errorCode:(int)error  
  16. {  
  17.     // 在此处添加您对步行方案结果的处理  
  18. }  

将步行方案对应的路线和关键点绘制在地图上,效果如下图:
iosdev15.jpg 
示例代码请参考相关下载demo工程中的RouteSearchDemoViewController.mm文件

地理编码

在ViewController.h中声明BMKSearch对象,并将ViewController实现BMKSearchDelegate协议,代码参考Demo中的示例代码.
在ViewController.m中创建BMKSearch对象,设置对应的delegate,并实现BMKSearchDelegate协议中获取地理编码结果的方法,代码如下:

源码 复制 打印 关于
  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.     _mapView.delegate = self;  
  4.     _search = [[BMKSearch alloc]init];  
  5.     _search.delegate = self;  
  6.     //发起地理编码  
  7.     [_search geocode:@"东长安街33号" withCity:@"北京"];  
  8. }  
  9. - (void)onGetAddrResult:(BMKAddrInfo*)result errorCode:(int)error  
  10. {  
  11.     // 在此处添加您对地理编码结果的处理  
  12. }  


完整的示例代码请参考相关下载demo工程中的GeocodeDemoViewController.mm文件

反地理编码

在ViewController.h中声明BMKSearch对象,并将ViewController实现BMKSearchDelegate协议,代码参考Demo中的示例代码.
在ViewController.m中创建BMKSearch对象,设置对应的delegate,并实现BMKSearchDelegate协议中获取反地理编码结果的方法,代码如下:

源码 复制 打印 关于
  1. - (void)viewDidLoad {    
  2.     [super viewDidLoad];    
  3.     _search = [[BMKSearch alloc]init];    
  4.     _search.delegate = self;    
  5.     //发起反地理编码    
  6.     CLLocationCoordinate2D pt = (CLLocationCoordinate2D){0, 0};//此处填写想要反地理编码的坐标  
  7.     BOOL flag = [_search reverseGeocode:pt];  
  8. }    
  9. - (void)onGetAddrResult:(BMKAddrInfo*)result errorCode:(int)error    
  10. {    
  11.     // 在此处添加您对反地理编码结果的处理    
  12. }   


完整的示例代码请参考相关下载demo工程中的GeocodeDemoViewController.mm文件

公交详情检索

在ViewController.h中声明BMKSearch对象,并将ViewController实现BMKSearchDelegate协议,代码参考Demo中的示例代码.
在ViewController.m中创建BMKSearch对象,设置对应的delegate,并实现BMKSearchDelegate协议中获取驾车路线结果的方法。发起公交详情搜索前,先进行POI检索,检索结果中poi.epoitype == 2时表示该类型为公交线路,才可发起公交搜索,代码如下:

源码 复制 打印 关于
  1. - (void)viewDidLoad {     
  2.     [super viewDidLoad];    
  3.     _search = [[BMKSearch alloc]init];    
  4.     _search.delegate = self;    
  5.     //发起poi检索    
  6.     [_search poiSearchInCity:@"北京" withKey:@"717" pageIndex:0];    
  7. }    
  8. - (void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error    
  9. {    
  10.     if (error == BMKErrorOk) {    
  11.         BMKPoiResult* result = [poiResultList objectAtIndex:0];    
  12.         for (int i = 0; i < result.poiInfoList.count; i++) {    
  13.             BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];    
  14.             if(poi.epoitype == 2)    
  15.                                  {    
  16.                                       break;    
  17.                                  }    
  18.         }    
  19.             // 发起公交详情搜索    
  20.               if(poi != nil && poi.epoitype == 2 )    
  21.               {    
  22.                 NSLog(poi.uid);    
  23.                    BOOL flag = [_search busLineSearch:@"北京"   withKey:poi.uid];    
  24.                       if (!flag) {    
  25.                        NSLog(@"search failed!");    
  26.                       }    
  27.               }    
  28.     }    
  29. }    
  30. - (void)onGetBusDetailResult:(BMKBusLineResult *)busLineResult errorCode:(int)error    
  31. {    
  32.     // 在此处添加您对公交详情结果的处理    
  33. }    

将公交详情对应的路线和关键点绘制在地图上,效果如下图:
iosdev15.jpg 
示例代码请参考相关下载demo工程中的BusLineSearchViewController.mm文件

在线建议查询

在线建议查询是指根据关键词查询在线建议词,代码如下:

源码 复制 打印 关于
  1. [_search suggestionSearch:@"西单" inCity:@"北京"];   

在- (void)onGetSuggestionResult:(BMKSuggestionResult*)result errorCode:(int)error;接口中获取数据。

短串分享

短串分享是指,用户搜索查询后得到的每一个地理位置结果将会对应一条短串(短链接),用户可以通过短信、邮件或第三方分享组件(如微博、微信等)把短串分享给其他用户从而实现地理位置信息的分享。当其他用户收到分享的短串后,点击短串即可打开手机上的百度地图客户端或者手机浏览器进行查看。

例如,用户搜索"百度大厦"后通过短信使用短串分享功能把该地点分享给好友,好友点击短信中的短串"http://j.map.baidu.com/BkmBk"后可以调起百度地图客户端或者手机浏览器查看"百度大厦"的地理位置信息。

目前短串分享功能暂时开放了"POI搜索结果分享"和"反向地理编码结果分享",日后会开放更多的功能,欢迎广大开发者使用短串分享功能。

1、POI搜索结果分享

根据POI检索结果的UID,生成一个短连接,用于分享。方法为:- (BOOL)poiDetailShareUrl:(NSString*) uid;参数uid为待分享POI点的UID,代码如下:

源码 复制 打印 关于
  1. //发起短串搜索获取poi分享url  
  2. BOOL flag = [_search poiDetailShareUrl:poi.uid];  

2、反向地理编码结果分享

根据反向地理编码结果,生成一个用于分享的短连接。方法为:-(BOOL)reverseGeoShareUrl:(CLLocationCoordinate2D)coorpoiName:(NSString*)namepoiAddress:(NSString*)address;参数location:共享点经纬度坐标;name:共享点的名称;address:共享点的地址。代码如下:

源码 复制 打印 关于
  1. //发起短串搜索获取反geo分享url  
  2. BOOL flag = [_search reverseGeoShareUrl:pt poiName:geoName poiAddress:addr];   

3、获取短串分享结果

短串请求结果可以在BMKSearchDelegate的onGetShareUrl回调中获得,代码如下:

源码 复制 打印 关于
  1. //返回短串分享url  
  2. - (void)onGetShareUrl:(NSString*) url withType:(BMK_SHARE_URL_TYPE) urlType errorCode:(int)error  
  3. {  
  4.     shortUrl = url;  
  5.     if (error == BMKErrorOk)  
  6.     {  
  7.         if(showmeg!=nil)  
  8.         {  
  9.             [showmeg release];  
  10.             showmeg = nil;  
  11.         }  
  12.         showmeg = [[NSString stringWithFormat:@"这里是:%@\r\n%@\r\n%@",geoName,addr,short  
  13.         Url] retain];  
  14.         UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"短串分享" message  
  15.         :showmeg delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定",@"取消",nil];  
  16.         myAlertView.tag = 1000;  
  17.         [myAlertView show];  
  18.         [myAlertView release];  
  19.     }      
  20. }  

调启百度导航

百度地图iOS SDK自v2.1.1版本起,为用户提供调启百度导航的能力。调启导航,分为两种:调启百度地图客户端导航和调启百度地图Web导航,用户只需很小的工作量,就可实现驾车路线导航的全套功能。

导航的核心代码如下,详细使用方法请参考Demo:

源码 复制 打印 关于
  1.       
  2.     //调启百度地图客户端导航  
  3. - (IBAction)nativeNavi  
  4. {  
  5. //初始化调启导航时的参数管理类  
  6. NaviPara* para = [[NaviPara alloc]init];  
  7. //指定导航类型  
  8. para.naviType = NAVI_TYPE_NATIVE;  
  9.   
  10. //初始化终点节点  
  11. BMKPlanNode* end = [[[BMKPlanNode alloc]init] autorelease];  
  12. //指定终点经纬度  
  13. CLLocationCoordinate2D coor2;  
  14. coor2.latitude = _nativeEndLatitude.text.floatValue;  
  15. coor2.longitude = _nativeEndLongitude.text.floatValue;  
  16. end.pt = coor2;  
  17. //指定终点名称  
  18. end.name = _nativeEndName.text;  
  19. //指定终点  
  20. para.endPoint = end;  
  21.   
  22. //指定返回自定义scheme,具体定义方法请参考常见问题  
  23. para.appScheme = @"baidumapsdk://mapsdk.baidu.com";  
  24. //调启百度地图客户端导航  
  25. [BMKNavigation openBaiduMapNavigation:para];  
  26. [para release];  
  27. }  
  28. //调启web导航  
  29. - (IBAction)webNavi  
  30. {  
  31. //初始化调启导航时的参数管理类  
  32. NaviPara* para = [[NaviPara alloc]init];  
  33. //指定导航类型  
  34. para.naviType = NAVI_TYPE_WEB;  
  35.   
  36. //初始化起点节点  
  37. BMKPlanNode* start = [[[BMKPlanNode alloc]init] autorelease];  
  38. //指定起点经纬度  
  39. CLLocationCoordinate2D coor1;  
  40. coor1.latitude = _webStartLatitude.text.floatValue;  
  41. coor1.longitude = _webStartLongitude.text.floatValue;  
  42. start.pt = coor1;  
  43. //指定起点名称  
  44. start.name = _webStartName.text;  
  45. //指定起点  
  46. para.startPoint = start;  
  47.   
  48.   
  49. //初始化终点节点  
  50. BMKPlanNode* end = [[[BMKPlanNode alloc]init] autorelease];  
  51. CLLocationCoordinate2D coor2;  
  52. coor2.latitude = _webEndLatitude.text.floatValue;  
  53. coor2.longitude = _webEndLongitude.text.floatValue;;  
  54. end.pt = coor2;  
  55. para.endPoint = end;  
  56. //指定终点名称  
  57. end.name = _webEndName.text;  
  58. //指定调启导航的app名称  
  59. para.appName = [NSString stringWithFormat:@"%@", @"testAppName"];  
  60. //调启web导航  
  61. [BMKNavigation openBaiduMapNavigation:para];  
  62. [para release];  
  63. }  
  64.    

效果如下图:
iosdev17.png iosdev18.png

转载于:https://www.cnblogs.com/yulang314/p/3549748.html

相关文章:

  • css3中定义required,focus,valid和invalid样式
  • C#控制定位Word光标移动到任意行或者最后一行,取得光标位置等操作
  • Linux-ip配置
  • c#工厂模式与抽象工厂模式
  • 江南style之---黄山
  • Linux服务器操作系统基础篇
  • 网卡及MAC和PHY的区别
  • 终端I/O之终端标识
  • Hadoop中MapReduce获取命令行参数例子(11)
  • 得到Revit子窗体
  • linux命令行抓取网页快照-(xvfb+CutyCapt)
  • 在eclipse里的 flex 没有可视化的编辑
  • iOS的动态代理模式的实现
  • 关于volatile
  • 通过vbs脚本备份数据-本地到异地
  • 网络传输文件的问题
  • 2019.2.20 c++ 知识梳理
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • bearychat的java client
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS实用技巧干货
  • ECMAScript6(0):ES6简明参考手册
  • Python3爬取英雄联盟英雄皮肤大图
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 阿里云购买磁盘后挂载
  • 不上全站https的网站你们就等着被恶心死吧
  • 代理模式
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 听说你叫Java(二)–Servlet请求
  • 一个完整Java Web项目背后的密码
  • const的用法,特别是用在函数前面与后面的区别
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​你们这样子,耽误我的工作进度怎么办?
  • #每天一道面试题# 什么是MySQL的回表查询
  • $().each和$.each的区别
  • $jQuery 重写Alert样式方法
  • ( 10 )MySQL中的外键
  • (+4)2.2UML建模图
  • (39)STM32——FLASH闪存
  • (C语言)逆序输出字符串
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读11/100)Fast R-CNN
  • (一)基于IDEA的JAVA基础12
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转) ns2/nam与nam实现相关的文件
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .chm格式文件如何阅读
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)