具体要参照百度地图开发指南完成
以下介绍部分BUG
/*
"_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:
解决方法:CoreTelephony.framework
"_SCNetworkReachabilityCreateWithAddress", referenced from:
解决方法:SystemConfiguration.framework
"std::terminate()", referenced from:
解决方法:.mm
.c C语言
.m C语言 / OC语言
.mm C语言 / OC语言 / C++语言
"_OBJC_CLASS_$_CLLocation", referenced from:
解决方法: CoreLocation.framework
manager start failed : info.plist 中必须添加 Bundle display name
解决方法:添加 Bundle display name 其值不能为空
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
CFNetwork SSLHandshake failed (-9824)
解决方法:在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
"std::string::compare(std::string const&) const", referenced from:
解决方法:libstdc++.6.0.9.tbd
地图所需资源文件不完整,请根据开发指南正确添加mapapi.bundle文件
解决方法:根据开发指南正确添加mapapi.bundle
"_sqlite3_bind_text16", referenced from:
解决方法:libsqlite3.0.tbd
"___cxa_pure_virtual", referenced from:、
解决方法: .mm
"_kCLErrorDomain", referenced from:
解决方法:CoreLocation
*/
代码部分
配置结束后再AppDelegate类里面进行授权操作
#import //引入base相关所有的头文件
#import //引入地图功能所有的头文件
#import //引入检索功能所有的头文件
#import //引入云检索功能所有的头文件
#import //引入定位功能所有的头文件
#import //引入计算工具所有的头文件
#import //引入周边雷达功能所有的头文件
#import //只引入所需的单个头文件
增加属性
@interface AppDelegate ()
{
BMKMapManager* _mapManager;
}
@end
授权操作
// 要使用百度地图,请先启动BaiduMapManager
_mapManager = [[BMKMapManager alloc]init];
// 如果要关注网络及授权验证事件,请设定 generalDelegate参数
BOOL ret = [_mapManager start:@"ZV9XSGWi6W0ykjRsw9BdIPAbUnycFWnC" generalDelegate:nil];
if (!ret) {
NSLog(@"manager start failed!");
}
授权完成之后再ViewController类里面进行操作 导入以上头文件
之后遵守协议和添加属性
@interface ViewController ()
{
BMKMapView *_mapView;
BMKPoiSearch *_searcher;
}
@end
自定义经纬度查地址
_mapView = [[BMKMapView alloc]init];
self.view = _mapView;
//切换为卫星图
// BMKMapTypeStandard 标准地图
[_mapView setMapType:BMKMapTypeStandard];
//打开实时路况图层
[_mapView setTrafficEnabled:YES];
//打开百度城市热力图图层(百度自有数据)
[_mapView setBaiduHeatMapEnabled:YES];
// 设定logo位置
_mapView.logoPosition = BMKLogoPositionCenterTop;
// 添加一个PointAnnotation
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
CLLocationCoordinate2D coor;
coor.latitude = 39.915;
coor.longitude = 116.404;
annotation.coordinate = coor;
annotation.title = @"这里是北京";
[_mapView addAnnotation:annotation];
//打开室内图
_mapView.baseIndoorMapEnabled = YES;
// 延时调用poiSearch
[self performSelector:@selector(poiSearch) withObject:nil afterDelay:5.0];
/// 地图比例尺级别,在手机上当前可使用的级别为3-21级
_mapView.zoomLevel = 17;
延迟调用poiSearch 方法中实现的是 输入关键字检索周边
//初始化检索对象
_searcher =[[BMKPoiSearch alloc]init];
_searcher.delegate = self;
//发起检索
BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
option.pageIndex = 0;
option.pageCapacity = 10;
option.location = CLLocationCoordinate2DMake(39.915, 116.404);
option.keyword = @"小吃";
BOOL flag = [_searcher poiSearchNearBy:option];
if(flag)
{
NSLog(@"周边检索发送成功");
}
else
{
NSLog(@"周边检索发送失败");
}
实现PoiSearchDeleage处理回调结果
- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error
{
if (error == BMK_SEARCH_NO_ERROR) {
//在此处理正常结果
for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) {
// 添加一个PointAnnotation
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
annotation.coordinate = poiInfo.pt;
annotation.title = poiInfo.name;
[_mapView addAnnotation:annotation];
}
}
else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){
//当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
// result.cityList;
NSLog(@"起始点有歧义");
} else {
NSLog(@"抱歉,未找到结果");
NSLog(@"%d",error);
}
}
这是自定义设置大头针
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id )annotation
{
if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
newAnnotationView.pinColor = BMKPinAnnotationColorPurple;
newAnnotationView.animatesDrop = YES;// 设置该标注点动画显示
return newAnnotationView;
}
return nil;
}
设置代理
- (void)viewWillAppear:(BOOL)animated
{
[_mapView viewWillAppear];
_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
- (void)viewWillDisappear:(BOOL)animated
{
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用时,置nil
_searcher.delegate = nil;
}