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

今天开始使用百度地图的API实现相关的地理位置功能

在根据官方文档: http://developer.baidu.com/map/sdkiosdev-2.htm

进行一系列的引入后,还需要注意以下两个细节,否则编译和运行时都会出错:

1:让XCode 处于 Objective - C++ 混编模式进行编译: 最简单方法就是:随便更改工程文件中的某一个,将.m更改为.mm .

2:由于静态库里面包含类别条目(第四点),所以需要让工程支持类别的编译: Project->Build Settings->Other Linker Flags   添加值:
 -all_load

3:关于 setPaopaoView 警告 临时解决方案如下: 在 Other Linker Flags新增一个
-w 

4:建议合并静态库

接下来开始记录具体用到的功能点:

第一个:成功载入地图后,开启定位功能,确认当前使用设备所在的地理位置,代码如下:

1: 开发定位功能,允许地图应用时时获取地理位置信息,并触发委托.

_mapView.showsUserLocation = YES;//开启定位服务

所触发的委托:

- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation
{

}

2:如果以上委托被调用,说明位置信息已经成功获取,接下来需要将地图位置,移动到定位所在的位置,代码如下:

_mapView.userLocation //记录设备当前所在位置
NSLog(@"!latitude!!!  %f",userLocation.location.coordinate.latitude);//经度
NSLog(@"!longtitude!!!  %f",userLocation.location.coordinate.longitude);//纬度
//传入经纬度,将baiduMapView 锁定到以当前经纬度为中心点的显示区域和合适的显示范围
- (void)setMapRegionWithCoordinate:(CLLocationCoordinate2D)coordinate
{
    BMKCoordinateRegion region;
    if (!_isSetMapSpan)//这里用一个变量判断一下,只在第一次锁定显示区域时 设置一下显示范围 Map Region
    {
        region = BMKCoordinateRegionMake(coordinate, BMKCoordinateSpanMake(0.05, 0.05));//越小地图显示越详细
        _isSetMapSpan = YES;
        [baiduMapView setRegion:region animated:YES];//执行设定显示范围
    }
    _currentSelectCoordinate = coordinate;
    [baiduMapView setCenterCoordinate:coordinate animated:YES];//根据提供的经纬度为中心原点 以动画的形式移动到该区域
}

执行 setCenterCoordinate:coordinate   以后开始移动,当移动完成后,会执行以下委托:

- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    [baiduMapView.annotations enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        BMKPointAnnotation *item = (BMKPointAnnotation *)obj;
        if (item.coordinate.latitude == _currentSelectCoordinate.latitude && item.coordinate.longitude == _currentSelectCoordinate.longitude )
        {
            [baiduMapView selectAnnotation:obj animated:YES];//执行之后,会让地图中的标注处于弹出气泡框状态
            *stop = YES;
        }
    }];
}

注:0.05 表示显示区域的详细程度,设定的值最小,其显示的地图区域也就更详细,这个自己试试吧. 几句话也描述不清楚.

另外位置信息获取到以后,会不停的去获取,所以不需要使用的时候,把_mapView.showsUserLocation 设置为NO;

第二个:给指定的位置加入标注.

BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];
item.coordinate = coordinate;//经纬度
item.title = titleString;    //标题
item.subtitle = subTitleString;//子标题
[baiduMapView addAnnotation:item];

注:为地图类引用 添加一个 标注 执行 addAnnotation 以后 baiduMapView为触发以下委托,此委托可以定制化标注视图

//原理类似 UITableView 循环委托加载 CellforRowWithIndexPath
- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation
{
    static NSString *AnnotationViewID = @"annotationViewID";

    BMKAnnotationView *annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
    if (annotationView == nil) {
        annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
		((BMKPinAnnotationView*)annotationView).animatesDrop = YES;
        annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_location.png"]];//气泡框左侧显示的View,可自定义

        UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [selectButton setFrame:(CGRect){260,0,50,annotationView.Help_height}];
        [selectButton setTitle:@"确定" forState:UIControlStateNormal];
        annotationView.rightCalloutAccessoryView =selectButton;//气泡框右侧显示的View 可自定义
        [selectButton setBackgroundColor:[UIColor redColor]];
        [selectButton setShowsTouchWhenHighlighted:YES];
        [selectButton addTarget:self action:@selector(Location_selectPointAnnotation:) forControlEvents:UIControlEventTouchUpInside];
    }
    //以下三行代码用于将自定义视图和标记绑定,一一对应,目的是当点击,右侧自定义视图时,能够知道点击的是那个标记
    annotationView.rightCalloutAccessoryView.tag = _cacheAnnotationTag;
    [_cacheAnnotationMDic setObject:annotation forKey:[NSNumber numberWithInteger:_cacheAnnotationTag]];
    _cacheAnnotationTag++;

    //如果是我的位置标注,则允许用户拖动改标注视图,并赋予绿色样式 处于
    if ([annotation.title isEqualToString:String_myLocation]) {
        ((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorGreen;//标注呈绿色样式
        [annotationView setDraggable:YES];//允许用户拖动
        [annotationView setSelected:YES animated:YES];//让标注处于弹出气泡框的状态
    }else
    {
        ((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorRed;
    }

    annotationView.centerOffset = CGPointMake(0, -(annotationView.frame.size.height * 0.5));//不知道干什么用的
    annotationView.annotation = annotation;//绑定对应的标点经纬度
    annotationView.canShowCallout = TRUE;//允许点击弹出气泡框
    return annotationView;
}

如果用户手动在地图中点击标注视图或者是 为 标注视图  BMKAnnotationView setSelect:YES 那么会触发以下委托:

- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view
{
    _currentSelectCoordinate = view.annotation.coordinate;
}

再当点击弹出的气泡框时亦会触发以下委托:

- (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view;

如果要删除标注:

NSMutableArray *annotationMArray = [[NSArray arrayWithArray:baiduMapView.annotations] mutableCopy];
[baiduMapView removeAnnotations:annotationMArray];

第三个就是开始POI检索

初始化:

baiduMapSearch = [[BMKSearch alloc] init];
baiduMapSearch.delegate =self;
[BMKSearch setPageCapacity:10]; //设置每次搜索多少页

开始搜索: 提供 搜索 城市 和关键字

BOOL flag = [baiduMapSearch poiSearchInCity:_currentCity withKey:_searchKeywordString pageIndex:_searchPageIndex];

搜索委托

- (void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error
{       //这里判断表示顺利搜索成功
    if (error == BMKErrorOk) {
	BMKPoiResult* result = [poiResultList objectAtIndex:0];//如果有表示搜索到数据
	for (int i = 0; i < result.poiInfoList.count; i++) {
		BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];
        }
    }
}

注:BMKPoiResult 里面展示当前搜索情况,如下:总共搜索到多少条数据,本次搜索到多少条数据,当前搜索到第几页等

     BMKPoiInfo 是每一个搜索结果,里面有电话 ,地址,经纬度 等

最多附上相关资源包: http://www.kuaipan.cn/file/id_10716325655621670.htm

密码:QNWNaf

时间: 2024-09-08 14:54:25

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

rest-有没有类似微博开发平台,百度地图api那样的,能授权token,设置过期时间的开源实现?

问题描述 有没有类似微博开发平台,百度地图api那样的,能授权token,设置过期时间的开源实现? 有没有类似微博开发平台,百度地图api那样的,能授权token,设置过期时间的开源实现? 想设计一套自己的rest api 解决方案 它们都遵循oath2.0标准,asp.net jsp ruby等等都有对应的支持,自己google

iOS百度地图简单使用详解_IOS

百度地图 iOS SDK是一套基于iOS 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供POI检索.路径规划.地图标注.离线地图.定位.周边雷达等丰富的LBS能力 . 今天主要介绍以下接口 基础地图 POI检索 定位 首先配置环境 1.自动配置.framework形式开发包(使用CocoaPods)<推荐> 2.手动配置.framework形式开发包 特别注意: (API里有很多注意点,大家可以具体去看.但是我说的后两点少其中一个都会失败,第一点是有需求的话,必须加上)

ios添加百度地图,定位之后,地图就是空白,把程序退出,地图就显示正常

问题描述 ios添加百度地图,定位之后,地图就是空白,把程序退出,地图就显示正常 我的程序里添加了百度地图sdk 当程序第一次装机的时候,只要你定位了以后 ,以后打开的百度的mapview都是空白,也没报错. 当把程序双击home退出之后,在进入程序一切正常!!!这个时候就是你怎么定位都不影响百度地图使用.以后不管你怎搞都没事了 百度地图sdk是最新的 Xcode是7.2 用的是ios8 解决方案 http://www.cocoachina.com/bbs/read.php?tid-257009

iOS和安卓都用的百度地图吗?

问题描述 本帖最后由 独孤求败 于 2015-2-27 14:50 编辑 iOS和安卓都用的百度地图吗? 解决方案 安卓是百度地图,iOS是苹果自己的地图

百度智能互联开放平台上线 欲借此布局智能家居

摘要: 百度智能互联开放平台(百度智家ihome.baidu.com)日前低调上线.百度智家首批推出了 路由器 开放平台,通过小度路由,百度希望能够在为用户提供下载.存储.远程通讯以及用户鉴权外, 百度智能互联开放平台(百度智家ihome.baidu.com)日前低调上线.百度智家首批推出了" 路由器 开放平台",通过"小度路由",百度希望能够在为用户提供下载.存储.远程通讯以及用户鉴权外,也能实现智能家居设备的互联互通能力.通过路由器开放平台,用户能够快速发现和连

专访李彦宏:开放平台跟传统搜索排序无本质区别

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 9月2日消息,2010百度世界大会在北京召开,百度CEO李彦宏上午就框计算和百度应用平台进行了演示和详解,下午接受了专访. 以下为专访全文: 记者:我们这次百度应用开放平台对我们互联网生态系统的影响很大,今天上午嘉宾们都很关心怎么样通过这个平台赚钱,能否跟我们谈谈怎样建立这个生态系统平台,怎样让开发者既有品牌的利益,又有流量和收入的利益? 李彦宏:作为百度来说,我们在这个位置上必须要不断创新.与时俱进,根据市场的需求和变化调整策略,开发新的

Zynga社交游戏首度入华 联手腾讯开放平台

社交游戏巨头Zynga正在将一些鸡蛋放进中国市场这个篮子里. 昨天, Zynga与腾讯在上海宣布,旗下社交游戏的本土化测试版本正式登陆腾讯开放平台,由此展开合作.这是Zynga首度进军中国市场,也是腾讯开放平台上最先入驻的国际社交游戏开发商. Zynga是目前全球最大的社交游戏公司,本月初已正式申请IPO,融资10亿美元,目前在Facebook拥有2.32亿月活跃用户,营收达6亿美元,估值已达200亿美元. 据悉,首先上线的游戏是<CityVille>的中文版<星佳城市>.游戏测试

百度地图+麦当劳打穿线上线下金秋免费樱花甜筒等你来抢

9月24日开始,百度地图独家与麦当劳合作,为其全新推出的樱花口味圆筒冰淇淋量身定制了"樱花甜筒跑酷0元抢"活动.此次活动,百度地图是首次尝试基于用户位置进行定制化推送,活动期间,当消费者身处距离麦当劳甜品站3公里的范围内时,根据消费者的属性进行识别,部分消费者手机上会收到百度地图关于活动的推送信息,点击信息即可参与活动.此外,当你处于活动区域打开百度地图APP时,无论点击"附近",还是搜索麦当劳时,"0元疯抢麦当劳甜筒"的活动字样跃然屏幕,点击后

百度将推地图API开放平台

本报讯 (记者李斌)昨天,百度宣布旗下产品百度地图将推出API(应用程序编程接口)开放平台,将把百度地图嵌入到网页应用程序接口,给二次开发者提供大量实用工具用以处理地图,向地图添加内容,从而使其他各类网站能轻松创建功能更全面的地图应用程序,满足不同人群对地图服务的个性化需求. 百度地图产品相关负责人解释,比如网上房屋中介服务机构加上百度地图API后,让人们输入地址就可以在地图上看到附近出租的房子,连锁酒店能在地图上标注全国范围内的店面所处位置及图片信息等.