一、显示地图配置
这里配置就不多做解释了swift配置老是弄不好,但是利用OC编写百度地图在导包上比较方便,遂看了三天OC的编码习惯,然后用OC进行百度地图的编写了,因为百度地图的包是用OC编写的,所以用OC导报比较方便。亲测非常方便,具体配置我就不多做解释了,自己百度吧。(swift导包搞了2天多都没搞好,用OC半个小时就OK)。Xcode已经把我这个java程序员逼疯无数次。
二、显示地图
直接上显示地图的全部代码。
#import "ViewController.h"
#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件
#import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件
#import "DHWL-Swift.h" //这个我要调用swift类中定义的一个全局变量加的与百度地图无关
@interface ViewController ()<BMKMapViewDelegate>
@property (nonatomic, strong) BMKMapView *mapView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds];
// for(DataStatistics *data in LongitudeLatitudeList.getLongitudeLatitudeList.DataStatisticsList){
//
// NSLog(@"%d",)
// }
//便利元素为地图循环进行标点
for(int i=0;i<LongitudeLatitudeList.getLongitudeLatitudeList.DataStatisticsList.count;i++){
BMKLocationViewDisplayParam *displayParam = [BMKLocationViewDisplayParam new];
displayParam.locationViewImgName = @"pin_green";
DataStatistics *data = LongitudeLatitudeList.getLongitudeLatitudeList.DataStatisticsList[i];
BMKPointAnnotation *annotation = [[BMKPointAnnotation alloc] init];
annotation.coordinate = CLLocationCoordinate2DMake(data.getlatitude, data.getlongitude);
//添加气泡文本
annotation.title = @"到这去";
[_mapView addAnnotation:annotation];
BMKAnnotationView *annotationView = [_mapView viewForAnnotation:annotation];
//为每个标记的tag进行赋值来来用于导航时获取经纬度 因为我经纬度是放在集合中所以为每个标点设置当前集合的下标直接通过下表找就可以了
annotationView.tag = i;
//判断值显示不同颜色的标记
if( data.getblockagedegree <20.0 && data.getblockagedegree >0){
//根据条件更换标点图片此图片都是百度地图自带的
annotationView.image=[UIImage imageNamed:@"pin_green.png"];
}
}
//设置初始化显示区域
CLLocationCoordinate2D coor;
coor.latitude = 24.8008427;
coor.longitude = 118.599943;
[_mapView setCenterCoordinate:coor animated:YES];
//显示的地图大小
[_mapView setZoomLevel:13];
_mapView.delegate = self;
self.view=_mapView;
}
-(void) mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view{
NSLog(@"paopaoclick_tag:%d",view.tag);
//传入经纬度页面来进行跳转 // 判断是否安装了百度地图如果未安装提示
if ( [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]])
{
printf("准备跳转");
//获取标点的tag(就是上方annotationView.tag = i; 这个所设置的当前标点的下标找到对应的下标对象) 传入url来进行跳转百度地图进行导航
DataStatistics *data = LongitudeLatitudeList.getLongitudeLatitudeList.DataStatisticsList[view.tag];
NSString *urlString = [[NSString stringWithFormat:@"baidumap://map/direction?origin={{我的位置}}&destination=latlng:%f,%f|name=目的地&mode=driving&coord_type=bd09ll",data.getlatitude, data.getlongitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
printf("结束");
}else{
弹出提示框
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"请先安装百度地图,在使用此功能 !" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * cancelAc = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
//点击取消要执行的代码
}];
UIAlertAction *comfirmAc = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
//点击确定要执行的代码
}];
[alertVC addAction:cancelAc];
[alertVC addAction:comfirmAc];
[self presentViewController:alertVC animated:YES completion:nil];
}
}
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear: animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
-(void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear: animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
@end
如果显示地图是网格的·话不是代码的错误,只是配置出现了问题
看这个 博客 https://blog.csdn.net/gloryflow/article/details/42676561
安全码指的是注册百度地图哪里的 如图
这样就ok了