高德地图开发iOS 地图SDK创建地图 —使用离线地图

高德地图开发iOS 地图SDK创建地图 —使用离线地图

使用离线地图 最后更新时间: 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的融合问题,尽可能的保持了简约极致。以下方法实现一键完成离线地图开发:

Objective-C

UIViewController *detailViewController = [MAOfflineMapViewController sharedInstance];
        [self.navigationController pushViewController:detailViewController animated:YES];

UI示意

自定义离线地图

开始下载

获取离线数据项的示例代码如下:

Objective-C
Swift

[[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进行操作
}

解析离线地图数据

解析离线数据项的示例代码如下:

Objective-C
Swift

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

暂停离线地图下载

示例代码如下:

Objective-C
Swift

[[MAOfflineMap sharedOfflineMap] pauseItem:item];
MAOfflineMap.shared().pause(item)

停止所有下载

停止所有离线地图下载的方法为:

Objective-C
Swift

[[MAOfflineMap sharedOfflineMap] cancelAll];
MAOfflineMap.shared().cancelAll()

检查更新

通过如下代码检查离线地图数据是否存在更新,检查更新操作会同时将本地离线地图配置文件更新成最新的,App 用户可依据最新的配置文件下载新版离线地图数据。

Objective-C
Swift

[[MAOfflineMap sharedOfflineMap] checkNewestVersion:^(BOOL hasNewestVersion) {        
        if (!hasNewestVersion)
        {
            return;
        }
        
        //更新处理
    }];
MAOfflineMap.shared().checkNewestVersion { (hasNewVersion) in
            if !hasNewVersion {
                return
            }
            // 更新处理
        }

删除离线地图

单条删除

Objective-C
Swift

[[MAOfflineMap sharedOfflineMap] deleteItem:item];
MAOfflineMap.shared().delete(item)

全部删除

Objective-C
Swift

/**
 *  清除所有在磁盘上的离线地图数据, 之后调用[mapView reloadMap]会使其立即生效
 */
- (void)clearDisk;
MAOfflineMap.shared().clearDisk()