GIS系統(tǒng)里DEM文件和DXF文件讀取GIS系統(tǒng)里DEM文件和DXF文件讀取。 昨天幫朋友做了個(gè)小玩意,一個(gè)讀usgs的DEM文件格式和DXF文件格式。 由于開始我對(duì)GIS的玩意一竅不通,經(jīng)過(guò)他許些專業(yè)術(shù)語(yǔ)的指點(diǎn),才弄出來(lái),其實(shí)也很簡(jiǎn)單。Let's start! 先說(shuō)簡(jiǎn)單的,DXF文件,DXF為文本文件,數(shù)據(jù)的儲(chǔ)存方式比較土。 <屬性0> <內(nèi)容0> <屬性1> <內(nèi)容1> 比如屬性10表示x,屬性20表示y,屬性30表示z,那么一個(gè)向量就是: 10 100.123 20 200.123 30 300.123 這樣,下面是一些比較重要的屬性: $EXTMAX //下面是描述寬高的最大值 66 //表示一個(gè)數(shù)據(jù)段的開始,每個(gè)數(shù)據(jù)段的第一個(gè)數(shù)據(jù)都是(0, 0),所以也可以通過(guò)檢測(cè)(0, 0)來(lái)判斷是否是一段數(shù)據(jù)的開始 每個(gè)數(shù)據(jù)段形成的是一個(gè)閉合的多邊形,可以用來(lái)創(chuàng)建windows下的rgn. 然后是DEM文件格式,同樣也是文本的,不過(guò)比較麻煩,不方便直接查看 比較重要的數(shù)據(jù)如下(我用的是ifstream進(jìn)行讀?。?/SPAN> 首先seekg到858的位置,然后讀入一個(gè)int,內(nèi)容是整個(gè)圖的y軸長(zhǎng)度, height 然后再讀兩個(gè)無(wú)用的int,in >> junk >> junk; 然后開始循環(huán)讀height組數(shù)據(jù),每組數(shù)據(jù)為每一行的高度值,并且每組數(shù)據(jù)的長(zhǎng)度也不一樣。 for(int i = 0; i < height; i ++) { in >> junk >> junk >> width; in.seekg(126, ios::cur);
for(int j = 0; j < width; j ++) { int z; in >> z; // 這里(i, j, z)就構(gòu)成了一個(gè)頂點(diǎn) } } DEM數(shù)據(jù)最簡(jiǎn)單的讀取就是這樣的,只不過(guò)DEM數(shù)據(jù)里的每一行的位置并不是固定的,所以如果最后結(jié)果要用3D方式描述出來(lái)的話,還需要讀入每一行的起始位置,這個(gè)信息在第一個(gè)循環(huán)的兩個(gè)junk中的一個(gè)。 |
|
|
來(lái)自: 木秀-- > 《工程認(rèn)知》