iOS地图集成示例:百度地图POI检索

一、集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤)

1、登录  http://lbsyun.baidu.com  百度地图开发者平台,获取SDK和集成文档。

2、百度地图可以提供的一些服务

(1)地图:提供地图展示和地图操作功能;

(2)POI检索:支持周边检索、区域检索和城市内兴趣点检索;

(3)地理编码:提供经纬度和地址信息相互转化的功能接口;

(4)线路规划:支持公交、驾车、步行、骑行,四种方式的线路规划;

(5)覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息;

(6)定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式);

(7)离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果;

(8)调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能;

(9)周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能;

(10)LBS云检索:支持查询存储在LBS云内的自有数据;

(11)瓦片图层: 支持在地图上添加自有瓦片数据。

(12)特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用;

2、创建应用,获得AppKey (密钥)

(1)这里需要以开发者身份获得key

(2)注意和Bundle Identifier的绑定

3、配置集成前的注意事项

(1)严格参考文档!

(2)几个注意点

  <1> iOS9.0之后,要在Info.plist配置ATS

  <2> 在Info.plist配置 百度地图应用的白名单(支持在自己的应用中打开百度地图)

  <3> 管理地图的生命周期(手动将代理置空)

  <4>在Info.plist中添加获取定位授权的提醒

     NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述

      NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述

4、配置开发环境

(1)添加百度的静态库(.framework)

(2)导入一大堆的系统库

(3)添加地图包(mapapi.bundle资源文件)

(4)引入所有的头文件

5、初始化地图

(1)初始化BMKMapManager

(2)创建BMKMapView

6、基础地图

(1)参阅文档!http://lbsyun.baidu.com/index.php?title=iossdk/guide/basicmap

(2)一些功能的了解

  <1>地图类型:普通矢量地图、卫星图和空白地图(节省流量)

  <2>打开实时路况图层

  <3>热力地图

  <4>手势、地图控制、底标、折线(几何图形的遮盖)

  <5>设置地图显示范围

<6> 等等等。。。

二、百度地图POI检索

#import "ViewController.h"
@interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate>
@property(nonatomic,weak)BMKMapView * mapView;
@property(nonatomic,weak)UITextField * tf;
@property(nonatomic,strong)BMKPoiSearch * poisearch;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //设置地图
    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    self.mapView = mapView;
    [self.view addSubview:mapView];

    //设置开始查找按钮和输入文本框
    UIButton * btn = [[UIButton alloc]initWithFrame:CGRectMake(30, 30, 100, 30)];
    [btn setTitle:@"开始查找" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
    [btn setBackgroundColor:[UIColor orangeColor]];
    [self.view addSubview:btn];

    UITextField * tf = [[UITextField alloc]initWithFrame:CGRectMake(150, 30, 100, 30)];
    self.tf= tf;
    tf.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:tf];

    //实例POI检索化检索对象,并设置代理

    self.poisearch = [[BMKPoiSearch alloc]init];
    self.poisearch.delegate = self;

}

-(void)btnClick :(UIButton *)btn
{

    //检索参数
    BMKCitySearchOption *citySearchOption = [[BMKCitySearchOption alloc]init];
    citySearchOption.pageIndex = 0; //当前页码
    citySearchOption.pageCapacity = 20; //每页个数
    citySearchOption.city= @"北京"; //城市
    citySearchOption.keyword = self.tf.text; //关键字 酒店

    //根据检索参数,进行检索,并返回检索结果的标识
    BOOL flag = [_poisearch poiSearchInCity:citySearchOption];
    if(flag)
    {
        NSLog(@"城市内检索发送成功");
    }
    else
    {
        NSLog(@"城市内检索发送失败");
    }
}

#pragma mark implement BMKSearchDelegate
- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult*)result errorCode:(BMKSearchErrorCode)error
{
    // 清除屏幕中所有的annotation
    NSArray* array = [NSArray arrayWithArray:_mapView.annotations];
    [_mapView removeAnnotations:array];
    //正确
    if (error == BMK_SEARCH_NO_ERROR) {
        NSMutableArray *annotations = [NSMutableArray array];
        //遍历返回的查询结果
        for (int i = 0; i < result.poiInfoList.count; i++) {
            BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];
            BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];
            item.coordinate = poi.pt;
            item.title = poi.name;
            [annotations addObject:item];
        }

        //给地图添加大头针模型
        [_mapView addAnnotations:annotations];
        [_mapView showAnnotations:annotations animated:YES];

    } else if (error == BMK_SEARCH_AMBIGUOUS_ROURE_ADDR){
        NSLog(@"起始点有歧义");
    } else {
        // 各种情况的判断。。。
    }
}

#pragma mark implement BMKMapViewDelegate

/**
 *根据anntation生成对应的View
 *@param mapView 地图View
 *@param annotation 指定的标注
 *@return 生成的标注View
 */
- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation
{
    // 生成重用标示identifier
    NSString *AnnotationViewID = @"xidanMark";

    // 检查是否有重用的缓存
    BMKAnnotationView* annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    // 缓存没有,自己构造一个,一般首次添加annotation代码会运行到此处
    if (annotationView == nil) {
        annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
        ((BMKPinAnnotationView*)annotationView).pinColor = BMKPinAnnotationColorRed;
        // 设置重天上掉下的效果(annotation)
        ((BMKPinAnnotationView*)annotationView).animatesDrop = YES;
    }

    // 设置位置
    annotationView.centerOffset = CGPointMake(0, -(annotationView.frame.size.height * 0.5));
    annotationView.annotation = annotation;
    // 单击弹出泡泡,弹出泡泡前提annotation必须实现title属性
    annotationView.canShowCallout = YES;
    // 设置是否可以拖拽
    annotationView.draggable = NO;

    return annotationView;
}

-(void)viewWillAppear:(BOOL)animated
{
    [_mapView viewWillAppear];
    _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(void)viewWillDisappear:(BOOL)animated
{
    [_mapView viewWillDisappear];
    _mapView.delegate = nil; // 不用时,置nil
}

@end
时间: 2024-10-07 22:00:16

iOS地图集成示例:百度地图POI检索的相关文章

IOS开发笔记-百度地图(第三方库)

最近做了百度地图,在导入SDK后遇到了一些问题 编译错误: linker command failed with exit code 1 (use -v to see invocation) 想了很多办法,查了很多资料,最后终于解决. 可能原因: 1. 有重复的.m文件,或者未导入 解决办法:有重复的删除即可 在工作左边导航栏Target-->Build Phases-->compile Sources中,第三库库的所有.m文件都添加到里面 2.Valid Architectures 的值 在

微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法

原文:微信开发之附近商家地理位置计算和腾讯地图坐标转百度地图坐标的方法 腾讯地图坐标转百度坐标 案例:本次开发的系统是一个商家联盟积分系统.在全国各地都有商家联盟的网点. 要求实现的功能 a.微信粉丝通过微信号就能查看附近的商家 b.我的联盟系统统计在2公里之内的商家网点 c.并标出商家和粉丝位置的距离是多少米. d.在商家的详细介绍页面设置百度地图接入步行.公交.驾车一键导航功能 那么现在问题来了: 问题1:在做微信O2O开发的过程中,通过微信地理位置功能事件获得的是腾讯地图坐标.而我们的导航

网页嵌入百度地图和使用百度地图api自定义地图的详细步骤

在网页中插入百度地图 如果想在自己的网页上面加入百度地图的话,可以用百度地图的api.具体使用方法如下: 第一步:进入百度创建地图的网站http://api.map.baidu.com/lbsapi/creatmap/,搜索出自己要展示的位置,如下图所示. 第二步:设置地图,大家可以对网站显示地图的宽高进行设置,其余选项不动. 第三步:添加标注.点击第一个图标后,在右侧找到自己的位置,单击鼠标左键可定位.标记图标处可更换图标形状,名称和备注填入位置相关信息. 第四步:获取代码.将代码贴到你的网页

iOS将简单的百度地图SDK集成到项目中

最近在玩百度地图API,期间遇到很多问题,只能说明我蠢.现在一一记录下来,以后用到可以回来复习一下. 下载iOS的SDK,下载地址为:http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 新建工程,获取 Bundle identifier,比如:com.winson.test.cstest  注意灰色的cstest,是要手写进去的(very important): 回到百度地图API首页,如果你还不是开发

iOS判断并使用百度地图 高德地图 导航 (使用URI,不集成sdk)

[objc] view plaincopy  1. BOOL hasBaiduMap = NO;   2.         BOOL hasGaodeMap = NO;   3.            4.         if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]){   5.             hasBaiduMap = YES;   6.

ios之苹果和百度地图的使用

iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是百度.苹果自带地图(高德),以下总结下这两个. 一.苹果地图的使用 因为苹果使用的是高德的地图,加上苹果做的一些封装,使用起来也非常方便.不需要引入第三方框架,相比较之下,使用百度地图SDK会使源码与程序都 大10M多,这点很蛋疼.同时由于苹果使用的是高德,不会像谷歌地图一样在国内乌龟一样的访问速度

iOS成长之路 百度地图

使用cocospod导入百度地图  详情见文档 使用 百度地图 需要获取密钥 2 配置 项目 info中 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>保证网络可用 <key>LSApplicationQueriesSchemes</key> <array>

iOS开发之引用百度地图SDK(二)

关于引用百度SDK添加到项目工程中,需要注意的事项 1.申请Key(密钥)时,在应用类型中选择iOS SDK,并提供项目的Bundle Identifier. 2.在targets项的info中,需要添加key的name为Bundle display name并且value不能为null. 3.在AppDelegate类的程序入口出,需要注册申请的key,用于检测授权成功.(失败将显示不到百度地图) _mapManager = [[BMKMapManager alloc]init]; BOOL

IOS百度地图开发系列-百度地图不能正常显示

有时候我们使用百度地图的时候,会产生这样的问题(如上图) 问题的关键在于 我们申请的 百度地图key的安全码 与我们的项目中的 Bundle Identifier 的value不相符. 所以会出现地图只显示灰色网格而没有地图的情况 解决办法:使两者的值为同一个 项目中,info.plist文件设置 百度地图key设置界面 由此,百度地图就正常显示了. 如果此时还是不能正常显示的话,正在使用wifi的童鞋,不妨在3G下运行项目试试. 在这里,提醒以前就已经申请key,并且现在准备使用它的童鞋们,k