在一些特殊WEB項(xiàng)目中,服務(wù)器不允許通過(guò)api的形式訪問(wèn)外部接口,故需要使用離線方式實(shí)現(xiàn)地圖相關(guān)應(yīng)用,具體的實(shí)現(xiàn)方法網(wǎng)上有很多案例參考案例。案例中的demo經(jīng)過(guò)測(cè)試可用,但對(duì)于瓦片地圖資源方面描述的比較模糊。
1.通過(guò)地圖下載器獲取
網(wǎng)絡(luò)上有多種地圖下載器,如BIGMAP,水經(jīng)注地圖下載器,全能地圖下載器等。經(jīng)過(guò)多種下載器的測(cè)試之后,只有使用全能電子地圖下載器下載的百度地圖瓦片在命名規(guī)則上符合百度api的要求。
-
百度地圖瓦片的標(biāo)準(zhǔn)
這一點(diǎn)在案例中也沒(méi)有說(shuō)明,案例所使用的瓦片地圖需要按照Z(yǔ)(地圖級(jí)別),X(橫軸),Y(縱軸)。三級(jí)目錄存放,且橫軸目錄文件夾需要按照從左至右的形式遞增,而縱軸目錄的文件則需按照從下至上的規(guī)律名稱,最重要的是百度地圖的瓦片是按照最高級(jí)及全球地圖為起始瓦片進(jìn)行的循序命名,所以當(dāng)你只需要獲取某些地區(qū)的瓦片時(shí)如果命名不符合要求則無(wú)法正常顯示地圖.通過(guò)其他下載器下載的地圖瓦片或谷歌地圖的瓦片都無(wú)法實(shí)現(xiàn)這一要求。

-
全能電子地圖下載器的劣勢(shì)
全能電子地圖下載器網(wǎng)上大多都是v1.96版的破解版本,實(shí)測(cè)可以正常下載谷歌地圖瓦片,但是下載百度地圖瓦片只能顯示黑底白點(diǎn)圖片.而使用v3.7版的則需進(jìn)行注冊(cè),試用版所下載的瓦片帶有明顯水印,故最后我沒(méi)有選擇這種方式。
【注意】案例中的瓦片地圖只支持jpg格式,而通過(guò)全能電子地圖下載器下載的為png格式需要更改后綴名。
2.使用java形式自行下載
- 首先需要通過(guò)web的控制臺(tái)獲取百度瓦片的資源地址,參考網(wǎng)上相關(guān)資料的方式。并未取得相同結(jié)果??赡苁前俣冗M(jìn)行了新的邏輯設(shè)計(jì),所幸原資源地址并未失效。
資源地址如下:
http://online0.map.bdimg.com/onlinelabel/?qt=tile&x=10&y=12&z=6&styles=pl&udt=20160719
火狐測(cè)試結(jié)果.png - 然后需要編寫(xiě)下載邏輯,由于多級(jí)瓦片地圖隨著地圖級(jí)別的增加,圖片數(shù)量也成幾何倍數(shù)遞增,所以采用代碼形式循環(huán)下載可以大幅減少工作量.
1.使用數(shù)據(jù)流形式將圖片URL下載至本地目錄URL url = new URL(urlString);/ / 構(gòu)造URL URLConnection con = url.openConnection();// 打開(kāi)連接 InputStream is = con.getInputStream();// 輸入流 byte[] bs = new byte[1024];// 1K的數(shù)據(jù)緩沖 int len;// 讀取到的數(shù)據(jù)長(zhǎng)度 OutputStream os = new FileOutputStream(filename);// 輸出的文件流 // 開(kāi)始讀取 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } // System.out.println("下載成功"); // 完畢,關(guān)閉所有鏈接 os.close(); is.close();```
2.根據(jù)圖片存儲(chǔ)規(guī)則自動(dòng)生成目錄
File file =new File(localPath);
//如果文件夾不存在則創(chuàng)建
if (!file .exists() && !file .isDirectory())
{
System.out.println("http://目錄不存在");
file .mkdir();
System.out.println("http://創(chuàng)建目錄:"+localPath);
} else
{
System.out.println("http://目錄存在");
}
- 網(wǎng)上有一些通過(guò)移動(dòng)屏幕來(lái)自動(dòng)獲取瓦片種類的教程,但一來(lái)無(wú)法精準(zhǔn)識(shí)別出指定的城市或區(qū)域,二來(lái)算法復(fù)雜容易重復(fù)下載瓦片。本文采用全能電子地圖下載器先行選中地域,然后通過(guò)下載的瓦片目錄確認(rèn)每一個(gè)地圖級(jí)別所需瓦片的橫縱坐標(biāo),最后使用代碼進(jìn)行批量下載。如需下載地圖級(jí)別較高的瓦片地圖最好使用多線程進(jìn)行下載,否則會(huì)花費(fèi)大量時(shí)間。
