使用离线地图 最后更新时间: 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()