一:基本地图功能实现
1.申请密钥流程
申请密钥链接
2.配置环境(重点)
高德地图提供了两种配置方式:
2.1手动配置
2.1.1引入地图库
MAMapKit.framework 文件添加到工程中。
2.1.2引入AMap.bundle资源文件
AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。 左侧目录中选中工程名,在右键菜单中选择Add Files to “工程名”…,从MAMapKit.framework->Resources文件中选择AMap.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。 资源文件不是必须的,可以自定义资源图片。
2.1.3引入系统库
1. UIKit.framework 2D、3D、Search2. Foundation.framework 2D、3D、Search3. CoreGraphics.framework 2D、3D、Search4. QuartzCore.framework 2D、3D5. OpenGLES.framework 3D6. CoreLocation.framework 2D、3D7. CoreTelephony.framework 2D、3D、Search8. SystemConfiguration.framework 2D、3D、Search9. libz.dylib 2D、3D、Search10. libstdc++6.09.dylib 2D、3D、Search11. Security.framework 2D、3D
2.1.4环境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。 V2.3.0(含)之前版本不支持arm64,需在 TARGETS->Build Settings->Architectures 点出选择框,选择 “Other”,将默认值修改为 $(ARCHS_STANDARD_32_BIT)。
2.2自动配置,(使用 CocoaPods 安装 SDK)
为 高德 iOS 地图 SDK 创建一个 Podfile,并使用它来安装 SDK。
2.2.1创建Podfile文件
在您当前工程文件(.xcodeproj)所在文件夹下创建一个名为 Podfile 的文件。如果您尚未创建 Xcode 项目,请立即创建一个并将其保存到您的本地计算机。 (如果您第一次接触 iOS 开发,请创建一个Single View Application。)
$ touch Podfile
2.2.2编辑 Podfile 文件
Podfile文件内容如下:
platform :ios, '7.0' #手机的系统 target 'YourProjectTarget' do pod 'AMap3DMap' #3D地图SDK #pod 'AMap2DMap' #2D地图SDK (2D和3D不能同时使用) pod 'AMapSearch' #搜索功能 end
2.2.3运行 pod install 命令安装SDK
$pod install --repo-update
1.1.0版本的pod,运行pod install 不会自动更新repo,如果下载的不是最新版,可使用pod install —repo-update 更新 或 先运行 pod repo update.
2.2.4更新 SDK
如果您安装的SDK不是最新版,请执行下面的代码进行更新。
pod repo update
2.2.5重启 Xcode
关闭Xcode,然后打开(双击)您项目的 .xcworkspace 文件以启动 Xcode。 从此刻开始,您必须使用 .xcworkspace 文件打开项目。
3.地图的使用
3.1配置Info.plist 文件
iOS9为了增强数据访问安全,将所有的http请求都改为了https,为了能够在iOS9中正常使用地图SDK,请在"Info.plist"中进行如下配置,否则影响SDK的使用。
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true></true></dict>
3.2配置高德Key至AppDelegate.m文件
#import <AMapFoundationKit/AMapFoundationKit.h>//需要引入AMapFoundationKit.h头文件……(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ [AMapServices sharedServices].apiKey = @"您的Key";……}
3.3加载地图
在ViewController.m文件相应的方法中进行地图初始化,初始化的步骤:
1.import MAMapKit.h 头文件;
2.构造MAMapView对象;
3.将MAMapView添加到Subview中。
对于3D矢量地图,在 viewDidLoad 方法中添加代码:
#import <MAMapKit/MAMapKit.h>-(void) viewDidLoad{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.///初始化地图MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];///把地图添加至view[self.view addSubview:_mapView];}
到此地图的基本功能就完成了 Demo地址 如果有所帮助记得关注,点Star demo中添加了查看路况功能,如果不需要,可以删除。
二:自定义地图功能
在上面功能的基础上我们可以针对需求,自定义地图功能,下面我就列举出常用功能设置方法:
1.地图Logo
默认的Logo为蓝色字样的“高德地图”,显示在地图的左下方。地图Logo不能移除,但可通过MAMapView.logoCenter属性来调整Logo的显示位置。在ViewController.m的viewDidLoad方法添加如下如下:
_mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds)-55, 450);
2.指南针
指南针默认是开启状态,显示在地图的右上角。 通过MAMapView的showsCompass属性用来控制指南针的可见性。compassOrigin属性可改变指南针的显示位置。在ViewController.m的viewDidLoad方法添加如下如下:
_mapView.showsCompass= YES; // 设置成NO表示关闭指南针;YES表示显示指南针passOrigin= CGPointMake(passOrigin.x, 22); //设置指南针位置
3.比例尺
比例尺表示地图上两点间距离与实际与之对应的两点距离的比,在不同的缩放级别下,比例尺代表的长度也是不同的。 在iOS SDK中,比例尺默认显示在地图的左上角。MAMapView的showScale属性用来控制比例尺的可见性,scaleOrigin属性用来改变比例尺的显示位置。在ViewController.m的viewDidLoad方法添加如下代码:
_mapView.showScale= YES; //设置成NO表示不显示比例尺;YES表示显示比例尺_mapView.scaleOrigin= CGPointMake(_mapView.scaleOrigin.x, 22); //设置比例尺位置
4.手势控制
//缩放手势_mapView.zoomEnabled = NO; //NO表示禁用缩放手势,YES表示开启//平移(滑动)手势_mapView.scrollEnabled = NO; //NO表示禁用滑动手势,YES表示开启//旋转手势(3D)_mapView.rotateEnabled= NO; //NO表示禁用旋转手势,YES表示开启//倾斜手势(3D)_mapView.rotateCameraEnabled= NO; //NO表示禁用倾斜手势,YES表示开启
5.地图操作
地图缩放 地图的缩放级别的范围是[3-19],调用MAMapView的setZoomLevel方法设置地图的缩放级别,用来缩放地图。示例代码如下:
[_mapView setZoomLevel:17.5 animated:YES];
地图平移
[_mapView setCenterCoordinate:center animated:YES];
地图旋转(3D) 旋转角度的范围是[0.f 360.f],以逆时针为正向。示例代码如下:
[_mapView setRotationDegree:60.f animated:YES duration:0.5];
地图倾斜(3D) 倾斜角度范围为[0.f, 45.f],示例代码如下:
[_mapView setCameraDegree:30.f animated:YES duration:0.5];
6.地图截屏
CGRect inRect = CGRectMake(80,142,160,284);UIImage *screenshotImage = [_mapView takeSnapshotInRect:inRect] ;
7.卫星图
//显示卫星地图_mapView.mapType = MAMapTypeSatellite;
说明:地图类型切换只需将地图类型设置成相应的类型
8. 实时交通图
显示实时交通路况的代码如下:
_mapView.showTraffic= YES;
9.定位功能
9.1开启定位
_mapView.showsUserLocation = YES; //YES 为打开定位,NO为关闭定位 当位置更新时,会进定位回调,通过回调函数,能获取到定位点的经纬度坐标:
-(void)mapView:(MAMapView*)mapView didUpdateUserLocation: (MAUserLocation*)userLocation updatingLocation:(BOOL)updatingLocation
9.2后台定位
app退到后台,且位置不变动时,也不会被系统挂起,可持久记录位置信息。 1.添加代码
_mapView.pausesLocationUpdatesAutomatically = NO;
2.工程配置 1)左侧目录中选中工程名,开启 TARGETS->Capabilities->Background Modes 2)在 Background Modes中勾选 Location updates
10.大头针标注
地图标注在开发中经常使用,并且地图标注样式灵活,需要着重注意。 在地图的基础,添加地图标注,需要两步 1. 创建地图标注MAPointAnnotation,添加地图标注[_mapView addAnnotation:annotation]; 2. mapView:viewForAnnotation:回调函数,设置标注样式。 这里添加标注的代理方法,也可以把当前位置当做标注一样去显示出来,比较灵活。
11.自定义标注
自定义标注图标(基于大头针标注,可以自定义样式)
(1) 添加标注数据对象,可参考大头针标注的步骤(1)。 (2) 导入标记图片文件到工程中。这里我们导入一个名为restauant.png的图片文件。 (3) 在 协议的回调函数mapView:viewForAnnotation:中修改MAAnnotationView对应的标注图片。 关键代码:
annotationView.image = [UIImage imageNamed:@"restaurant"];//设置中⼼心点偏移,使得标注底部中间点成为经纬度对应点annotationView.centerOffset = CGPointMake(0, -18);
详见官方文档
希望可以帮助大家 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议 iOS技术交流群:668562416
源码Demo获取方法
关注「网罗开发」公众号 ,有iOS demo、RN 视频以及demo、Android demo等你领取。
/r/ry6guGjEODVHrSzb93u9 (二维码自动识别)
小专栏:/u/fanbaoying