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

简介: 今天开始使用百度地图的API实现相关的地理位置功能 在根据官方文档: http://developer.baidu.com/map/sdkiosdev-2.

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

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

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 )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 是每一个搜索结果,里面有电话 ,地址,经纬度 等



color:rgb(255,255,255)">密码: QNWNaf



目录
相关文章
|
3月前
|
定位技术 开发工具 iOS开发
百宝箱开放平台 ✖️ iOS 集成说明
本文介绍百宝箱智能体与友盟+ iOS 应用集成方法,涵盖手动集成、权限配置、SDK 初始化、日志查看及效果验证。提供依赖库添加、Info.plist 权限声明、channel 规范、demo 工程下载与运行说明,助您快速完成接入。
222 1
|
存储 缓存 开发工具
开放平台:Parse for iOS
引言: Parse一款基于Baas的后端云存储服务平台,为开发者提供云端数据存储和读取的能力,Parse团队在其SDK方面花费了大功夫,实现了很多非常有用的功能.
1443 0
|
API 开发工具 iOS开发
开放平台:微信 for iOS
按照常例,列一些网址先: 微信开放平台首页: http://open.weixin.qq.com 微信 iOS SDK 官方下载地址: http://open.
1336 0
|
API 开发工具 iOS开发
开放平台:新浪微博 for iOS
引言: 新浪微博几乎是把全平台数据的API接口都开放了出来,因此,很多优秀的第三方微博客户端在功能方面都非常的全面. 而通过SNS的分享推广方式在App世界里已经非常的普遍,甚至随处可见,本篇主要介绍一下App是如何跟新浪微博关联的.
1592 0
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
736 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
11月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
441 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
366 66
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1361 11

热门文章

最新文章