山頭繪製程式 - 健行

Table of Contents

2010/07/27更新:

新版程式更新如下:
http://byte.ec.kuas.edu.tw/~ychsin/DEM/DEM_v0.02.rar
增加距離/霧氣淡出功能, 並且增加介面可以調整繪圖色彩選項, 以及相
關的地理參數. 此外加上繪製天空的加速機制.



自製的山頭繪製程式, 起因是看到amjads大用程式跑出來的漂亮大圖, 很
想也自己寫一個來用, 另一方面自己是認山頭白痴, 有這樣的程式以後爬
山拍照認山頭就容易多了XD

程式執行畫面:
http://byte.ec.kuas.edu.tw/~ychsin/DEM/ScreenShot.PNG


I. 下載程式

請至以下網址下載程式:
http://byte.ec.kuas.edu.tw/~ychsin/DEM/DEM_v0.01.rar
並解開至硬碟.



II. 安裝方式

本程式不需要安裝, 直接執行DEM.exe即可. 如果只單純要開啟繪製好的
結果則可直接使用, 但是要繪製地形則會用到地形資料, 需參考III.另外
下載一些網路上的資料庫.


III. 下載地形資料庫

繪製地形所需用到的共有三個資料庫, 分別為:

1. Aster GDEM地形資料庫
由於版權問題, 以及檔案過大, 所以無法附在程式裡, 需從:
http://asterweb.jpl.nasa.gov/gdem.asp
下載DEM資料並放至DEM/目錄下. 要完整繪製台灣地區請至少下載以下區域:
ASTGTM_N21E120_dem.tif
ASTGTM_N21E121_dem.tif
ASTGTM_N22E120_dem.tif
ASTGTM_N22E121_dem.tif
ASTGTM_N23E119_dem.tif
ASTGTM_N23E120_dem.tif
ASTGTM_N23E121_dem.tif
ASTGTM_N24E119_dem.tif
ASTGTM_N24E120_dem.tif
ASTGTM_N24E121_dem.tif
ASTGTM_N25E121_dem.tif
ASTGTM_N25E123_dem.tif

2. 交通部運輸研究所的全臺(包含外島)河流圖層
同樣因為版權問題, 所以請至下列網址下載:
http://www.iot.gov.tw/ct.asp?xItem=154948&ctNode=1091
請下載Twd97經緯度 MIF格式的 全臺(包含外島)河流圖層,並將TWN_RIVER.mid
及TWN_RIVER.mif放至Shape/目錄下.

3. 山頭/基石資料
這是由登山補給站7777大所整理的基石資料庫:
http://www.keepon.com.tw/ActiveSite/Stone/Index.asp
這已經附在RAR裡不需另外下載了. 感謝7777大及網路上其他蒐集製作基石
資料庫的山友們.


IV. 瀏覽介面

程式介面很簡單, 首先可以開啟Sample/目錄下的範例輸出結果, 開啟完
成後程式右方的表格會列出圖中可見的山頭列表, 按一下所選的山頭會
在圖中以紅色小圈圈標示出來.

另外上方有三個游標模式:

1. Cursor Mode
可用十字游標在圖上移動, 程式下方的Status Bar會顯示出游標所在的
座標, 海拔高度及離觀測點的距離.

2. Marker/Label Mode
程式會以紅色圓圈標定離游標最近的山頭, 並且游標指到山頭的話會顯
示出山名及高度. 按下紅色圓圈則會在上方加上山頭標示, 並可以拖曳
標示文字, 移動其擺放的位置.

3. Render Range Selection
可以方框圈選畫面上的範圍, 作為下次繪製的繪圖範圍及觀測點參數.

V. 繪製地形

如果安裝完上述的資料庫後, 就可以設定好繪圖範圍及觀測點參數並按
下"繪製"按鈕進行繪製. 繪圖範圍設定是水平與垂直的視角範圍, 以及
輸出影像的大小; 觀測點可以設定畫面中央的方位角和仰角, 以及觀測
點的WGS84經緯度. 繪製完成後可以選擇Save Render Result將結果存
檔, 或是選擇Save As Bitmap File將結果輸出成BMP圖檔.


VI. 其他

本程式非常吃記憶體, 如果要進行地型繪製請準備至少200MB的RAM空間,
輸出圖的尺寸越大RAM吃越兇. CPU資源方面, 以Sample/東勢.rv這張2048x
737的圖來說, 我的Thinkpad X200 Dual Core P8600 (2.4GHz)大約要花
掉24分鐘運算. 建議可以先用小尺寸(圖寬1024)確認出圖範圍無誤後再進
行大尺寸的繪圖.

因為一開始只是自己寫好玩的, 所以程式的容錯性很差, 尤其是在UI上.
為了減少記憶體用量及運算量, 整個演算法用了很多偷吃步, 因此繪製
結果的準確性絕對比不上專業GIS軟體, 但是用來認山頭應該是夠用了.
最後, 因為自己不是地理相關背景出身的, 整個演算法都是從網路上找
資料跟自己亂想的, 所以如果有所錯誤也請不吝指教~~

另外, 由於程式的輸出是基於第三方的資料(Aster GDEM和交通部), 而
我並不清楚這樣使用在法律上的規範, 故為了避免困擾請勿做商業用途,
謝謝.

--

All Comments

Hardy avatarHardy2010-07-19
推一下山頭標示的介面,我的程式吃ram 1.6gb,CPU:Sempron1.6
Candice avatarCandice2010-07-22
畫360度的跨海峽的圖平均大約在30分鐘左右,現在還在想用
OpenMP 會不會更快
Cara avatarCara2010-07-24
我覺得用這很適合平行處理,因為每一個pixel都是獨立的運算,
Bennie avatarBennie2010-07-26
透過適當的工作編排應該可以大幅提昇速度.應該找一台SMP的
機器來玩玩看XD
Anonymous avatarAnonymous2010-07-31
這陣子想到應該可以安排飛行軌跡來製作一段飛覽台灣的動畫
Joe avatarJoe2010-08-02
你的筆電不就是雙核? 光這個用執行緒就應該可以再減個 1/3
Audriana avatarAudriana2010-08-03
的時間 (推估)
Emma avatarEmma2010-08-04
推~ 感謝分享!!
Frederica avatarFrederica2010-08-06
看樣子明年要買i5外加8GB的配備了。
Cara avatarCara2010-08-11
推一個~
Noah avatarNoah2010-08-14
呵..沒在BCB上寫過MultiThread,研究中.原本打算直接改寫
Elvira avatarElvira2010-08-16
丟到UNIX Server上跑一連串的動畫XD
Jack avatarJack2010-08-17
推一個~ 我的程式是依照距離上色,但無法自動標示山頭
而且沒有把河流的部份寫進去..
Anonymous avatarAnonymous2010-08-22
原來大家都在做一樣的事情XD 目前正將追跡演算法獨立寫成
Lauren avatarLauren2010-08-26
Render Engine,方便跨平台及進行跨分散式運算
Joe avatarJoe2010-08-31
我是建議依照距離加上"霧氣"的效果或淡出,以免山脈太多排
顏色都差不多,會擁擠在一起分不清楚.
Odelette avatarOdelette2010-09-04
請問本程式與Win7相容嗎?我執行時產生錯誤視窗
"Floating point division by zero"
Mason avatarMason2010-09-07
另外我無法讀取河流資料。
David avatarDavid2010-09-13
簡單加上距離淡出效果. Win7的問題我要找平台來試一下,理論
上應該都可以相容才是.
Heather avatarHeather2010-09-16
又找到一個bug: 當繪製到天空時會突然變慢約10倍.
Odelette avatarOdelette2010-09-16
不是記憶體問題,因為我用小圖試過了,問題依然無法解決
Yuri avatarYuri2010-09-21
這個問題很奇怪,因為天空理論上無任何計算,卻反而變慢...
Kumar avatarKumar2010-09-25
天空是因為追跡沒有找到東西,所以會跑到超出設定的最大距離
Annie avatarAnnie2010-09-28
或是超過設定的海拔上限才會終止,所以才會這麼慢..
Bethany avatarBethany2010-10-01
我覺得可以稍微改寫成只要偵測到一行全為天空,以上的全部
Iris avatarIris2010-10-02
無條件填滿為天空,這樣可以節省不少運算時間~
更精確講,只要某像素為天空,該像素以上可直接填滿為天空
Adele avatarAdele2010-10-02
因為山坡不會倒掛在天上,這樣計算不會有錯誤又可節省時間
Franklin avatarFranklin2010-10-07
感謝evanzxcv的好方法,這部份已經改好了.待其他部份也完成
Kyle avatarKyle2010-10-12
後再更新一版上來~~
Tom avatarTom2010-10-12
evanzxcv大:我在Win7試過沒問題耶.不過有發現如果河流資料
Jake avatarJake2010-10-13
下載成TM2格式的會發生你所說的錯誤,不知道是不是這個原因