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

作者: 大公爵 | 来源:发表于2017-10-27 13:46 被阅读349次

    废话

    今天继续我们的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。

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

    相关文章

      网友评论

        本文标题:Android高德之旅(2)地图类型

        本文链接:https://www.haomeiwen.com/subject/cwukpxtx.html