1. 程式人生 > >Cesium 生成terrain地形資料----CTB方式及步驟

Cesium 生成terrain地形資料----CTB方式及步驟

背景:專案前端使用Cesium,地形服務一直使用外網的,常常因為翻牆訪問的問題,導致地形資料取不到,進而導致地球不能載入,故決定搭建自己的地形服務,徹底解決這個問題。博文包含以下幾個過程:

  1. 下載原始地形資料,格式為.tif。
  2. 處理地形資料,將零散的地形檔案整合成一個地形檔案。
  3. 配置CTB環境
  4. 使用ctb-tile指令將地形檔案(.tif)加工成.terrain檔案。
  5. 釋出地形服務並使用Cesium呼叫。

一、下載原始地形資料

網盤包含兩部分內容:

  • dem.rar:原始資料,需要自行使用ArcMap工具整合。
  • 合併後的資料:經過ArcMap工具處理的資料,已經整合成了一個地形檔案,可以直接跳到第三步。

在網站下載流程:

  1. 開啟網頁http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp。如圖:
  2. 根據需要選擇方便的選取方式:

    MutilpleSelection:點選哪個選哪個,可以選擇多個,雙擊取消。
    EnableMouseDrag:框選,框選了什麼範圍就是什麼範圍。
    InputCoordinates:輸入最西,最東。最南,最北的座標來下載該範圍內的所有資料。
  3. 選擇好範圍後,點選“Click here to Begin Search”,進入下一步。
  4. 可以看到剛剛選擇了幾個資料,點選每個資料的DownLoad,下載資料(這個地方比較繁瑣,需要耐心)。
  5. 下載完資料後解壓所有的壓縮包,並將tifwen檔案拷貝到統一的資料夾內,這裡的內容和我網盤中的dem.rar是一樣的:

二、處理地形資料

由於CTB工具不支援DEM為NoData值和float的資料,所以需要對資料進行處理。

  • 多個tif必須縣合併鑲嵌成一張tif
  • pixeltype從float轉為int
  • NoData值處理為0

我使用的是ArcGis10.5,開啟ArcMap:

開啟 ArcToolbox->Data Management Tools->Raster->Raster Dataset ->Mosaic。

這個處理過程很久,可以在Result面板裡檢視轉換過程。成功後,處理NoData值,處理公式為:

Con(IsNull("xxxx.tif"),0,"xxxx.tif")//xxxx.tif對應你的合併後的檔案

三、配置CTB環境

  1. 下載CTB工具包:資源
  2. 將ctb和gdal-data拷貝至合適的目錄下如:D:\soft\CTB
  3. 配置環境變數:                                                             

四、使用CTB生成.terrain檔案:

注意:執行前請確保輸出資料夾存在且是空的,同時保證磁碟有足夠的空間,全球資料大約800G。生成瓦片的等級不要太高,中國範圍內單18級就需要大約700G。

開啟cmd控制檯,輸入指令如:


ctb-tile -o D:\terrain\china\terrain -s 14 -e 0 -r nearest -c 4 C:\Users\Administrator\Documents\ArcGIS\dem_result\noData\new.tif

這個過程更加費時間,需要等待很久,直到執行結束。

五、釋出並使用Cesium呼叫

  1. 將生成的檔案拷貝到Tomcat伺服器下。
  2. 拷貝“覆蓋至生成tiles結果”目錄中的layer.json檔案和0資料夾至生成結果目錄下:
  3. 呼叫程式碼:
     var terrainLayer = new Cesium.CesiumTerrainProvider({
             url: "https:/localhost:8080/mapcache/cesium/terrain", // 預設立體地表
          });
     scene.terrainProvider = terrainLayer;

    至此,地形釋出完成。如有錯誤之處歡迎指正。

後記:有朋友反饋,太大的地形處理出來之後有問題,使用的時候會報錯,這裡我在給出一個簡單的工具:CesiumLab

操作方式仍然需要執行完第二步,也就是整合地形檔案為一個tif,然後使用CesiumLab的地形處理工具處理,親測可用,0-12級,需要約2天時間。