java模拟器2.3 百度地图_百度地图集成
1.申请密钥(key)
第一步:打开API控制台,如下图所示:
第二步:点击创建应用,开始申请开发密钥,如下图:
第三步:填写应用名称、应用类型注意选择“iOS SDK”、正确填写安全码,点击确认,系统将会自动帮您生成相应的开发密钥:
安全码简介
在申请开发密钥的时候,需要填写对应工程的安全码。这里的安全码指的是该应用的Bundle Identifier,获取方式如下: Xcode切换到Summary标签查看Bundle Identifier
如下图示:
2.注意事项
1.1 工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm)
1.2 在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"
2 在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build Setting -> Other Linker Flags中添加-ObjC
3 导入第三方openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)
4 在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。
5 管理地图的生命周期
-(void)viewWillAppear:(BOOL)animated
{
[_mapView viewWillAppear];
_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(void)viewWillDisappear:(BOOL)animated
{
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用时,置nil
}
6.在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):
7.在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed)
8.项目中添加mapapi.bundle文件以及添加方法正确
3配置环境
第一步、根据需要导入 .framework包
在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI_**.framework添加到工程中。
第二步、引入所需的系统库
CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework、libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib)、CoreTelephony.framework 、libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib)。
添加方式: 在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。
第三步、引入所需的第三方openssl库:
添加支持HTTPS所需的penssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)
添加方法: 在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中
第四步、环境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
第五步、引入mapapi.bundle资源文件
方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
第六步、引入头文件在使用SDK的类
按需 引入下边的头文件:
4.集成百度地图的导航功能
1: 在使用该套SDK之前,需先申请密钥(ak)才可使用,接口(除发送短信功能外)无使用次数限制。
2iOS导航SDK资源包
3.将SDK和Framework添加进工程
baiduNaviSDK文件夹添加到工程中,把AudioToolbox.framework、ImageIO.framework、CoreMotion.framework、CoreLocation.framework、CoreTelephony.framework、MediaPlayer.framework、AVFoundation.framework、SystemConfiguration.framework、JavaScriptCore.framework、Security.framework 、OpenGLES.framework 、GLKit.framework 、libstdc++6.0.9.dylib、libc++.tbd、libsqlite3.0.tbd、libz.1.2.5.tbd这几个framework添加到工程中
4.修改Build Settings设置项
在Build Settings中, “Other Linker Flags”添加“-ObjC” 标识
5.配置.plist文件
5.appdelegate写入一下代码
#import//引入地图功能所有的头文件#import "BNCoreServices.h"@interface AppDelegate ()//百度地图管理者
@property(nonatomic,strong) BMKMapManager *mapManager;
@end
@implementation AppDelegate
//懒加载
-(BMKMapManager *)mapManager
{
if (_mapManager==nil){
_mapManager=[[BMKMapManager alloc] init];
}
return _mapManager;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// 要使用百度地图,请先启动BaiduMapManager
BOOL flag = [self.mapManager start:@"v67SHkNTcSjiKvGoOhBC95m5haIm6bRz" generalDelegate:self];
if (flag == NO) {
NSLog(@"manager start failed!");
}
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
ViewController *vc =[[ViewController alloc] init];
vc.view.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
// 初始化导航SDK
/* TTS授权失败
1.不能使用模拟器
2.项目名称不能为中文(工程->build Setting-> product name)
3.必须开启语音播报功能(添加到一个白名单中)
崩溃原因 View controller-based status bar appearance 设置为NO
*/
[[BNCoreServices GetInstance] initServices:@"v67SHkNTcSjiKvGoOhBC95m5haIm6bRz"];
[[BNCoreServices GetInstance] startServicesAsyn:nil fail:nil];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
[BMKMapView willBackGround];//当应用即将后台时调用,停止一切调用opengl相关的操作
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[BMKMapView didForeGround];//当应用恢复前台状态时调用,回复地图的渲染和opengl相关的操作
}
@end
6 在调用百度map中使用
#import//引入计算工具所有的头文件#import#import "FAITHBaiDuMapTool.h"@interface ViewController ()/* 地图视图 */@property(nonatomic,weak) BMKMapView *mapView;/* 定位服务 */@property(nonatomic,strong) BMKLocationService *locService ;/* 定位服务 */@property(nonatomic,strong) BMKUserLocation *userLocation ;@end@implementation ViewController-(BMKLocationService *)locService{ if (_locService == nil) { //初始化BMKLocationService _locService = [[BMKLocationService alloc]init]; _locService.delegate = self; //启动LocationService [_locService startUserLocationService]; } return _locService;}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. BMKMapView *mapView = [[BMKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds]; [self.view addSubview:mapView]; self.mapView = mapView; [self locService]; _mapView.showsUserLocation = NO; _mapView.userTrackingMode = BMKUserTrackingModeFollow; _mapView.showsUserLocation = YES; }-(void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放 _locService.delegate = self;}-(void)viewWillDisappear:(BOOL)animated { [_mapView viewWillDisappear]; _mapView.delegate = nil; // 不用时,置nil _locService.delegate = nil;}/** *在地图View将要启动定位时,会调用此函数 *@param mapView 地图View */- (void)willStartLocatingUser{ NSLog(@"start locate");}/** *用户方向更新后,会调用此函数 *@param userLocation 新的用户位置 */- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation{ [_mapView updateLocationData:userLocation];}/** *用户位置更新后,会调用此函数 *@param userLocation 新的用户位置 */- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{ self.userLocation = userLocation; [_mapView updateLocationData:userLocation]; //设置区域 BMKCoordinateRegion region = BMKCoordinateRegionMake(userLocation.location.coordinate, BMKCoordinateSpanMake(0.01, 0.01)); [_mapView setRegion:region];}/** *在地图View停止定位后,会调用此函数 *@param mapView 地图View */- (void)didStopLocatingUser{ NSLog(@"stop locate");}/** *定位失败后,会调用此函数 *@param mapView 地图View *@param error 错误号,参考CLError.h中定义的错误号 */- (void)didFailToLocateUserWithError:(NSError *)error{ NSLog(@"location error");}- (void)dealloc { if (_mapView) { _mapView = nil; }}/// 长按地图的时候会来到该方法// - Parameters:/// - mapView: 地图视图/// - coordinate: 点击的经纬度-(void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate{ //进行POI检索 [[FAITHBaiDuMapTool shareInstance] poiSearchWithLocation:coordinate keyword:@"酒店" resultBlock:^(BMKPoiInfo *poiInfos, NSString *error) { if (error != nil) { return ; } for (BMKPoiInfo *poiInfo in poiInfos) { //添加一个PointAnnotation BMKPointAnnotation *annotation = [[BMKPointAnnotation alloc] init]; annotation.coordinate = poiInfo.pt;//该点POI的坐标 annotation.title = poiInfo.name;//该点POI的名称 annotation.subtitle = poiInfo.address;//该点POI的地址 [mapView addAnnotation:annotation]; } }]; //设置区域 BMKCoordinateRegion region = BMKCoordinateRegionMake(coordinate, BMKCoordinateSpanMake(0.05, 0.05)); [mapView setRegion:region]; }/// 当添加一个大头针数据模型的时候,会来到该方法,创建对应的大头针视图并返回// - Parameters:/// - mapView: 地图视图/// - annotation: 大头针数据模型/// - Returns: 大头针视图-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id)annotation
{
if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
BMKPinAnnotationView *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"newAnnotation"];
newAnnotation.pinColor = BMKPinAnnotationColorPurple;
newAnnotation.animatesDrop = YES;
return newAnnotation;
}
return nil;
}
/// 当点击大头针上面的弹框的时候就会来到该方法
///
/// - Parameters:
/// - mapView: 地图视图
/// - view: 大头针视图
-(void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view
{
[[FAITHBaiDuMapTool shareInstance] startNavigationWithView:view userLocation:self.userLocation];
}
FAITHBaiDu地图工具类
#import#import//引入地图功能所有的头文件#import//引入检索功能所有的头文件
@interface FAITHBaiDuMapTool : NSObject
/*
单例模式
*/
+(instancetype)shareInstance;
/*
POI周边检索
*/
-(void)poiSearchWithLocation:(CLLocationCoordinate2D)location keyword:(NSString *)keyword resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock;
/*
POI详情检索
*/
-(void)poiDeatilSearchWithLocation:(CLLocationCoordinate2D)location poiUid:(NSString *)poiUid resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock;
/*
导航
*/
-(void)startNavigationWithView:(BMKAnnotationView *)view userLocation:(BMKUserLocation *)userLocation;
@end
#import "FAITHBaiDuMapTool.h"#import "BNCoreServices.h"@interface FAITHBaiDuMapTool ()@property(nonatomic,strong) BMKPoiSearch *poiSearch;
//block
@property(nonatomic,strong) void(^resultBlock) (BMKPoiInfo *,NSString *);
@end
@implementation FAITHBaiDuMapTool
static FAITHBaiDuMapTool *_instance = nil ;
+(instancetype)shareInstance
{
FAITHBaiDuMapTool *_instance = [[self alloc] init];
return _instance;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[super allocWithZone:zone] init];
});
return _instance;
}
- (id)copyWithZone:(NSZone *)zone{
return _instance;
}
- (id)mutableCopyWithZone:(NSZone *)zone
{
return _instance;
}
//懒加载:设置检索对象
-(BMKPoiSearch *)poiSearch
{
if (_poiSearch == nil) {
_poiSearch = [[BMKPoiSearch alloc] init];
_poiSearch.delegate = self;
}
return _poiSearch;
}
/**
检索周边的POI
*/
-(void)poiSearchWithLocation:(CLLocationCoordinate2D)location keyword:(NSString *)keyword resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock {
self.resultBlock = resultBlock;
//POI检索-发起检索
BMKNearbySearchOption *nearbySearchOption = [[BMKNearbySearchOption alloc] init];
nearbySearchOption.pageIndex = 0;//检索页
nearbySearchOption.pageCapacity = 20;//检索数量
nearbySearchOption.location = location;//从介个经纬度坐标开始周边搜索
nearbySearchOption.keyword = keyword;//检索关键字
//开始检索
BOOL flag = [self.poiSearch poiSearchNearBy:nearbySearchOption];
if (flag) {
NSLog(@"周边检索发送成功");
}else
{
NSLog(@"周边检索发送失败");
}
}
/**
检索详情的POI
*/
-(void)poiDeatilSearchWithLocation:(CLLocationCoordinate2D)location poiUid:(NSString *)poiUid resultBlock:(void (^)(BMKPoiInfo *,NSString *))resultBlock {
self.resultBlock = resultBlock;
//POI详情检索
BMKPoiDetailSearchOption* poiDeatilSearchOption = [[BMKPoiDetailSearchOption alloc] init];
poiDeatilSearchOption.poiUid = poiUid;//POI搜索结果中获取的uid
BOOL flag = [_poiSearch poiDetailSearch:poiDeatilSearchOption];
if(flag)
{
//详情检索发起成功
}
else
{
//详情检索发送失败
}
}
// MARK:- 导航
/// 开始导航
/// - Parameter view: 大头针视图
-(void)startNavigationWithView:(BMKAnnotationView *)view userLocation:(BMKUserLocation *)userLocation
{
//实现导航功能
//节点数组
NSMutableArray *nodesArray = [NSMutableArray array];
//起点
BNRoutePlanNode *startNode = [[BNRoutePlanNode alloc] init];
startNode.pos = [[BNPosition alloc] init];//起点位置对象
startNode.pos.x = userLocation.location.coordinate.longitude;//经度
startNode.pos.y = userLocation.location.coordinate.latitude;//纬度;
startNode.pos.eType = BNCoordinate_BaiduMapSDK;//坐标类型
[nodesArray addObject:startNode];
//终点
BNRoutePlanNode *endNode = [[BNRoutePlanNode alloc] init];
endNode.pos = [[BNPosition alloc] init];//终点位置
endNode.pos.x = view.annotation.coordinate.longitude;//经度
endNode.pos.y = view.annotation.coordinate.latitude;//纬度;
endNode.pos.eType = BNCoordinate_BaiduMapSDK;
[nodesArray addObject:endNode];
//发起路径规划
//算路方式,定义见BNRoutePlanMode
//naviNodes:算路节点数组,起点、途经点、终点按顺序排列,节点信息为BNRoutePlanNode结构
//naviTime:发起算路时间,用于优化算路结果,可以为nil
//delegate:算路委托,用于回调
//userInfo:用户需要传入的参数
[[BNCoreServices RoutePlanService] startNaviRoutePlan:BNRoutePlanMode_Recommend naviNodes:nodesArray time:nil delegete:self userInfo:nil];
}
// MARK: - BNNaviRoutePlanDelegate
//算路成功回调
-(void)routePlanDidFinished:(NSDictionary *)userInfo
{
[[BNCoreServices UIService] showPage:BNaviUI_NormalNavi delegate:self extParams:nil];
}
//算路失败回调
- (void)routePlanDidFailedWithError:(NSError *)error andUserInfo:(NSDictionary *)userInfo
{
NSLog(@"算路失败");
switch ([error code]%10000)
{
case BNAVI_ROUTEPLAN_ERROR_LOCATIONFAILED:
NSLog(@"暂时无法获取您的位置,请稍后重试");
break;
case BNAVI_ROUTEPLAN_ERROR_ROUTEPLANFAILED:
NSLog(@"无法发起导航");
break;
case BNAVI_ROUTEPLAN_ERROR_LOCATIONSERVICECLOSED:
NSLog(@"定位服务未开启,请到系统设置中打开定位服务。");
break;
case BNAVI_ROUTEPLAN_ERROR_NODESTOONEAR:
NSLog(@"起终点距离起终点太近");
break;
default:
NSLog(@"算路失败");
break;
} }
//算路取消
-(void)routePlanDidUserCanceled:(NSDictionary*)userInfo {
NSLog(@"算路取消");
}
// MARK: - BNNaviUIManagerDelegate
-(void)onExitPage:(BNaviUIType)pageType extraInfo:(NSDictionary *)extraInfo
{
NSLog(@"退出导航页面");
}
// MARK: - BMKPoiSearchDelegate
/*
周边检索监听结果
*/
-(void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode
{
if(errorCode == BMK_SEARCH_NO_ERROR) {
NSLog(@"检索到了");//处理正常的结果
BMKPoiInfo *poiInfos = (BMKPoiInfo *)poiResult.poiInfoList;
//回调
self.resultBlock(poiInfos,nil);
}else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD){
//当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
// result.cityList;
self.resultBlock(nil,@"起始点有歧义");
}else{
self.resultBlock(nil,@"抱歉没找到结果");
}
}
/*
详细检索监听结果
*/
-(void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode
{
if(errorCode == BMK_SEARCH_NO_ERROR){
NSLog(@"检索到了");//处理正常的结果
}else if (errorCode == BMK_SEARCH_AMBIGUOUS_KEYWORD){
//当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
// result.cityList;
// self.resultBlock(nil,@"起始点有歧义");
}else{
// self.resultBlock(nil,@"抱歉没找到结果");
}
}
@end
java模拟器2.3 百度地图_百度地图集成相关推荐
- 基于android的百度地图_百度的71个炸天的开源项目
本文为大家整理了百度开源的70+项目,看看有没有感兴趣的. 1.JavaScript图表库 ECharts ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Ja ...
- 百度离线地图_这个地图APP,专注于地图软件该做的事!
Bmap Bmap,简单的双地图应用.可任意切换/高德地图数据源,致力满足日常生活的出行需求.具有步行.公交.骑行.驾驶等出行方案,查看街景. 新版特性 1.升级百度地图sdk6.0.0 2.升级高德 ...
- 地图上分成一块一块区域 高德地图_各种地图(如百度地图、腾讯地图和高德地图)体验上有什么区别?...
文末有更新 ----------------------- 见图,来体验一下2015年12月7日的百度地图,我真是无话可说 我从来没有搜索过这种东西. 这问题我也@了客服,现在不知道还有没有. 呵呵, ...
- java模拟器游戏要钱吗_安卓java模拟器(安卓手机如何玩JAVA游戏以及JAVA软件的方法)...
首先最简单的方法就是JAVA模拟器,但是由于JAVA模拟器的兼容性并不是太好而导致部分(挺大部分的)机型无法使用.所以就有了第二个方法,那就是PSP模拟器,因为PSP上是有JAVA模拟器的,所以就可以 ...
- 高精地图_语义地图_众包地图相关论文笔记
1.20220618_LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping 2021 3d-Lidar构建long-term地 ...
- react 谷歌地图_谷歌地图与React
react 谷歌地图 情况(The Situation) Your working on a React-based application and you want to implement Goo ...
- java 经纬度 地图_百度地图地址经纬度互转,java代码(v2版本)
2个星期前用百度地图做了地址转换后.本来准备写个工具类添加到项目中突然发现不能用了,于是上百度地图api官网,发现接口已经更改了升级为v2,修改后可以使用,于是把工具类进行分享. 工具类:BaiDuM ...
- ios 点生成线路 百度地图_网站地图全面解析
网站地图相信大家都不陌生,但对于一些刚刚接触seo的小伙伴来说可能会有些疑惑.这段时间我也时常听到有学员说网站地图怎么去制作分析,搞得也是非常的头痛,现在就来带大家全面透析网站地图吧. 一.什么是网站 ...
- 百度地图显示服务器地址,百度地图_根据地图上标记位置获取街道信息,以及经纬度信息...
百度地图Demo var map = new BMap.Map("container");//初始化地图 map.addControl(new BMap.NavigationCon ...
最新文章
- selenium提取数据之driver对象定位标签元素获取标签对象的方法
- Java微信公众平台开发(四)--回复消息的分类及实体的创建
- html列表的列选择事件,html5 datalist 选中option选项后的触发事件
- 进程的创建-fork
- 数据结构与算法之快速排序
- Redis高可用基石--主从同步
- [APEC中小企业峰会2009上]成功企业 = 理想主义 + 现实主义
- 轻松筹 html模板,水滴筹、轻松筹感人标题模板25个字怎么写?在朋友圈发求捐款语录怎么写?...
- 周志华-深度森林(Deep Forest)
- android启用hdcp_如何在Android Auto上启用开发人员设置
- 约瑟夫环数学问题——举一反三、触类旁通
- 大数据技术方面需要哪些支持
- 给照片怎么拍板好看?
- 国际金融统计 (IFS) 数据库1978-2020
- PCF8591 +MQ3 +LCD1602+89C51RC(酒精传感器)
- 软件产品的增值税税率该如何选择?
- 2006年十二生肖开运大预言
- 字节跳动前端实习一面
- 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【01】小儿常见病
- word文档打不开显示内容有问题要怎么解决?