申请 Key
获取用户Key
1.访问 http://lbs.amap.com/console/key/,使用高德开发者账号登陆
2.在“KEY管理”页面点击上方的“获取key”按钮,依次输入应用名,选择绑定的服务为“iOS平台SDK”,输入 Bundle Identifier(获取方法请参考:获取 Bundle Indentifier),如下图所示:
获取 Bundle Indentifier
iOS bundle 获取方式
方法一
通过代码获取,代码如下所示:
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
方法二
Xcode 切换到 General 标签,查看 Bundle Identifier,如下图所示:
地图显示
地图显示是地图 SDK 的基础功能,相当于学习编程语言中的 HelloWorld,一切从这里开始。
首先,在“相关下载”页面中根据您的需求下载库文件并解压,包括:
- 3D 矢量地图库,解压后得到 MAMapKit.framework 文件。3D 矢量地图效果优,可查看 3D 楼块,功能全,还支持离线地图,能帮您节省流量。目前暂不支持地图多实例。
- 2D 栅格地图库,解压后得到 MAMapKit.framework 文件。2D 栅格地图库体积小,能耗低。支持地图多实例。
- 搜索库,解压后得到 AMapSearchKit.framework 文件。搜索库功能包含:POI 查询、路径规划、地理编码和逆地理编码、公交查询以及输入提示语查询。
注意:3D矢量地图和2D栅格地图只能选择一个使用,接口类似。
新建工程
新建一个 Single View Application工程,如下图所示:
配置工程
引入地图库
左侧目录中选中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries
中点击 “+” 按钮,在弹出的窗口中点击 “Add Other” 按钮,选择解压后的 MAMapKit.framework
文件添加到工程中。
引入AMap.bundle资源文件
AMap.bundle 资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。
左侧目录中选中工程名,在右键菜单中选择 Add Files to “工程名”…,从MAMapKit.framework->Resources
文件中选择 AMap.bundle
文件,并勾选 “Copy items if needed” 复选框,单击 “Add” 按钮,将资源文件添加到工程中。
引入系统库
需引入的系统库如下表所示:
说明:
1.备注中,2D表示使用2D栅格地图需要的系统文件,3D表示使用3D矢量地图需要的系统文件、Search表示使用搜索库需要的系统文件。
2.SystemConfiguration.framework、CoreTelephonySecurity.framework、Security.framework 是为了统计 app 信息使用。
3.iOS9后,需要把libz.dylib、libstdc++6.09.dylib、libc++.dylib替换成libz.tbd、libstdc++.tbd、libc++.tbd。
引入系统库的操作如下:
左侧目录中选中工程名,在 TARGETS->Build Settings-> Link Binary With Libaries
中点击 “+” 按钮,在弹出的窗口中查找并选择所需的库(见下表),单击 “Add” 按钮,将库文件添加到工程中。
环境配置
在 TARGETS->Build Settings->Other Linker Flags
中添加 -ObjC
。
注意:
V2.3.0(含)之前版本不支持arm64,需在 TARGETS->Build Settings->Architectures 点出选择框,选择 “Other”,将默认值修改为 $(ARCHS_STANDARD_32_BIT)。
配置用户Key
在使用地图 SDK 时,需要对应用做 Key 机制验证,在地图初始化之前添加如下示例代码,配置之前在官网上申请的 Key:
[MAMapServices sharedServices].apiKey = @"用户Key";
显示地图
(1)修改 ViewController.m 文件,引入 MAMapKit.h 文件,继承 MAMapViewDelegate 协议,并定义 MAMapView 对象,示例代码如下所示:
#import <ViewController.h>
#import <MAMapKit/MAMapKit.h>
@interface ViewController ()<MAMapViewDelegate>
{
MAMapView *_mapView;
}
@end
(2)在 ViewController.m 文件相应的方法中进行地图初始化,初始化的步骤:
1.构造 MAMapView 对象;
2.设置代理;
3.将 MAMapView 添加到 Subview 中。
对于 2D 矢量地图,在 viewDidLoad 方法中添加代码:
-(void) viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//配置用户Key
[MAMapServices sharedServices].apiKey = @"用户Key";
_mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;
[self.view addSubview:_mapView];
}
程序截图:
开启定位
只要开启定位开关(MAMapView 的 showsUserLocation 属性)就可以开始定位。代码如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
_mapView.showsUserLocation = YES; //YES 为打开定位,NO 为关闭定位
}
当位置更新时,会进定位回调,通过回调函数,能获取到定位点的经纬度坐标,示例代码如下:
-(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation { //取出当前位置的坐标 NSLog(@"latitude : %f,longitude: %f",userLocation.coordinate.latitude,userLocation.coordinate.longitude);
}