介绍
高德地图主要分为地图开发、导航开发、定位开发、室内地图、室内定位。总结一下在项目中用到的地图开发。 Demo地址 DEMO比较简单,集成了3d地图和搜索sdk,可以根据自己的需求添加功能。
一:基本地图功能实现
高德地图提供了两种配置方式:
2.1手动配置
2.1.1引入地图库
2.1.2引入AMap.bundle资源文件
AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。 左侧目录中选中工程名,在右键菜单中选择Add Files to “工程名”…,从MAMapKit.framework->Resources文件中选择AMap.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。 资源文件不是必须的,可以自定义资源图片。
2.1.3引入系统库
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的使用。
NSAppTransportSecurity
NSAllowsArbitraryLoads
3.2配置高德Key至AppDelegate.m文件
……
(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 方法中添加代码:
{
[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表示显示指南针
_mapView.compassOrigin= CGPointMake(_mapView.compassOrigin.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
地图标注在开发中经常使用,并且地图标注样式灵活,需要着重注意。 在地图的基础,添加地图标注,需要两步
创建地图标注MAPointAnnotation,添加地图标注[_mapView addAnnotation:annotation];
mapView:viewForAnnotation:回调函数,设置标注样式。 这里添加标注的代理方法,也可以把当前位置当做标注一样去显示出来,比较灵活。
11.自定义标注
自定义标注图标(基于大头针标注,可以自定义样式)
(2) 导入标记图片文件到工程中。这里我们导入一个名为restauant.png的图片文件。
(3) 在 协议的回调函数mapView:viewForAnnotation:中修改MAAnnotationView对应的标注图片。 关键代码:
annotationView.image = [UIImage imageNamed:@"restaurant"];
//设置中心点偏移,使得标注底部中间点成为经纬度对应点
annotationView.centerOffset = CGPointMake(0, -18);
希望可以帮助大家 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
介绍
高德地图主要分为地图开发、导航开发、定位开发、室内地图、室内定位。总结一下在项目中用到的地图开发。 Demo地址 DEMO比较简单,集成了3d地图和搜索sdk,可以根据自己的需求添加功能。
一:基本地图功能实现
高德地图提供了两种配置方式:
2.1手动配置
2.1.1引入地图库
2.1.2引入AMap.bundle资源文件
AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。 左侧目录中选中工程名,在右键菜单中选择Add Files to “工程名”…,从MAMapKit.framework->Resources文件中选择AMap.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。 资源文件不是必须的,可以自定义资源图片。
2.1.3引入系统库
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的使用。
NSAppTransportSecurity
NSAllowsArbitraryLoads
3.2配置高德Key至AppDelegate.m文件
……
(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 方法中添加代码:
{
[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表示显示指南针
_mapView.compassOrigin= CGPointMake(_mapView.compassOrigin.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
地图标注在开发中经常使用,并且地图标注样式灵活,需要着重注意。 在地图的基础,添加地图标注,需要两步
创建地图标注MAPointAnnotation,添加地图标注[_mapView addAnnotation:annotation];
mapView:viewForAnnotation:回调函数,设置标注样式。 这里添加标注的代理方法,也可以把当前位置当做标注一样去显示出来,比较灵活。
11.自定义标注
自定义标注图标(基于大头针标注,可以自定义样式)
(2) 导入标记图片文件到工程中。这里我们导入一个名为restauant.png的图片文件。
(3) 在 协议的回调函数mapView:viewForAnnotation:中修改MAAnnotationView对应的标注图片。 关键代码:
annotationView.image = [UIImage imageNamed:@"restaurant"];
//设置中心点偏移,使得标注底部中间点成为经纬度对应点
annotationView.centerOffset = CGPointMake(0, -18);
希望可以帮助大家 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
本文由 姬長信 创作,文章地址:https://blog.isoyu.com/archives/20769.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:1 月 20, 2018 at 12:21 下午
都是干货,话说博主的博客里面内容丰富啊
很有技术含量的文章