使用离线地图 最后更新时间: 2021年01月22日
高德3D 地图 SDK支持离线地图功能。(2D 地图 SDK 不支持离线地图功能)
离线地图可满足在无网络环境下查看地图信息的需求,在设备本地有离线地图数据的情况下,SDK 会优先加载离线地图。
离线数据项 MAOfflineItem 包含城市编码、城市名称、数据状态等离线地图数据包的基本信息,是离线数据省信息(MAOfflineProvince)和离线数据城市信息(MAOfflineCity)的基类。离线数据城市信息(MAOfflineCity)又派生出三个子类,分别是全国概要图(MAOfflineItemNationWide)、直辖市(MAOfflineItemMunicipality)和普通城市(MAOfflineItemCommonCity)。
上述各类的关系如下图所示,也可以参见参考手册中的描述。

离线地图UI组件(推荐)
自3D地图SDK v 5.7.0起,新增离线地图UI组件,组件涵盖城市下载、暂停、更新、删除以及关键字城市查询等功能,是高德地图客户端离线地图功能的一个子集,UI交互风格上靠拢高德地图app,也考虑到与开发者应用UI的融合问题,尽可能的保持了简约极致。以下方法实现一键完成离线地图开发:
UIViewController *detailViewController = [MAOfflineMapViewController sharedInstance]; [self.navigationController pushViewController:detailViewController animated:YES];UI示意

自定义离线地图
开始下载
获取离线数据项的示例代码如下:
[[MAOfflineMap sharedOfflineMap] downloadItem:item shouldContinueWhenAppEntersBackground:YES downloadBlock:^(MAOfflineMapDownloadStatus downloadStatus, id info) { /* Manipulations to your application’s user interface must occur on the main thread. */ } MAOfflineMap.shared().downloadItem(item, shouldContinueWhenAppEntersBackground: true) { (downloadItem, downloadStatus, info) in //通过获取info和status对UI进行操作 }解析离线地图数据
解析离线数据项的示例代码如下:
self.cities = [MAOfflineMap sharedOfflineMap].cities;//普通城市和直辖市 self.provinces = [MAOfflineMap sharedOfflineMap].provinces;//省 self.municipalities = [MAOfflineMap sharedOfflineMap].municipalities;//直辖市 self.cities = MAOfflineMap.shared().cities self.provinces = MAOfflineMap.shared().provinces self.municipalitiesMAOfflineMap.shared().municipalities暂停离线地图下载
示例代码如下:
[[MAOfflineMap sharedOfflineMap] pauseItem:item]; MAOfflineMap.shared().pause(item)停止所有下载
停止所有离线地图下载的方法为:
[[MAOfflineMap sharedOfflineMap] cancelAll]; MAOfflineMap.shared().cancelAll()检查更新
通过如下代码检查离线地图数据是否存在更新,检查更新操作会同时将本地离线地图配置文件更新成最新的,App 用户可依据最新的配置文件下载新版离线地图数据。
[[MAOfflineMap sharedOfflineMap] checkNewestVersion:^(BOOL hasNewestVersion) { if (!hasNewestVersion) { return; } //更新处理 }]; MAOfflineMap.shared().checkNewestVersion { (hasNewVersion) in if !hasNewVersion { return } // 更新处理 }删除离线地图
单条删除
[[MAOfflineMap sharedOfflineMap] deleteItem:item]; MAOfflineMap.shared().delete(item)全部删除
/** * 清除所有在磁盘上的离线地图数据, 之后调用[mapView reloadMap]会使其立即生效 */ - (void)clearDisk; MAOfflineMap.shared().clearDisk()
