转载

高德地图开发汇总

版权声明:本文为原创文章,未经作者授权不得转载。

介绍

高德地图主要分为地图开发、导航开发、定位开发、室内地图、室内定位。总结一下在项目中用到的地图开发。 Demo地址 DEMO比较简单,集成了3d地图和搜索sdk,可以根据自己的需求添加功能。

一:基本地图功能实现

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、Search

  • 2.  Foundation.framework    2D、3D、Search

  • 3.  CoreGraphics.framework  2D、3D、Search

  • 4.  QuartzCore.framework    2D、3D

  • 5.  OpenGLES.framework  3D

  • 6.  CoreLocation.framework  2D、3D

  • 7.  CoreTelephony.framework 2D、3D、Search

  • 8.  SystemConfiguration.framework   2D、3D、Search

  • 9.  libz.dylib  2D、3D、Search

  • 10. libstdc++6.09.dylib 2D、3D、Search

  • 11. 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的使用。

NSAppTransportSecurity

    NSAllowsArbitraryLoads
    

3.2配置高德Key至AppDelegate.m文件

#import 
//需要引入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 
-(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表示显示指南针
_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

10.大头针标注

地图标注在开发中经常使用,并且地图标注样式灵活,需要着重注意。 在地图的基础,添加地图标注,需要两步

创建地图标注MAPointAnnotation,添加地图标注[_mapView addAnnotation:annotation];

mapView:viewForAnnotation:回调函数,设置标注样式。 这里添加标注的代理方法,也可以把当前位置当做标注一样去显示出来,比较灵活。

11.自定义标注

自定义标注图标(基于大头针标注,可以自定义样式)

(1) 添加标注数据对象,可参考大头针标注的步骤(1)。 

(2) 导入标记图片文件到工程中。这里我们导入一个名为restauant.png的图片文件。 

(3) 在 协议的回调函数mapView:viewForAnnotation:中修改MAAnnotationView对应的标注图片。 关键代码:

annotationView.image = [UIImage imageNamed:@"restaurant"];
//设置中心点偏移,使得标注底部中间点成为经纬度对应点
annotationView.centerOffset = CGPointMake(0, -18);

详见官方文档

希望可以帮助大家 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议 iOS技术交流群:668562416

正文到此结束
Loading...