关于高德地图
为了更方便的使用,以及避免犯错
详见:http://lbs.amap.com/api/ios-sdk/guide/verify/
高德地图iOS SDK开发密钥的申请地址为:http://lbs.amap.com/console/key/
需要高德开发者账号。
高德地图提供了两种配置方式:
即手动导入所需要的库文件,以及进行相关的配置操作。手动配置相对麻烦,作简要说明,详见官方文档。
MAMapKit.framework 文件添加到工程中。
AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。
左侧目录中选中工程名,在右键菜单中选择Add Files to “工程名”…,从MAMapKit.framework->Resources文件中选择AMap.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
资源文件不是必须的,可以自定义资源图片。
UIKit.framework 2D、3D、Search
Foundation.framework 2D、3D、Search
CoreGraphics.framework 2D、3D、Search
QuartzCore.framework 2D、3D
OpenGLES.framework 3D
CoreLocation.framework 2D、3D
CoreTelephony.framework 2D、3D、Search
SystemConfiguration.framework 2D、3D、Search
libz.dylib 2D、3D、Search
libstdc++6.09.dylib 2D、3D、Search
Security.framework 2D、3D
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
V2.3.0(含)之前版本不支持arm64,需在 TARGETS->Build Settings->Architectures 点出选择框,选择 “Other”,将默认值修改为 $(ARCHS_STANDARD_32_BIT)。
CocoaPods相对简单,自动管理第三方库。不需要额外的其他配置即可使用。配置详见官方文档。
编辑Podfile内容如下:
platform :ios, ‘7.0’ #手机的系统
pod ‘AMap3DMap’ #3D地图SDK
#pod ‘AMap2DMap’ #2D地图SDK (2D和3D不能同时使⽤用)
pod ‘AMapSearch’ #搜索服务SDK
在PodFile所在的文件夹下输入命令:
pod install
默认的Logo为蓝色字样的“高德地图”,显示在地图的左下方。地图Logo不能移除,但可通过MAMapView.logoCenter属性来调整Logo的显示位置。在ViewController.m的viewDidLoad方法添加如下如下:
_mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds)-55, 450);
指南针默认是开启状态,显示在地图的右上角。
通过MAMapView的showsCompass属性用来控制指南针的可见性。compassOrigin属性可改变指南针的显示位置。在ViewController.m的viewDidLoad方法添加如下如下:
_mapView.showsCompass= YES; // 设置成NO表示关闭指南针;YES表示显示指南针
_mapView.compassOrigin= CGPointMake(_mapView.compassOrigin.x, 22); //设置指南针位置
比例尺表示地图上两点间距离与实际与之对应的两点距离的比,在不同的缩放级别下,比例尺代表的长度也是不同的。
在iOS SDK中,比例尺默认显示在地图的左上角。MAMapView的showScale属性用来控制比例尺的可见性,scaleOrigin属性用来改变比例尺的显示位置。在ViewController.m的viewDidLoad方法添加如下代码:
_mapView.showScale= YES; //设置成NO表示不显示比例尺;YES表示显示比例尺
_mapView.scaleOrigin= CGPointMake(_mapView.scaleOrigin.x, 22); //设置比例尺位置
缩放手势
_mapView.zoomEnabled = NO; //NO表示禁用缩放手势,YES表示开启
平移(滑动)手势
_mapView.scrollEnabled = NO; //NO表示禁用滑动手势,YES表示开启
旋转手势(3D)
_mapView.rotateEnabled= NO; //NO表示禁用旋转手势,YES表示开启
倾斜手势(3D)
_mapView.rotateCameraEnabled= NO; //NO表示禁用倾斜手势,YES表示开启
地图缩放
地图的缩放级别的范围是[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];
CGRect inRect = CGRectMake(80,142,160,284);
UIImage *screenshotImage = [_mapView takeSnapshotInRect:inRect] ;
//显示卫星地图
_mapView.mapType = MAMapTypeSatellite;
说明:地图类型切换只需将地图类型设置成相应的类型(MAMapTypeStandard/MAMapTypeSatellite/MAMapTypeStandardNight)。
显示实时交通路况的代码如下:
_mapView.showTraffic= YES;
地图标注在开发中经常使用,并且地图标注样式灵活,需要着重注意。
在地图的基础,添加地图标注,需要两步
(1) 添加标注数据对象,可参考大头针标注的步骤(1)。
(2) 导入标记图片文件到工程中。这里我们导入一个名为restauant.png的图片文件。
(3) 在 协议的回调函数mapView:viewForAnnotation:中修改MAAnnotationView对应的标注图片。
关键代码:
annotationView.image = [UIImage imageNamed:@"restaurant"];
//设置中⼼心点偏移,使得标注底部中间点成为经纬度对应点
annotationView.centerOffset = CGPointMake(0, -18);
气泡在iOS中又称为callout,它由背景和气泡内容构成。
(1) 新建自定义气泡类CustomCalloutView,继承UIView。
(2) 在CustomCalloutView.h中定义数据属性,包含:图片、商户名和商户地址。
(3) 在CustomCalloutView.m中重写UIView的drawRect方法,绘制弹出气泡的背景。
(4) 定义用于显示气泡内容的控件,并添加到SubView中。
(5) 在CustomCalloutView.m中给控件传入数据。
详见官方文档。
iOS系统不允许使用第三方定位,地图SDK的定位方法是对iOS系统定位的二次封装。通过封装。可将原始的定位点无偏差的显示在高德地图上。同时,可自定义定位图标和精度圈的样式。
1)2.3.0(含)之前版本的SDK,在iOS8中无法定位,请参考:iOS8无法定位的解决方案。
2)2.4.0(含)以后版本需在info.plist中追加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段.其中:
NSLocationWhenInUseUsageDescription表示应用在前台的时候可以搜到更新的位置信息。
NSLocationAlwaysUsageDescription表示应用在前台和后台(suspend或terminated)都可以获取到更新的位置数据。
特别注意:在plist文件中加上之后如果无效,请在info页面加上
_mapView.showsUserLocation = YES; //YES 为打开定位,NO为关闭定位
当位置更新时,会进定位回调,通过回调函数,能获取到定位点的经纬度坐标:
-(void)mapView:(MAMapView*)mapView didUpdateUserLocation: (MAUserLocation*)userLocation updatingLocation:(BOOL)updatingLocation
定位的样式是可以更改的,方式与标注类似。
app退到后台,且位置不变动时,也不会被系统挂起,可持久记录位置信息。
_mapView.pausesLocationUpdatesAutomatically = NO;
a)左侧目录中选中工程名,开启 TARGETS->Capabilities->Background Modes
b)在 Background Modes中勾选 Location updates
##3.13 检索功能
高德地图暂不支持多地图实例,需要共用一个mapView。
参考官方文档:
http://lbs.amap.com/api/ios-sdk/guide/introduction/