為cesium搭建離線地圖服務(wù)——瓦片數(shù)據(jù)原理以及本地瓦片數(shù)據(jù)服務(wù)部署的思路
兩個(gè)術(shù)語(yǔ):
quadkey?——三維地圖加載瓦片地圖圖片的鍵值,在請(qǐng)求url中可以看到;
TileXY——瓦片地圖圖片在整個(gè)地圖中的坐標(biāo),也用作該瓦片圖的存儲(chǔ)目錄;
一、地圖分片原理
以Cesium默認(rèn)加載的bing maps tile system為例。其地圖以一種四叉樹的方式進(jìn)行存儲(chǔ)和加載。每當(dāng)放大地圖時(shí),會(huì)根據(jù)放大層級(jí)以及當(dāng)前區(qū)域加載對(duì)應(yīng)子層級(jí)的地圖圖片,在瀏覽器進(jìn)行拼接展示。
官方給的示意圖如下:
圖中每個(gè)區(qū)域的紅色的數(shù)字編碼,可以記做TileXY。
二、瓦片地圖圖片的URL格式
Bing Maps的瓦片地圖圖片的URL的格式為:
http://ecn.t{0}.tiles.virtualearth.net/tiles/{1}{2}.png? g={4}
參數(shù)解釋:
參數(shù)
解釋
說明
{0}
代表Bing Maps的服務(wù)器,平衡負(fù)載
現(xiàn)在看來(lái)取值可以是0~7,也就是8臺(tái)服務(wù)器
{1}
地圖類型
衛(wèi)星地圖:a;普通地圖:r;混合地圖:h
{2}
瓦片地圖圖片鍵值(quadkey?)
通過對(duì)應(yīng)地圖區(qū)域的位置、顯示尺度等計(jì)算而來(lái)
{3}
地圖圖片類型
取值為png | jpeg | jpg
{4}
地圖版本
其他url參數(shù)可以參考bing maps的官方文檔。
其他地圖供應(yīng)商的url大同小異。
三、瓦片數(shù)據(jù)的存儲(chǔ)
瓦片數(shù)據(jù)在文件系統(tǒng)中以下面這種路徑形式(z/x/y.jpg,即TileXY方式)存儲(chǔ)的:
上圖中的圖片路徑是 2/2/1.jpg,即按照TileXY方式描述的 {地圖放大層級(jí)}/{X坐標(biāo)}/{Y坐標(biāo)}.jpg。它對(duì)應(yīng)的url是:
https://ecn.t3.tiles.virtualearth.net/tiles/a123.jpg?g=9675
也就是url中的圖片名 a123.jpg(quadkey)和文件夾路徑(TileXY)存在換算的映射。
四、quadkey和TileXY之間的映射
根據(jù)官方文檔:在給定level下,把行號(hào)Y和列號(hào)X轉(zhuǎn)換為2進(jìn)制,然后行列交叉存儲(chǔ),再轉(zhuǎn)換為4進(jìn)制,即得到了相應(yīng)的quadkey。譬如Level 3的第6行第4列的Tile計(jì)算:tileY = 5 = 101 ,tileX = 3 = 011;quadkey = 100111 = 213(4進(jìn)制) = “213”。反過來(lái)計(jì)算就是quadkey到TileXY的轉(zhuǎn)換。根據(jù)此方法,就很容易寫quadkey到TileXY之間的轉(zhuǎn)換代碼。
五、本地搭建Maps服務(wù)方案
如果考慮網(wǎng)絡(luò)不可用的場(chǎng)景,就需要構(gòu)建本地Maps的服務(wù)。
比較可行的方案是根據(jù)url規(guī)則,將需要的地圖瓦片數(shù)據(jù)批量下載到本地服務(wù)器,并根據(jù)quadkey和TileXY的映射關(guān)系配置路由,cesium的地圖源的請(qǐng)求改成從本地服務(wù)器獲取。
當(dāng)前有對(duì)應(yīng)腳本工具對(duì)瓦片數(shù)據(jù)進(jìn)行批量下載,唯一問題是數(shù)據(jù)量有些大。中國(guó)范圍內(nèi)如果地圖縮放支持到16級(jí)的衛(wèi)星地圖影像,中國(guó)的地圖數(shù)據(jù)有圖片約1.17億張。放大到16級(jí)大概是下面效果,地面分辨率2.39m每像素。
所以如果使用此方案,需要:
1、根據(jù)我們實(shí)際需要下載對(duì)應(yīng)區(qū)域、對(duì)應(yīng)縮放層級(jí)的瓦片數(shù)據(jù),如國(guó)外區(qū)域只下載部分層級(jí),國(guó)內(nèi)下載到16級(jí),避免用到的數(shù)據(jù)占用太大;
2、有足夠空間、有服務(wù)器存放瓦片數(shù)據(jù),同時(shí)在此服務(wù)器上部署Maps服務(wù),并配置好請(qǐng)求路由映射;
3、修改cesium對(duì)應(yīng)的配置,改成三維地圖圖片加載走自己部署的Maps服務(wù)器,對(duì)應(yīng)Viewer初始化時(shí)候配置imageryProvider參數(shù)。如:
// 衛(wèi)星圖設(shè)置為本地影像 imageryProvider : new Cesium.UrlTemplateImageryProvider({ url: "/resource/map-tile/bing/{z}/{x}/{y}.jpg", }),
六、如何下載地圖數(shù)據(jù)
目前發(fā)現(xiàn)了一個(gè)名為MapTileDownloader的軟件比較好用。感興趣的可以找找試試。
web前端
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。