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上运行这个百度地图,会出现-[UIDevice uniqueGlobalDeviceIdentifier]: unrecognized selector sent to instance 0x1ed19370
这么一个bug,解决办法很多,但是我感觉最爽的一种办法就是加入4个文件NSString+MD5Addition,UIDevice+IdentifierAddition,直接加入到项目里面就可以,无需引入头文件,下载地址 http://www.kuaipan.cn/file/id_30491149655344975.htm
7. 在viewController.mm中 的viewDidLoad改为如下代码
- (void)viewDidLoad
{
       [super viewDidLoad];
       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

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

第二部分
       在开始之前,要对坐标有个了解,手机自带GPS定位功能,获得的GPS坐标无法直接在国内地图中直接使用,因为经过了偏移转换,目的是为了国家安全,假如小日本知道全中国任意点的精确坐标,可以把国内的任意地图资源整合的话,那么它的导弹想打到哪就是哪。当然这只是一方面。
       还有新手注意,别在软件中使用多个地图,也不要同一界面中同一地图的多个窗口。地图授权是根据项目名,那么在项目中需要多处使用的话,要使用单例模式。如果在多个界面加载了地图界面,各个界面由于是使用单例模式会相互干扰,所以可以根据需要进行重定位。

功能五,搜索,用的很广泛,这个功能很强大,你可以搜索某一坐标点附近的加油站,停车场,宾馆,酒店,餐厅,甚至厕所都能搜索到,比如说你想查找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
输出结果
将百度地图视角切换到某一坐标点
-(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];
}
清除地图上所有痕迹和路线
-(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 didDeselectAnnotationVie w:(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:(BMKAnnotationViewDragSta te)newStatefromOldState:(BMKAnnotationViewDragSta te)oldState
{
       NSLog(@"动annotation view时view的状态变化");
}
// 标注呈绿色样式大头钉
((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorGre en;
// 允许用户拖动
[annotationView setDraggable:YES];
// 气泡框左侧显示的View,可自定义
annotationView.leftCalloutAccessoryView  = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_location.png"]];
// 气泡框右侧显示的View 可自定义
annotationView.rightCalloutAccessoryVie w =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 *)view viewForAnnotation:(id <BMKAnnotation>)annotation
在这个委托中实现如下代码
             UIView *viewForImage=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 132, 64)];
               UIImageView *imageview=[[UIImageView alloc]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{
       UIGraphicsBeginImageCont ext(view.bounds.size);
       [view.layer renderInContext:UIGraphicsGetCurrentCont ext()];
       UIImage *image = UIGraphicsGetImageFromCu rrentImageContext();
       UIGraphicsEndImageContex t();
       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

部分效果图

第三部分

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];
       [_mapView removeAnnotations:array];
       array = [NSArray arrayWithArray:_mapView.overlays];
       [_mapView removeOverlays:array];
       CLLocationCoordinate2D startPt = (CLLocationCoordinate2D){0, 0};
       CLLocationCoordinate2D endPt = (CLLocationCoordinate2D){0, 0};
       if (_startCoordainateXText && _startCoordainateYText ) {
              startPt = (CLLocationCoordinate2D){_startCoordainateYText ,_startCoordainateXText };
       }
       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:nil endNode:end];
       if (!flag) {
              NSLog(@"search failed");
       }
       [start release];
       [end release];
       [self Region];
}

2. 在其他软件中打开百度地图,并在百度软件中实现导航,搜索等 。

       在这里仅仅实现打开百度地图,如果打不开,则跳到App Store下载百度地图软件。
          判断能否打开URL,能打开就打开,不能打开就跳转到百度地图,可能有的同学要做一打开百度地图就导航,或者显示搜索到的关键字的结果。这个就是改下下面代码中的的 stringURL, 带什么参数,需要对照百度协议,打开 http://developer.baidu.com/map/uri-introios.htm对照协议。
NSString  *stringURL = [ NSString  stringWithFormat : @"mapbarnaviiap:" ];

NSURL *url = [NSURL URLWithString:stringURL];

if ([[UIApplication sharedApplication] canOpenURL:url]) {

[[UIApplication sharedApplication] openURL:url];

}else{

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

[alert show];

[alert release];

}

3.最近有人问我为什么地图打开是空的,只有网格?包括百度提供的demo也是空的,原因很简单,百度折腾的。

问题在于申请的key。
之前申请可能不需要完整的签名,现在需要完整的签名才行。简单点说,之前申请叫cscapp就ok。现在申请需要com.calinks.cscapp。这个名字必须跟Bundle   Identifer完全相同才能通过百度秘要。

B6258A4A5FFEE50A734B7FAACF104831A18C177A

转:IOS开发百度地图API-用点生成路线,导航,气泡响应相关推荐

  1. IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应

    (转)IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应 IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油 ...

  2. IOS开发百度地图API

    IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地图视角跳到用户当前位置 IOS百度地图开发实时路况 IO ...

  3. IOS开发百度地图API-用点生成路线,导航,气泡响应

    原地址:http://blog.sina.com.cn/s/blog_68661bd80101k4rx.html IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发 ...

  4. ios 开发百度地图的使用

    IOS开发百度地图API-用点生成路线,导航,气泡响应 IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地 ...

  5. HTML5页面调用百度地图API,获取当前位置并导航到目的地

    微信也可用, <!DOCTYPE html> <html lang="zh-cmn-Hans"><meta charset="UTF-8&q ...

  6. 关于c++MFC开发百度地图api范例

     基于MFC与第三方类CWebPage的百度地图API开发范例: 基于MFC与第三方类CWebPage的百度地图API开发范例_poetliu的博客-CSDN博客_vc 百度地图二次开发 补充一下: ...

  7. android百度地图API 骑行,步行导航的DEMO以及途径点问题

    android百度地图API的简单骑行,步行的导航demo,以及关于多个路径点问题的说明 ##注:目前基础百度地图API的步行以及骑行是不支持多个路径点的,只能单点对单点的,如果你真的想多个途径点导航 ...

  8. android 百度地图驾车导航,百度地图API详解之驾车导航

    本文将向大家介绍如何使用百度地图API提供的驾车导航服务进行开发. 一个简单的示例 驾车导航服务根据传入的起点和终点信息给出从起点到终点的驾车路线,我们先从一个最简单的示例看起: var map = ...

  9. 百度地图API,改变驾车路线颜色(仿淘宝快递查询,一条路线两个颜色)

    想仿淘宝做一个物流查询,分为:寄件点.当前点. 收件点 和 路线图. 快递已走的路径(寄件点到当前点的颜色)和未走的路径(当前点到收件点)用 颜色 进行区分. 利用百度地图提供的API(当时遇到了点问 ...

最新文章

  1. Python:urllib2模块的URLError与HTTPError
  2. 漫画:生活很苦!当你扛不下去想放弃时,一定要过来看看!
  3. 有关Spring 3.0的发布
  4. Hexo博客新福利:HexoEditor编辑器最新使用方法
  5. 团队-团队编程项目作业名称-成员简介及分工
  6. bzoj 4487: [Jsoi2015]染色问题
  7. Rational Rose 下载安装
  8. 大地win11 64位官方版镜像v2021.07
  9. Java 获取集合元素的值
  10. 优化篇-“移动端”图片上传架构的变迁
  11. ASP.NET MVC4 IN ACTION学习笔记-第六波[Ajax in ASP.NET MVC][3/3]
  12. 后缀的形容词_巧记形容词后缀 第二弹
  13. 【Thinking In Java】笔记之二 控制执行流程
  14. java plugin firefox_Firefox 中使用 Java 插件
  15. linux下载安装花生壳
  16. 无刷滑环全面分析大全
  17. jQuery mobile ——制作表单
  18. TTL转RS232电路
  19. iOS加速器简单介绍
  20. 新浪低调上线开源镜像站

热门文章

  1. adobe CC 2015/2017安装失败
  2. 无法访问netflix服务_Netflix服务中断数个小时 现已部分恢复正常
  3. 电子科大计算机学院专业排名,计算机学科排名最强的十大高校有哪些?电子科技大学水平如何?...
  4. 如何防止浏览器指纹关联
  5. 字段类型(数据类型)
  6. [年终总结]愿你在以后的黑暗时刻,都能想起我
  7. 关于GBDT算法、XGBoost算法的基本原理概述
  8. 如何使用workman为laravel项目添加websocket在线聊天沟通?【从0开始教】
  9. BIOS磁盘中断 13号中断详解
  10. JavaScript中的模板(jsRender)在Django中的使用