专栏首页葬爱家族Android高德之旅(2)地图类型

Android高德之旅(2)地图类型

废话

今天继续我们的Android高德之旅,上一篇已经可以显示最基本的地图了,有基本的缩放、旋转功能,还有最后做的小特效,今天这篇文章来记录一下高德地图的5种地图类型。

5种地图类型:

  • 常规地图模式(默认模式,又称行政地图模式,展示基本信息)
  • 卫星地图模式(展示卫星拍摄图,图片质量和当地空气质量相关)
  • 导航地图模式(突出显示交通线路,忽略一些不重要的信息)
  • 夜间地图模式(暗色调,低对比度以保护视力)
  • 离线地图模式(别打我,我是混进来充数的)

说明

其实按照高德地图官方的说法,我们不称之为地图模式,而是地图图层,每个图层负责绘制一种属性,很多个图层叠加起来,构成完整的地图,我们在不同场景下,选择性地隐藏、显示某些图层,从而实现了不同的显示效果。

至于离线地图模式,并不是图层的概念,而是把地图数据包下载到本地,然后在没有网络的时候使用本地数据。

说到这,肯定有人忍不住了,3D街景模式呢?这种模式是高级模式,而且并不是所有地方都有街景素材(在电脑上玩过的都知道,事实上只有很少的地方可以使用3D街景),所以我们暂且忽略。

1、普通模式

这是默认模式,也可以手动设置

AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_NORMAL);

2、卫星模式

AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);

3、夜间模式

我在调试时偶现过一次夜间模式没有加载出来,显示一片黑,不知道是不是高德的bug

AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_NIGHT);

4、导航模式

导航模式里面有三个可选项:traffix、building、mapText

AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_NAVI);
// aMap.setTrafficEnabled(true);
// aMap.showBuildings(true);
// aMap.showMapText(true);

说完了四个模式,貌似内容有点少,别急别急,还好有个离线地图,来帮我撑撑场面。

5、离线地图模式

前面说了,离线地图并不是地图展示模式,而是把地图数据包下载到本地,在没有网络时使用本地数据进行展示。事实上,高德地图在加载地图时都是优先加载本地离线数据的,本地没有才从网络下载。

(1)新建下载管理器

OfflineMapManager manager = new OfflineMapManager(Context, OfflineMapDownloadListener);

第二个参数OfflineMapDownloadListener是下载监听器,用于下载状态的回调。

@Override
public void onDownload(int status, int completeCode, String downName) {
    switch (status) {
        case OfflineMapStatus.SUCCESS:
            //下载成功
            break;
        case OfflineMapStatus.LOADING:
            //加载中
            break;
        case OfflineMapStatus.UNZIP:
            //解压
            break;
        case OfflineMapStatus.WAITING:
            //等待下载
            break;
        case OfflineMapStatus.PAUSE:
            //暂停
            break;
        case OfflineMapStatus.STOP:
            //停止
            break;
        case OfflineMapStatus.ERROR:
            //错误
            break;
        case OfflineMapStatus.EXCEPTION_AMAP:
            //地图异常
            break;
        case OfflineMapStatus.EXCEPTION_NETWORK_LOADING:
            //网络加载错误
            break;
        case OfflineMapStatus.EXCEPTION_SDCARD:
            //SD存储错误
            break;
        default:
            break;
    }
}

@Override
public void onCheckUpdate(boolean hasNew, String name) {
    //update时回调
}

@Override
public void onRemove(boolean success, String name, String describe) {
    //delete离线包时回调
}

有了这些回调,就可以轻松的知道所有下载任务的状态了,太棒了!

(2)开始下载

offlineManager.downloadByCityCode(cityCode);//根据城市code
offlineManager.downloadByCityName(cityName);//根据城市名
offlineManager.downloadByProvinceName(provinceName);//根据省份名

ps:这里城市名和省份名要写完整,带“市”、“省”,如:南京市、江苏省

(3)暂停下载

offlineManager.pause();

(4)停止下载

offlineManager.stop();

(5)更改下载存储路径

MapsInitializer.sdcardDir = "/sdcard/xx/xx/";

(6)判断离线地图数据是否存在更新

但是这三个方法没有返回值,也没有回调,我怎么知道检查结果呢?

offlineManager.updateOfflineCityByCode(cityCode);
offlineManager.updateOfflineCityByName(cityName);
offlineManager.updateOfflineMapProvinceByName(provinceName);

(7)删除离线地图

offlineManager.remove(cityName);

方便的api 此外,高德还提供了一些api用户获取城市列表、省份列表的。

(8)获取全国城市列表

ArrayList<OfflineMapCity> cities = offlineManager.getOfflineMapCityList();

(9)获取全国省份列表

ArrayList<OfflineMapProvince> provinces = offlineManager.getOfflineMapProvinceList();

(10)获取已下载的城市列表

ArrayList<OfflineMapCity> cities = offlineManager.getDownloadOfflineMapCityList();

(11)获取已下载的省份列表

ArrayList<OfflineMapProvince> provinces = offlineManager.getDownloadOfflineMapProvinceList();

(12)获取下载中和待下载的城市列表

ArrayList<OfflineMapCity> cities = offlineManager.getDownloadingCityList();

(13)获取下载中和待下载的省份列表

ArrayList<OfflineMapProvince> provinces = offlineManager.getDownloadingProvinceList();

根据城市名查询城市编码

有了上面的api,我们就可以实现根据城市名称,查询出城市编码,用于以后的下载管理操作,下面是我写的一个实现,可能效率并不高。

public int getCityCodeByCityName(String provinceName, String cityName) {
    if(TextUtils.isEmpty(provinceName)) {
        toast("省份名不能为空");
        return;
    }
    if(TextUtils.isEmpty(cityName)) {
        toast("城市名不能为空");
        return;
    }

    OfflineMapProvince findProvince = null;
    for (OfflineMapProvince province : offlineMapProvinceList) {
        if(provinceName.equals(province.getProvinceName())) {
            findProvince = province;
            break;
        }
    }
    if(findProvince == null) {
        toast("省份不存在");
        return;
    }

    OfflineMapCity findCity = null;
    ArrayList<OfflineMapCity> cityList = findProvince.getCityList();
    for (OfflineMapCity city : cityList) {
        if(cityName.equals(city.getCity())) {
            findCity = city;
            break;
        }
    }
    if(findCity == null) {
        toast("城市不存在");
        return;
    }

    return findCity.getCode();
}

总结

好了,今天要记录的就是这些,下篇博客会讲到UISetting。

本期节目就到这里,感谢大家的收看,我们下期再见~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android高德之旅(17)出行路线规划废话简介总结

    今天这篇来记录一下地图SDK中非常重要的一个功能:出行路线规划。我相信高德地图使用最多的也就是这个功能了,当然,我们今天的内容可能还做不到高德地图那么丰富的效果...

    大公爵
  • Mvvm、RxJava、Retrofit 三剑合璧

    说起现在Android流行的app架构,脱口而出MVP、MVVM,要问两者区别,张口就来,balabalabala。。但是公司所有项目用的都是MVP,从没正式用...

    大公爵
  • Android高德之旅(12)厉害了POI

    前后两千万,拍照更清晰。大家好,这里是OPPO R11独家冠名赞助播出的大型情感类电视连续剧《Android高德之旅》,我是主持人大公爵。这期节目,我们来讲一下...

    大公爵
  • LVS-NAT模式的配置详解

    由于实验室拟态存储的项目需要通过NAT模式来映射NFS服务器已实现负载均衡的目的,通过调研了多种负载均衡机制,笔者最终选择了LVS的NAT模式来实现需求,接下来...

    HappenLee
  • Java-正则表达式学习总结

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Fisherman渔夫
  • 动态 | 围棋 AI ELF OpenGo 迎来更新,另有田渊栋呈上开源项目的详细解读

    AI 科技评论按: Facebook 人工智能研究院(FAIR)于去年开源的 ELF OpenGo 日前再度迎来更新,本次 FAIR 不仅发布了该系统新的功能和...

    AI科技评论
  • Mac版AppStore无法下载、升级错误处理

    俺踏月色而来
  • Linux实现两台服务器之间ssh连接

    只有在SSH服务开启的状态下,才能远程登录,连接和管理服务器。如果关闭SSH服务,则远程连接客户端无法再连接服务器,但是已连接的客户端可以继续使用。

    华创信息技术
  • UVM方法学与设计模式_5:命令模式 & UVM Sequence

    假设有如上一段第一代版本的代码,run函数用于执行对receiver模块的一系列操作/命令。

    AsicWonder

扫码关注云+社区

领取腾讯云代金券