高德地图地图的使用
前期准备
导入高德地图”AMap3DMap/AMap2DMap SDK”(导入可以分为手动导入和自动导入两种方式:
a.手动导入:在高德开发者平台下载SDK并添加到项目中;
b.自动导入:在终端配置cocoapods工具,输入” $ sudo gem install cocoapods”,具体了解请参阅cocopods入门指南,并在Xcode工程中创建podfile文件,在文件中pod ‘AMap3DMap’ #3D地图, pod ‘AMap2Map’ #2D地图
(注:手动导入后需在工程中添加必要的依赖库)
申请iOS Key:
请到高德开放平台控制台申请;
配置Info.plist文件
iOS9为了增强数据访问安全,将所有的http请求都改为了https,为了能够在iOS9中能够正常的使用地图,请在Info.plist中进行一下配置,否则影响SDK的使用.
NSAppTransportSecurity
NSAllowsArbitraryLoads
配置完成后将之前申请的Key值至工程中的Appdelegate.m文件中.具体代码如下:
地图的展示
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
///地图需要v4.5.0及以上版本才必须要打开此选项(v4.5.0以下版本,需要手动配置info.plist)
[AMapServices sharedServices].enableHTTPS = YES;
///初始化地图
MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
///把地图添加至view
[self.view addSubview:_mapView];
}
显示定位蓝点
首先需要配置头文件:在需要显示地图的控制器中导入:
import
import
创建地图对象代码如下:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
///地图需要v4.5.0及以上版本才必须要打开此选项(v4.5.0以下版本,需要手动配置info.plist)
[AMapServices sharedServices].enableHTTPS = YES;
///初始化地图
MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
///把地图添加至view
[self.view addSubview:_mapView];
///如果您需要进入地图就显示定位小蓝点,则需要下面两行代码
_mapView.showsUserLocation = YES;
_mapView.userTrackingMode = MAUserTrackingModeFollow;
}
配置定位权限
在Info.plist中配置定位权限,如下图所示:
定位权限有三种,可根据项目需求自行选择:
切换地图图层
iOS地图SDK提供了几种预置的地图图层.包括:卫星图,白昼地图,黑夜地图,导航地图,路况图.修改枚举类型进行设置.
切换代码如下:
- (void)setupMapView
{
self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.mapView];
//设置底图种类为卫星图
[self.mapView setMapType:MAMapTypeSatellite];
}
地图控件交互:
a.地图logo”高德地图”默认是显示的并不能隐藏,但是我们可以通过修改logo通过调整logo的位置来做到隐藏的目的,代码如下:
_mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds) – 55, 60);
b.指南针控件
通过修改showscompass属性来控制是否显示指南针(YES显示,NO不显示):
_mapView.showscompass = YES;
通过修改compassOrigin来改变指南针的默认位置:
_mapView.compassOrigin = CGPointMake(x, y);
c.比例尺控件
通过修改showScale来控制比例尺的显示与隐藏,YES为显示,NO为不显示.
_mapView.showScale = YES;
通过修改scaleOrigin来修改比例尺默认显示的位置:
_mapView.scaleOrigin = CGPointMake(x, y);
手势交互
手势列表:
可以通过MAMapView的scrollEnabled属性可以禁止或者启用手势,YES为开启,NO为禁止;
a. 可以通过修改MAMapView的setZoomLevel方法设置地图的缩放级别(缩放级别的范围为3到19):代码如下:
[_mapView setZoomLevel:17.5 animated:YES];
b. 拖动手势
拖动地图的时候可以通过改变地图中心点的位置来移动地图,代码如下:
[_mapView setCenterCoordinate:center animated:YES];
c. 旋转手势
通过修改MAMapView的rotateEnable属性禁止过开启旋转手势(YES:开启, NO:禁止)
调用MAMapView的setRotationDegress方法设置地图的旋转角度(旋转角度的范围为[0.0f – 360.0f]);代码如下;
[_mapView setRotationDress:60.0f animated:YES duration:0.5];
d. 倾斜手势:
通过修改MAMapView的rotateCameraEnabled属性禁止或启用倾斜手势(YES:开启, NO:禁止)
调用MAMapView说我setCameraDeress方法设置地图的倾斜角度(倾斜范围为[0.f – 45.f]);代码如下:
[_mapView setCameraDress:20.f animated:YES duration:0.5];
方法交互
限制地图的显示范围:
使用场景:针对需要展示部分固定范围的地图;代码如下:
_boundary = MACoordinateRegionMake(CLLocationCoordinate2DMake(40, 116), MACoordinateSpanMake(2, 2));
MAMapRect mapRect = MAMapRectForCoordinateRegion(_boundary);
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
//注意,不要viewWillAppear里设置
[self.mapView setLimitRegion:self.boundary];
}
地图截屏功能
iOS SDK支持对选定的屏幕地图区域(CGRect)进行截屏,截屏内容包括:地图,覆盖物,弹出的气泡;
说明:地图截屏功能依赖于地图显示,即只有内容先显示在地图上,才能进行截屏.
使用MAMapView中的takeSnapshortInRect方法进行截屏,该方法返回UIImage对象,代码如下:
__block UIImage *screenshotImage = nil;
__block NSInteger resState = 0;
[self.mapView takeSnapshotInRect:inRect withCompletionBlock:^(UIImage *resultImage, NSInteger state) {
screenshotImage = resultImage;
resState = state; // state表示地图此时是否完整,0-不完整,1-完整
}];
iOS地图导航SDK
iOS 导航 SDK 是一款针对在线导航的产品,产品功能涵盖路径规划、模拟导航、GPS 定位、自定义导航界面、获取导航播报信息等。此外,该产品的导航路径计算与实时交通信息相结合,力求为用户提供更加合理、准确、人性化的导航服务。
实时导航代码如下:
第一步:创建AMapNaviDriveView
- (void)initDriveView
{
if (self.driveView == nil)
{
self.driveView = [[AMapNaviDriveView alloc] initWithFrame:self.view.bounds];
self.driveView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
[self.driveView setDelegate:self];
[self.view addSubview:self.driveView];
}
}
第二步:创建AMapNaviDriveManager
- (void)initDriveManager
{
if (self.driveManager == nil)
{
self.driveManager = [[AMapNaviDriveManager alloc] init];
[self.driveManager setDelegate:self];
//将driveView添加为导航数据的Representative,使其可以接收到导航诱导数据
[self.driveManager addDataRepresentative:self.driveView];
}
}
第三步:进行路线规划
a:初始化
- 初始化导航的起点和终点坐标
- (void)initProperties
{
self.startPoint = [AMapNaviPoint locationWithLatitude:39.99 longitude:116.47];
self.endPoint = [AMapNaviPoint locationWithLatitude:39.90 longitude:116.32];
}
- 初始化MAMapView
- (void)initMapView
{
if (self.mapView == nil)
{
self.mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, kRoutePlanInfoViewHeight,
self.view.bounds.size.width,
self.view.bounds.size.height - kRoutePlanInfoViewHeight)];
[self.mapView setDelegate:self];
[self.view addSubview:self.mapView];
}
}
- 初始化AMapNaviDriveManager
- (void)initDriveManager
{
if (self.driveManager == nil)
{
self.driveManager = [[AMapNaviDriveManager alloc] init];
[self.driveManager setDelegate:self];
}
}
b:计算驾车规划路线
[self.driveManager calculateDriveRouteWithStartPoints:@[self.startPoint]
endPoints:@[self.endPoint]
wayPoints:nil
drivingStrategy:17];
c:处理结果
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager
{
NSLog(@"onCalculateRouteSuccess");
//显示路径或开启导航
}
第四步:开始实时导航
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager
{
NSLog(@"onCalculateRouteSuccess");
//算路成功后开始GPS导航
[self.driveManager startGPSNavi];
}