今天繼續咱們的Android高德之旅,上一篇已經可以顯示最主要的地圖了。有主要的放大縮小功能。還有最後作的點擊3D旋轉、傾斜視角的效果。今天這篇文章來記錄一下高德地圖的5種地圖類型。css
(實際上是4種類型,加上離線地圖)java
這5種地圖模式在不一樣的場景下使用,各有優勢。api
普通模式是默認的模式。展現地名、交通主幹道、簡單的地形、河流等。用的也是最多的;導航模式會突出顯示交通線路。而下降把其餘屬性,常規模式下顯示的部分地名會忽略掉。顯示一些重要的地名;夜間模式不用說了,就是夜間護眼的,採用的是暗色調,低對照度。從而下降對眼鏡的傷害。衛星模式展現的再也不是電腦模擬圖,而是真實的衛星拍攝的照片,衛星把全中國的土地都拍成一張張照片,而後通過很是碉堡的處理。拼接成無縫銜接的地圖,放大後可以看到真實的樓房、道路、地貌、甚至汽車、行人。玩過Google地圖的都知道,在歐洲一些空氣質量很是好的地方(比方巴黎)。衛星模式展現的畫面不要太美。markdown
至於離線地圖模式。這並不是展現模式,而是把地圖數據包下載到本地。而後就可以在網絡不佳的時候使用,比方室內。網絡
講到這,確定有人忍不住了,3D街景模式呢?這樣的模式是高級模式。而且並不是所有地方都有街景素材(在電腦上玩過的都知道,其實僅僅有較少的地方可以使用3D街景),因此咱們今天先不管。ide
好了,如下開始記錄一下用法,筒子們,老司機要開車了。上車吧。post
這也是默認模式,也可以手動設置編碼
AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_NORMAL);
AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_NAVI);
我在調試時偶現過一次夜間模式沒有載入出來,顯示一片黑,不知道是否是高德的bugspa
AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_NIGHT);
AMap aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);
是否是太簡單了,都是一句話設置完事。調試
今天這篇博客是否是太水了,博主太不負責任了。別急別急,還好有個離線地圖,來幫我撐撐場面。
離線地圖並不是新的展現模式,而是把地圖數據包下載到本地。載入地圖時就不需要再從網絡下載。
其實。高德地圖在載入地圖時都是優先載入本地離線數據的。本地沒有才從網絡下載。因此離線模式其實就是一系列的api調用。
(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。
本期節目就到這裏,感謝你們的收看,咱們下期再見~