当前位置: 首页 > news >正文

高德地图开发汇总

介绍

高德地图主要分为地图开发、导航开发、定位开发、室内地图、室内定位。总结一下在项目中用到的地图开发。 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的使用。

<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表示显示指南针
_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.工程配置

  • 左侧目录中选中工程名,开启 TARGETS->Capabilities->Background Modes

  • 在 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);
复制代码

希望可以帮助大家,如有问题可加QQ群: 668562416 交流

如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议

如需转载请联系我,经过授权方可转载,谢谢

相关文章:

  • 使用Context创建一个View需要注意的地方
  • Android爬坑之旅之FileProvider(Failed to find configured root that contains)
  • Java常用工具类之自定义访问对象
  • windows代理
  • unity3d GUITexture不显示问题
  • 微信小程序之 Index(仿淘宝分类入口)
  • Jerry的CRM Middleware(中间件)文章合集
  • 一些网址
  • 原生JS实现百度搜索功能
  • JavaScript:(a==1 a==2 a==3)能输出true么?
  • 阿里云启动API创新大赛 资源编排技术为场景赛题
  • 阿里云MaxCompute,用计算力让数据发声
  • Linux - ubuntu 设置固定ip和设置dns
  • 8-Socket网络编程
  • Linux下的tar压缩解压缩命令详解
  • ECMAScript入门(七)--Module语法
  • markdown编辑器简评
  • Octave 入门
  • PhantomJS 安装
  • spark本地环境的搭建到运行第一个spark程序
  • Theano - 导数
  • Vue2 SSR 的优化之旅
  • Vue2.x学习三:事件处理生命周期钩子
  • 记录:CentOS7.2配置LNMP环境记录
  • 全栈开发——Linux
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 详解移动APP与web APP的区别
  • 写给高年级小学生看的《Bash 指南》
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • hi-nginx-1.3.4编译安装
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 正则表达式-基础知识Review
  • ​渐进式Web应用PWA的未来
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • !!java web学习笔记(一到五)
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三)docker:Dockerfile构建容器运行jar包
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)关于pipe()的详细解析
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET 4.0中的泛型协变和反变
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET的数据绑定
  • .Net环境下的缓存技术介绍
  • .NET中两种OCR方式对比
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题