terrain 資料產生
首先下載 2016 年全臺灣 20 公尺網格 DTM 資料
接著到 cesium-terrain-builder-docker pull image
也可以直接拿他給的 docker file 來編譯
後來發現 2016 失效了 , 現在改 2020
然後解出來後是一個 csv 然後又帶一個連結 , 實在無言 XD
下面的 command 就自己依照新的 2020 去調整吧 , 剛好手上沒 linux 機器就不弄啦
host
1 | cd ~ |
container
1 | apt install wget |
舊版 .net
記得多年前曾經做過 terrain 費了很大的力氣 , 剛好在寫 .net core 就順手改寫看看 , 太久沒做應該還要多補寫怎麼製作 terrain , 先偷懶之後有時間再補
以前好像是在 IIS 上面直接掛載以下這段 code 的模組 , 就可以發出 terrain , 參考強國人的網站已找不到
1 | public class ZipHeaderModule : IHttpModule |
參考 cesium 網站的 example 還要加上一狗票 web.config 設定 , 最關鍵就是這句 <mimeMap fileExtension=".terrain" mimeType="application/vnd.quantized-mesh" />
1 | <?xml version="1.0" encoding="UTF-8"?> |
新版 .net core
起初的想法是掛個 Middleware 應該就可以快速搞定 , 研究了下其實 UseStaticFiles
本身就是個 Middleware , 有幫我們準備好現成的方法可以做微調
關鍵就是設定 .terrain
讓他 mapping 至 application/vnd.quantized-mesh
接著在 Response Header 加上 Content-Encoding
讓他是採用 gzip
就搞定了!
最後因為是要給前端使用 , 所以必須補上 CORS 這個討人厭的鬼東西
1 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env) |
最後前端會打出類似這樣的網址 http://localhost:5000/terrain/10/1715/645.terrain?v=1.1.0
Response 會給出以下這樣的訊息就算是搞定了
特別注意到 Access-Control-Allow-Origin: *
Content-Encoding: gzip
Content-Type: application/vnd.quantized-mesh
這三個部分缺一不可
1 | Accept-Ranges: bytes |
最後補上一個前端 index.html 就全部都搞定了
最後一步下載 Cesium
將 Build 裡面的 CesiumUnminified
丟到你專案內的 wwwroot
資料夾內
並且把開頭算好的 terrain
資料夾也丟到 wwwroot
裡面
並且把 CesiumUnminified
跟 terrain
都設定 Exclude from project
防止太多檔案導致 visual studio 速度變慢
1 |
|
nodejs
如果要在 nodejs 發的話只要設定 static
裡面的 setHeaders
去定義即可 , 原理都一樣
比較雷的是設定時常常忘記加上 /
開頭 XD
可以看官方說明
1 | const express = require('express') |
nestjs
最近剛好又看到 nestjs 就順便玩看看 helloworld 直接上 terrain 有點硬阿 XD
整個玩起來就是 angular + express 的 fu
1 | npm i -g @nestjs/cli |
一上來就直接陣亡因為對 .eslintrc.js
設定不是很熟狂噴紅字 , 所以先關閉確保我能正常工作
1 | ignorePatterns: ['*'], |
建立一個 demo 的 controller
1 | nest g co |
程式碼如下
1 | import { Controller, Get, Post, Req, Res } from '@nestjs/common'; |
接著加入 index.html
CesiumUnminified
terrain
然後檔案結構大概這樣
1 | CesiumUnminified |
接著安裝 serve-static
1 | npm install --save @nestjs/serve-static |
最後找到 app.module.ts
1 | import { Module } from '@nestjs/common'; |
然後就可以執行看看
1 | npm run start:dev |
後來發現要在 vscode debug 可以這樣設定
建立 .vscode
資料夾 , 然後建立 .launch.json
接著點選蟲蟲圖示 debug
詳細可以看這三篇 , 實在太累啦就懶得 format 了
https://dev.to/gentax/nestjs-right-settings-for-debugging-kl0
https://medium.com/@abhishek2kr/how-to-debug-nestjs-application-in-vscode-74379618760f
https://www.youtube.com/watch?v=QL3KXE1hOgA
1 | { |