聶文兵,高 飛
摘 要:DED(Digital Elevation Data)是MultiGen Creator引入數字網格高程數據的惟一格式,其他高程數據在引入前必須先轉換為DED格式。本文結合基于MultiGen Creator的某院校常用訓練場地三維地形模型的建立,通過對DED文件的格式的研究,探討了利用等高線地圖生成DED文件的過程、方法和技巧;開發了自定義地形數據格式轉換成DED文件的轉換軟件,實現了高質量DED文件的生成。
關鍵詞:Creator;DED;DEM;地形數據;地形建模
中圖分類號:TP311文獻標識碼:B
文章編號:1004-373X(2009)12-159-04
Generation of DED File in 3D Terrain Modeling Based on Creator
NIE Wenbing1,GAO Fei2
(1.Unit Battle Library,Nanchang Army Academy,Nanchang,330103,China;
2.Ordnance Institute of Technology,Ordnance Engineer College,Shijiazhuang,050003,China)
Abstract:DED(Digital Elevation Data)is the only format which can be used in the MultiGen Creator,others must be transformed in to DED before using.The generation process,methods and tips of DED file with the 3D terrain model generating for training field which in common used by certain academy are discussed,and the format of DED file is studied,the software for transforming user-defined terrain data to the DED file is developed,and creating of the high quality DED file is realized.
Keywords:Creator;DED;DEM;terrain data;terrain modeling
0 引 言
MultiGen Creator是一套功能強大、在視景仿真中應用廣泛的建模軟件。然而各種格式的地形數據文件不能在Creator中使用,必須經過處理轉換成Creator專用的數字高程數據(Digital Elevation Data,DED)文件,基于該文件生成的地形,精確度高,并且支持從多方面對地形模型進行優化調整,比如:BSP(Binary Separating Planes),LOD(Level Of Detail),CAT(Continuous Adaptive Terrain)等。因此,由DED文件生成地形是Creator地形建模的一種重要方法,如果能將其他常用數字地圖文件中有用的數據讀出,直接生成DED文件,將對Creator的建模提供很大的方便。這里主要探討利用軍用等高線地圖生成三維地形模型的過程中DED文件的生成過程、方法和技巧。
1 由等高線地圖生成DEM
數字高程模型(Digital Elevation Model,DEM)是以數字形式存儲的表示物體位置高程值的集合。DEM是美國國家圖像和地圖測繪局(National Image And Mapping Agency,NIMA)開發的描述地面高程的一種模型,它采用x,y,z坐標表達地表形態。DEM數據經過格式轉換,可以在大多數地形生成軟件(如ARC/INFO,MultiGen Creator,MapInfo,IMAGIS,MAPGIS等)中生成三維地形。
1.1 地形源數據的獲取
地形源數據主要是建立數字高程模型(Digital Elevation Model,DEM)用到的高程數據。它的獲取方法有以下幾種:
(1) 采用大地測量的方法直接從地形上測出高程;
(2) 利用航空攝影測量照片,采用數字高程判斷儀從兩張對應的照片上讀取高程;
(3) 利用衛星攝影測量照片讀取高程數據(遙感);
(4) 從小比例尺普通等高線地圖上讀取高程數據;
(5) 從現有的地圖數據庫提取所需區域的地形高程數據。
等高線地形圖生產DEM的方法已經可以廣泛應用于生產。以現有某院校的常用訓練場地用圖為基礎數據來源,充分利用自有條件對紙質軍用地圖進行掃描、預處理、數字化、高程賦值等操作,最后生成DEM,既體現了經濟性,又能滿足戰術演練的需求。
1.2 等高線地圖的矢量化
等高線地形圖經過掃描、二值化、細化等預處理后,保留了表達地形的最基本的特征——等高線。這時可以用專門的矢量化軟件進行矢量化處理,也可以根據用戶的需求開發一個矢量化系統來進行等高線地圖的矢量化工作。在此采用第三方軟件Able Software R2V for Windows(R2V)來完成這部分工作。它是一種高級光柵圖矢量化軟件系統,具有強有力的智能自動數字化技術與方便易用的菜單驅動圖形用戶界面有機地結合到Windows & NT環境中,為用戶提供了全面的自動化光柵圖像到矢量圖形的轉換功能;它可以處理多種格式的光柵(掃描)圖像,是一個可以用掃描光柵圖像為背景的矢量編輯工具。
將經掃描并處理完成的某院校常用場地訓練用圖(YEJIGANG.bmp)導入R2V軟件,可以直觀地看到地圖上的任意位置;接下來的工作就是按照R2V軟件提供的矢量化過程,按部就班地進行地圖矢量化,以獲取生成DEM所必須的高程信息,主要包括如下幾個步驟:
(1) 對等高線進行屏幕跟蹤矢量化;
(2) 對等高線標賦高程值;
(3) 對離散高程點進行屏幕矢量化;
(4) 對高程點標賦高程;
(5) 對這些矢量化結果進行編輯、檢查、拼接以生成拓撲關系完整的矢量圖。
1.3 DEM的生成
通過屏幕數字化軟件對某院校常用訓練場地用圖進行數字化,并對等高線賦ID值(高程)后,選用合適的算法,生成自定義規則格網DEM模型,從而獲取了地形建模的數據源DEM文件。用等高線生成規則格網DEM最主要的方法是內插法。按內插點的分布范圍,可將內插分為整體內插、分塊內插和逐點內插三類,具體的選擇依據是精度和運算速度之間平衡。
這里采用逐點內插法中的加權平均法。為了求每個格網點的高程值,采用4個方向的搜索,分別為東南方向、西南方向、西北方向和東北方向。尋找距離待求點距離最近的點,考慮精度的要求參考點的數目不小于5。而鄰近數據點采用基于點的范圍進行選擇,選擇方式如圖1所示。
鄰近點的選取,由于圓的半徑取決于原始數據的疏密程度和原始數據點可能影響的范圍。為了解決這個問題,可以采用動態圓半徑的方法,它的思路是從數據點的平均密度出發,確定圓內數據點數(平均要有10個),以求解圓的半徑R,其公式為:
πR2=10(A/N)(1)
根據這些已知點的高程值,以距離參數作為權重,利用加權平均法求解待定點的高程值。數學方程式如下:
Zp=∑ni=1piZi/∑ni=1pi(2)
式中:Zp是待定點p的高程;Zi是第i個參考點的高程值;n為參考點的個數;pi是第i個參考點的權重,這里權重由參考點與待求點的距離決定。
圖1 動態圓取點
2 DED文件的生成
2.1 DED文件格式和計算方法
2.1.1 DED文件格式
標準DED文件由標準文件頭、統計記錄、數據單元文件頭和數據單元四部分組成,各部分定義如下:
(1) 標準文件頭(128 B)
typedef struct ss_ stdhdr {
long len;/* 塊的字節數,4 B */
char id[4];/* 文件識別碼 */
char part[8];/* 軟件分號 */
char rev[8];/* 軟件修訂號 */
char create[26];/* 創建日期時間 */
char update[26];/* 最后更新日期時間 */
char spare[52];/* 空格 */
}ss_stdhdr;
(2) 統計記錄(32 B)
typedef struct stats {
long ncell;/* 數據單元數目 * /
short minz,maxz;/* 整個文件最小、最大高程 */
char spare[24];/* 空格 */
}stats;
(3) 數據單元(40 B)
typedef struct cell_hdr {
float latstart,latend;/* 起止緯度 */
float longstart,longend;/* 起止經度 */
float deltalat,deltalong;/* 經緯間距,單位10 s */
float nptlat,nptlong;/* 緯度和經度上的點數 */
float deltax,deltay;/* 兩點間距離(英尺)*/
}cell_hdr
(4) 單元數據
數據為2 B Short型,所有數據無間隔的連續存放。
2.1.2 DED文件的計算方法
生成DED文件的重點是計算單元格兩點間的距離。DED中數據單元的兩點間實際距離即DED數據網格的間距,是用地球橢球面上大地線的長度來度量的。網格中任意兩點A(B1,L1)和B(B2,L2)間的距離可以采用大地主題解算方法來計算。
首先將B1,L1和B2,L2換算成以弧度為單位,然后進行下列計算。計算中常數采用的是克拉索夫斯基橢球體元素。
b=B2-B1(3)
P=sin bcos L2(4)
Q=cos L1sin L2-sin L1cos L2cos b(5)
M=sin L1sin L2+cos L1cos L2cos b(6)
A0=arctan(P/Q)(7)
A1=arctan[cos L2sin A0/1-(cos L2sin A0)2](8)
A=arctan[(Psin A0+Qcos A0)/M](9)
S=6 356 863.020+(10 708.949-
13.474cos A1)cos A1(10)
得到A,B間距離為:L=AS,最后將“米”為單位的數據轉化為“英尺”單位。
2.2 DEM數據格式轉換成DED數據格式
在分析DED文件的格式規范和計算方法后,通過格式轉換軟件便可實現DEM數據格式文件向DED格式文件的轉換。由于可獲得的原始高程數據無統一標準,文件格式也有所差別,有時MultiGen Creator自帶的工具并不能派上用場,這就需要自己開發地形數據格式轉換工具軟件。
在編制地形數據轉換軟件主要做的工作有以下幾項:
(1) 從文件中讀取有用的高程數據
一些常用的標準的高程數據文件如DEM,DMA等,Creator自帶了轉換工具。對于一些自定義的文件格式或Creator不支持的其他文件格式,須根據其文件格式,將其中有用的數據分離讀出。
(2) 根據DED文件的格式計算出DED文件需要的相關參數
DED文件表示的是某一經緯度區域內的地形,需根據高程文件的地形參數,計算出DED文件中有關的參數,如:經緯度的起始值和終止值、經緯度的跨度及相鄰兩點的距離等。
(3) 將參數及數據寫入DED文件
DED文件是二進制文件。在寫入數據時應注意以二進制的方式寫,并應注意在寫入數據時要按照DED文件中高程數據的排列順序;否則,生成的DED文件中可能出現方向的變化。
由于DED文件格式源于SGI Irix系統平臺,多字節數據的存儲方式是將低字節存儲在起始地址,稱為小端(little-endian)字節序;而Windows系統平臺的多字節數據存儲方式是將高字節存儲在起始地址,稱為大端(big-endian)字節序,所以在讀取和寫入時需要進行轉換。以下是部分示例代碼:
CDedHead::ReadFile(CString chName) //讀文件
{
…
for(int i = 0;i < m_stats.nCell;i++)
{
nn = m_fileDED.Read(&m;_cell,sizeof(cell_Hdr));
m_cell.nptlong = Ex32Float(m_cell.nptlong);
m_cell.nptlat = Ex32Float(m_cell.nptlat);
}
…
}
unsigned long CDedHead::Ex32Int(unsigned long lv)
{
unsigned long *buf = &lv;
for(unsigned int i=0;i<4;i++)
{
ENDIAN_32(buf[i]);
}
return *buf;
}
float CDedHead::Ex32Float(float fv)
{
float *buf = &fv;
for(unsigned int i=0;i<4;i++)
{
ENDIAN_32r(buf[i]);
}
return *buf;
}
unsigned long CDedHead::GetDedLong(unsigned long lv)
{
unsigned long by1 = lv - (lv>>8)*256;
lv = lv>>8;
unsigned long by2 = lv - (lv>>8)*256;
lv = lv>>8;
unsigned long by3 = lv - (lv>>8)*256;
lv = lv>>8;
unsigned long by4 = lv - (lv>>8)*256;
unsigned long lRet = (unsigned long)by4;
lRet += (unsigned long)(by3*256);
lRet += unsigned long(by2*256*256);
lRet += unsigned long(by1*256*256*256);
return lRet;
}
unsigned short CDedHead::GetDedshort(unsigned short sv)
{
unsigned short by1 = sv - (sv>>8)*256;
sv = sv>>8;
unsigned short by2 = sv - (sv>>8)*256;
unsigned short lRet = (unsigned short)by2;
lRet += (unsigned short)(by1*256);
return lRet;
}
采用自主開發的轉換軟件,將基于等高線地圖生成的某院校常用訓練地域DEM轉化為DED格式的文件“YEJIGANG.ded”,這樣就完成了三維地形生成的地形數據準備工作。
3 結 語
在此以某院校常用訓練場地三維地形模型的建立為例,詳細介紹了以等高線地圖生成Creator專用數據DED文件的方法、過程和技巧。該方法成本低,效率高,可操作性強;同時利用專業矢量化軟件和自己編制的轉換軟件,優勢互補、使用靈活。
在掃描數字化、插值等步驟中注意了誤差的控制,最后得到的DEM數據具有較高了誤差的控制,使得到的DEM數據具有較高的精度,從而得到高精度的DED文件,實踐證明,該方法確能快速有效的生成DED文件,為其他地區批量生成DED提供了借鑒,從而利用MultiGen Creator軟件建立高質量的三維地形模型。
參考文獻
[1]胡少林.基于DEM數據的三維地形建模方法研究與實現[D].長沙:國防科學技術大學,2002.
[2]姚建新,馮秀蘭.等高線的三維地形建模與實現[J].林業資源管理,2002,9(4):31-33.
[3]陳珩.戰場環境仿真中的三維地形生成技術研究[J].航空電子技術,2006,32(2):38-44.
[4]馬龍,杜道生.GIS中DEM產品精度的分析和評價[J].測繪信息與工程, 2003,28(3):4-6.
[5]馬友平,馮仲科,張志華,等.地形圖的R2V矢量化與ArcView的三維顯示[J].湖北民族學院學報:自然科學版,2007(3):331-334.
[6]戴振華.R2V與MapInfo在林業制圖中的組合應用[J].湖南林業科技,2003,30(2):57-58.
[7]王乘,周均清,李利軍.Creator可視化仿真建模技術[M].武漢:華中科技大學出版社,2005.
[8]王洪濤.深入剖析Visual C++編程技術及應用實例[M].北京:人民郵電出版社,2003.
[9]段琪慶,郝光榮,李培紅,等.在Mapinfo下制作DEM的程序設計及方法[J].山東建筑工程學院學報,2004(3):15-18.
[10]宗瑋,徐雷振.泰寧1∶1萬DEM的生成及應用[J].株洲師范高等專科學校學報,2005,10(5):31-33.
[11]郭艷萍,婁國勝.等高線三維顯示技術的探討[J].三晉測繪,2004(1):19-21.