iOS开发 - 百度地图的简单使用

本文介绍了如何使用百度地图iOS SDK实现基础地图展示、定位及POI检索等功能,并提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度地图 iOS SDK是一套基于iOS 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供POI检索、路径规划、地图标注、离线地图、定位、周边雷达等丰富的LBS能力 。

今天主要介绍以下接口

1.基础地图
2.POI检索
3.定位

首先配置环境

1.自动配置.framework形式开发包(使用CocoaPods)<推荐>
2.手动配置.framework形式开发包

特别注意:
(API里有很多注意点,大家可以具体去看.但是我说的后两点少其中一个都会失败,第一点是有需求的话,必须加上)
1、如果在iOS9中使用了调起百度地图客户端功能,必须在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>baidumap</string>
    </array>
2、自iOS SDK v2.5.0起,为了对iOS8的定位能力做兼容,需要在info.plist里添加(以下二选一,两个都添加默认使用 NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
3、在使用Xcode6进行SDK开发过程中,需要在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start fail
配置完成后

AppDelegate.m文件中添加对BMKMapManager的初始化,并填入申请的授权Key

#import "AppDelegate.h"
#import <BaiduMapAPI_Base/BMKMapManager.h>
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//创建并初始化一个引擎对象
    BMKMapManager *manager = [[BMKMapManager alloc] init];
//启动地图引擎
    BOOL success =  [manager start:@"zBWLNgRUrTp9CVb5Ez6gZpNebljmYylO" generalDelegate:nil];

    if (!success) {
        NSLog(@"失败");
    }
    // Override point for customization after application launch.
    return YES;
}
1.基础地图
#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
@interface ViewController ()<BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地图视图
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
     //初始化地图
    self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    self.mapView.delegate =self;
    //设置地图的显示样式
    self.mapView.mapType = BMKMapTypeSatellite;//卫星地图

    //设定地图是否打开路况图层
    self.mapView.trafficEnabled = YES;

    //底图poi标注
    self.mapView.showMapPoi = NO;

    //在手机上当前可使用的级别为3-21级
    self.mapView.zoomLevel = 21;

    //设定地图View能否支持旋转
    self.mapView.rotateEnabled = NO;

    //设定地图View能否支持用户移动地图
    self.mapView.scrollEnabled = NO;

    //添加到view上
    [self.view addSubview:self.mapView];

   //还有很多属性,根据需求查看API
}

运行效果入下;


基本.jpg
2.定位
#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
#import <BaiduMapAPI_Location/BMKLocationService.h>
@interface ViewController ()<BMKLocationServiceDelegate,BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地图视图
@property (nonatomic,strong) BMKLocationService *service;//定位服务

@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];

     //初始化地图
    self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    self.mapView.delegate =self;

    //添加到view上
    [self.view addSubview:self.mapView];

    //初始化定位
    self.service = [[BMKLocationService alloc] init];

    //设置代理
    self.service.delegate = self;

    //开启定位
    [self.service startUserLocationService];


    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------BMKLocationServiceDelegate 

/**
 *用户位置更新后,会调用此函数
 *@param userLocation 新的用户位置
 */
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {


    //展示定位
    self.mapView.showsUserLocation = YES;

    //更新位置数据
    [self.mapView updateLocationData:userLocation];

    //获取用户的坐标
     self.mapView.centerCoordinate = userLocation.location.coordinate;

     self.mapView.zoomLevel =18;

}

运行结果


定位.jpg
POI检索
#import "ViewController.h"
#import <BaiduMapAPI_Map/BMKMapView.h>
#import <BaiduMapAPI_Location/BMKLocationService.h>
#import <BaiduMapAPI_Search/BMKPoiSearch.h>
#import <BaiduMapAPI_Map/BMKAnnotation.h>
#import <BaiduMapAPI_Map/BMKPointAnnotation.h>
#import <BaiduMapAPI_Map/BMKPinAnnotationView.h>


#define kWidth [UIScreen mainScreen].bounds.size.width
@interface ViewController ()<BMKLocationServiceDelegate,BMKPoiSearchDelegate,BMKMapViewDelegate>

@property (nonatomic,strong) BMKMapView *mapView;//地图视图
@property (nonatomic,strong) BMKLocationService *service;//定位服务
@property (nonatomic,strong) BMKPoiSearch *poiSearch;//搜索服务

@property (nonatomic,strong) NSMutableArray *dataArray;
@end

@implementation ViewController

- (NSMutableArray *)dataArray {
    if (!_dataArray) {
        _dataArray = [NSMutableArray array];

    }
    return _dataArray;

}
- (void)viewDidLoad {
    [super viewDidLoad];

    //初始化地图
    self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
    self.mapView.delegate =self;
//    //设置地图的显示样式
//    self.mapView.mapType = BMKMapTypeSatellite;//卫星地图
//    
//    //设置路况
//    self.mapView.trafficEnabled = YES;
//    
//    //底图poi标注
//    self.mapView.showMapPoi = NO;
//    
//    //在手机上当前可使用的级别为3-21级
//    self.mapView.zoomLevel = 21;
//    
//    //旋转
//    self.mapView.rotateEnabled = NO;
//    
//    //拖拽
//    self.mapView.scrollEnabled = NO;
//    

    [self.view addSubview:self.mapView];

    //初始化定位
    self.service = [[BMKLocationService alloc] init];

    //设置代理
    self.service.delegate = self;

    //开启定位
    [self.service startUserLocationService];


    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark -------BMKLocationServiceDelegate 


/**
 *用户位置更新后,会调用此函数
 *@param userLocation 新的用户位置
 */
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {


    //展示定位
    self.mapView.showsUserLocation = YES;

    //更新位置数据
    [self.mapView updateLocationData:userLocation];

    //获取用户的坐标
     self.mapView.centerCoordinate = userLocation.location.coordinate;

     self.mapView.zoomLevel =18;



    //初始化搜索
    self.poiSearch =[[BMKPoiSearch alloc] init];


    self.poiSearch.delegate = self;



    //初始化一个周边云检索对象
    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc] init];

    //索引 默认为0
    option.pageIndex = 0;

    //页数默认为10
    option.pageCapacity = 50;

    //搜索半径
    option.radius = 200;

    //检索的中心点,经纬度
    option.location = userLocation.location.coordinate;

    //搜索的关键字
    option.keyword = @"小吃";



     //根据中心点、半径和检索词发起周边检索
    BOOL flag = [self.poiSearch poiSearchNearBy:option];
    if (flag) {
        NSLog(@"搜索成功");
        //关闭定位
        [self.service stopUserLocationService];
    }
    else {

        NSLog(@"搜索失败");
    }

}


#pragma mark -------BMKPoiSearchDelegate
/**
 *返回POI搜索结果
 *@param searcher 搜索对象
 *@param poiResult 搜索结果列表
 *@param errorCode 错误号,@see BMKSearchErrorCode
 */
- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {

     //若搜索成功
    if (errorCode ==BMK_SEARCH_NO_ERROR) {

        //POI信息类
        //poi列表
        for (BMKPoiInfo *info in poiResult.poiInfoList) {

            [self.dataArray addObject:info];

            //初始化一个点的注释 //只有三个属性
            BMKPointAnnotation *annotoation = [[BMKPointAnnotation alloc] init];

            //坐标
            annotoation.coordinate = info.pt;

            //title
            annotoation.title = info.name;

            //子标题
            annotoation.subtitle = info.address;

            //将标注添加到地图上
            [self.mapView addAnnotation:annotoation];
        }
    }


}

/**
 *返回POI详情搜索结果
 *@param searcher 搜索对象
 *@param poiDetailResult 详情搜索结果
 *@param errorCode 错误号,@see BMKSearchErrorCode
 */
- (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {

    NSLog(@"%@",poiDetailResult.name);

}


#pragma mark -------------BMKMapViewDelegate

/**
 *根据anntation生成对应的View
 *@param mapView 地图View
 *@param annotation 指定的标注
 *@return 生成的标注View
 */
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {

    //如果是注释点
    if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {

        //根据注释点,创建并初始化注释点视图
        BMKPinAnnotationView  *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"];

        //设置大头针的颜色
        newAnnotation.pinColor = BMKPinAnnotationColorRed;

        //设置动画
        newAnnotation.animatesDrop = YES;

        return newAnnotation;

    }

    return nil;
}
/**
 *当选中一个annotation views时,调用此接口
 *@param mapView 地图View
 *@param views 选中的annotation views
 */
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view {

    //poi详情检索信息类
    BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init];


    BMKPoiInfo *info = self.dataArray.firstObject;

    //poi的uid,从poi检索返回的BMKPoiResult结构中获取
    option.poiUid = info.uid;

    /**
     *根据poi uid 发起poi详情检索
     *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiDetailResult通知
     *@param option poi详情检索参数类(BMKPoiDetailSearchOption)
     *@return 成功返回YES,否则返回NO
     */
    BOOL flag = [self.poiSearch poiDetailSearch:option];

    if (flag) {
        NSLog(@"检索成功");
    }
    else {

        NSLog(@"检索失败");
    }



}

运行结果


搜索.jpg
电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值