IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽
IOS百度地图开发POISearch搜索附近停车场,附近加油站
IOS百度地图视角跳到用户当前位置
IOS百度地图开发实时路况
IOS开发百度地图自动导航
IOS开发百度地图在大头钉上加文字和图片,点击这个整体再弹出气泡
IOS开发百度地图实现经纬度导航,无需地名。

 第一部分--牛刀小试

百度地图零基础到各种效果界面。上面的几行不用看,那是为了SEO,就是为了让我这篇博客让更多的人搜索到,上面的问题我都已经解决,都在文章里面。下面是步骤:
1.申请百度地图key。2013年10月之后的2.1.0版本开始启用新的key!要想使用百度地图,你需要申请key,这个key是安桌苹果通用,但是你的项目名必须跟你的key吻合,至于什么是项目名,不多说,到网址http://lbsyun.baidu.com/apiconsole/key申请,

我的应用
应用Id 应用名称 访问应用(ak) 应用类别 备注信息(双击更改) 应用配置
系统默认AK 系统默认AK
AA1********28e
未配置 当前系统所用AK 当前系统所用AK
17673 IphoneMapSdkDemo pytxh1exmzkAneO5Vf4K 移动端   设置 删除
17721 MapTest LqwUseZROjwxwb2zZ4e 移动端   设置 删除

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.注意:在这里就开始运行程序的话,我在我的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

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

第二部分

功能五,搜索,用的很广泛,这个功能很强大,你可以搜索某一坐标点附近的加油站,停车场,宾馆,酒店,餐厅,甚至厕所都能搜索到,比如说你想查找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 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;//允许点击弹出气泡框

在地图上定制标注替代大头钉,可以将文字图片所有能加到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{
    UIGraphicsBeginImageContext(view.bounds.size);
    [view.layer renderInContext: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

部分效果图

第三部分

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];
}

相关文章:

开放平台:百度地图 for iOS 使用相关

IOS-百度地图API用点生成线路、导航、自定义标注 2013年11月更新的更多相关文章

  1. 【改】IOS-百度地图API用点生成线路、导航、自定义标注 2013年11月更新

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

  2. 【百度地图API】情人节求爱大作战——添加标注功能

    原文:[百度地图API]情人节求爱大作战--添加标注功能 任务描述: 2月2日是除夕,2月14立马来!即将到来的情人节,你想送TA一份什么礼物呢? 不如,在你们居住的地方,画个大大的桃心,表达你对TA ...

  3. ios 百度地图api 入门

    百度地图api 官方教程: http://developer.baidu.com/map/index.php?title=iossdk 这个非常好, 很适合新手 CLLocationCoordinat ...

  4. 百度地图API多个点聚合时,标注添加的标签label地图刷新就丢失的问题解决

    当将自定义的Marker(含有Label)通过MarkerClusterer 管理的时候,当地图发生任何移动.缩放 的时候,Marker 的Label 就会自动消失. 这个问题主要是由于百度的点聚合A ...

  5. 百度地图API秘钥生成步骤

    百度API

  6. 百度地图API自动定位和3种导航

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 百度地图API示例之小实践 添加代理商标注

    地图坐标无非是经度纬度. 每个代理商都有他的经度纬度参数,就能够在地图上标注出来了. 效果如下: 功能包括 标记代理商 显示导航 显示距离 测量距离 点击选中等 其中测距用到的是自定义控件 地图根据城 ...

  8. 【百度地图API】如何制作自定义样式的公交导航结果面板?

    原文:[百度地图API]如何制作自定义样式的公交导航结果面板? 摘要: 百度地图API有默认的公交导航结果面板,但样式比较单一:而百度地图上的结果面板就比较美观.如何利用百度地图API来制作一个比较美 ...

  9. 百度地图API:利用瓦片生成工具,自定义背景图片

    参考酸奶小妹的博文<[百度地图API]如何制作一张魔兽地图!!——CS地图也可以,哈哈哈> (http://www.cnblogs.com/milkmap/archive/2011/05/ ...

随机推荐

  1. React 16 源码瞎几把解读 【二】 react组件的解析过程

    一.一个真正的react组件编译后长啥样? 我们瞎几把解读了react 虚拟dom对象是怎么生成的,生成了一个什么样的解构.一个react组件不光由若干个这些嵌套的虚拟dom对象组成,还包括各种生命周 ...

  2. Lempel-Ziv algorithm realization

    Lempel-Ziv 复杂度程序 随着人们对非线性方法的分析越加深入,他们发现,虽然关联维度和最大李雅谱诺夫指数在分析脑电时具有一定的帮助,但是它们对数据的依赖性太强,对干扰和噪 声太敏感,而且要得到 ...

  3. 用OpenSSL命令行生成证书文件

    用OpenSSL命令行生成证书文件 1.首先要生成服务器端的私钥(key文件): openssl genrsa -des3 -out server.key 1024 运行时会提示输入密码,此密码用于加 ...

  4. C#矩形框沿直线移动

    C#中用GDT+的一系列方式,可以绘制各种图形:点,直线,圆形,矩形...... C#中这些图形的绘制,一般教程的demo中给出的代码,是在Form1_Paint(object sender, Pai ...

  5. 线性SVM的推导

    线性SVM算法的一般过程 线性SVM的推导 超平面方程 SVM是用来分类的.给定一系列输入数据(n维向量),需要找到一个切分界线(n-1维的超平面),这里假定数据是线性可分的.比如,二维数据的超平面是 ...

  6. Python 的十个自然语言处理工具

    原文 先mark,后续尝试. 1.NLTK NLTK 在用 Python 处理自然语言的工具中处于领先的地位.它提供了 WordNet 这种方便处理词汇资源的借口,还有分类.分词.除茎.标注.语法分析 ...

  7. Templated Helper Methods(二)

      1.Label and Display Elements   2.Whole-Model Templated Helpers     3.Using Metadata to Control Edi ...

  8. SQL 如何查找一个表里,每个班级各个学科的最高分?

    SQL 如何查找一个表里,每个班级各个学科的最高分? 学生表:STUDENT(S#,SNAME,SAGE,SSEX,CLASSNO) 班级表:CLASS(CLASSNO,CLASSNAME) 课程表: ...

  9. 《Android虚拟机》----虚拟机概述

    No1: 虚拟机是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离的环境中的完整计算机系统. No2: Java虚拟机由如下五个部分组成:一组指令集.一组寄存器.一个栈.一个无用单元收集堆. ...

  10. 牛客练习赛9 F - 珂朵莉的约数

    题目描述 珂朵莉给你一个长为n的序列,有m次查询 每次查询给两个数l,r 设s为区间[l,r]内所有数的乘积 求s的约数个数mod 1000000007 输入描述: 第一行两个正整数n,m第二行一个长 ...