地形矢量數(shù)據(jù)dat生成地形tga軟件接口及流程_第1頁
地形矢量數(shù)據(jù)dat生成地形tga軟件接口及流程_第2頁
地形矢量數(shù)據(jù)dat生成地形tga軟件接口及流程_第3頁
地形矢量數(shù)據(jù)dat生成地形tga軟件接口及流程_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、地形矢量數(shù)據(jù)dat生成地形tga軟件接口及流程1.全局?jǐn)?shù)據(jù)結(jié)構(gòu)struct ElevPoint/建立鏈表的點(diǎn)結(jié)構(gòu)double x;double y;ElevPoint* next;struct Elev/建立等高線鏈表int nElev;/高程值(頭節(jié)點(diǎn)為-1)int nNum;/當(dāng)前高程值的節(jié)點(diǎn)個(gè)數(shù)(頭節(jié)點(diǎn)則存儲(chǔ)高程值個(gè)數(shù))bool bPolygon;/是否為封閉多邊形Elev* next;/下一個(gè)高程值鏈表(頭節(jié)點(diǎn)指向第一個(gè)高程值鏈表)ElevPoint* first;/某等高線第一個(gè)結(jié)點(diǎn)(頭節(jié)點(diǎn)為空);struct ElevNode/建立RSG規(guī)則網(wǎng)格高程值鏈表int nElev;Ele

2、vNode* next;struct GrayNode/建立灰度值鏈表unsigned char nGray;GrayNode* next;struct Pixel/定義24色像素BYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;/2 - uncompressed, rgb imagesstruct TGAHEADER BYTE IdLength; / Image ID Field Length BYTE CmapType; / Color Map Type BYTE ImageType; / Image Type(2) WORD CmapIndex; / Firs

3、t Entry Index WORD CmapLength; / Color Map Length BYTE CmapEntrySize; / Color Map Entry Size WORD X_Origin; / X-origin of Image WORD Y_Origin; / Y-origin of Image WORD ImageWidth; / Image Width WORD ImageHeight; / Image Height BYTE PixelDepth; / Pixel Depth(24,32) BYTE ImagDesc; / Image Descriptor(2

4、4-0,32-8);2.地形數(shù)據(jù)導(dǎo)入類/從特定dat數(shù)據(jù)文件生成CElevData類數(shù)據(jù)即二維鏈表矢量數(shù)據(jù)class CElevData public:CElevData();virtual CElevData();Elev* LoadElevFile(CString datfile);/裝載數(shù)據(jù)文件,返回鏈表頭節(jié)點(diǎn)算法:裝載數(shù)據(jù)文件,返回鏈表頭節(jié)點(diǎn):先定義了帶空頭節(jié)點(diǎn)的二重鏈表,然后采用了讀取數(shù)據(jù)判斷標(biāo)志位,若為整數(shù)并不為-999結(jié)束標(biāo)志,則將其設(shè)為高程值填充第一維鏈表;若為浮點(diǎn)數(shù),則為坐標(biāo)值填充對(duì)應(yīng)一維鏈表的第二維鏈表的方法來讀取數(shù)據(jù)文件,最后返回二重鏈表的頭節(jié)點(diǎn)int& GetMinEl

5、ev();/返回最小高程值int& GetMaxElev();/返回最大高程值double& GetXMin();/返回X方向最小值double& GetYMin();/返回Y方向最小值double& GetXMax();/返回X方向最大值double& GetYMax();/返回Y方向最大值;3.將導(dǎo)入的矢量數(shù)據(jù)轉(zhuǎn)換為柵格數(shù)據(jù)類/讀入的二維鏈表矢量數(shù)據(jù)轉(zhuǎn)換為一維鏈表柵格數(shù)據(jù)class CRsgData public:CRsgData(double XMin,double YMin,double XMax,double YMax,int nMin,int nMax);/根據(jù)X和Y方向坐標(biāo)計(jì)算v

6、irtual CRsgData();void SetXPoint(int nPoint);/設(shè)置X方向插值點(diǎn)數(shù)即將矢量數(shù)據(jù)轉(zhuǎn)換為柵格數(shù)據(jù)橫坐標(biāo)插值點(diǎn)數(shù)int GetXPoint();/返回X方向插值點(diǎn)數(shù)void SetYPoint(int nPoint);/設(shè)置Y方向插值點(diǎn)數(shù)即將矢量數(shù)據(jù)轉(zhuǎn)換為柵格數(shù)據(jù)縱坐標(biāo)插值點(diǎn)數(shù)int GetYPoint();/返回Y方向插值點(diǎn)數(shù)void SetXNormal(int nNormal);/設(shè)置X方向像素點(diǎn)數(shù)即標(biāo)準(zhǔn)tga數(shù)據(jù)的X方向像素?cái)?shù)int GetXNormal();/返回X方向像素點(diǎn)數(shù)void SetYNormal(int nNormal);/設(shè)置Y方向

7、像素點(diǎn)數(shù)即標(biāo)準(zhǔn)tga數(shù)據(jù)的Y方向像素?cái)?shù)int GetYNormal();/返回Y方向像素點(diǎn)數(shù)void SetLowElev(int nElev);/設(shè)置高程值下限int& GetLowElev();/返回高程值下限void SetHighElev(int nElev);/設(shè)置高程值上限int& GetHighElev();/返回高程值上限void SetMinGray(int nGray);/設(shè)置最小灰度值int& GetMinGray();/返回最小灰度值void SetMaxGray(int nGray);/設(shè)置最大灰度值int& GetMaxGray();/返回最大灰度值GrayNode

8、* RsgNormalize(Elev* head);/插值使矢量數(shù)據(jù)轉(zhuǎn)換為柵格數(shù)據(jù)并縮放數(shù)組使其標(biāo)準(zhǔn)化并變?yōu)橐痪S灰度值鏈表算法:先采用多邊形填充和線性插值算法插值使矢量數(shù)據(jù)轉(zhuǎn)換為柵格數(shù)據(jù)數(shù)組,然后使其標(biāo)準(zhǔn)化并變?yōu)橐痪S灰度值鏈表;4.將灰度值鏈表轉(zhuǎn)換為圖形tga類(可以裝載和保存及顯示標(biāo)準(zhǔn)tga文件即tga像素必為2的n次冪)/tga類顯示、裝載和存儲(chǔ)tga標(biāo)準(zhǔn)文件(像素大小必為2的n次冪)class CTga public:CTga();virtual CTga();int& GetRow();/獲取行值int& GetCol();/獲取列值int& GetTgaBits();/獲取tga每

9、個(gè)像素顏色位數(shù)(RGB24,RGBA32)bool SetDibData(GrayNode* pGray,int nRow = 128,int nCol =128,int nBits = 24);/將GrayNode數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)tga數(shù)據(jù)值(unsigned char *)算法:先構(gòu)造tga位圖數(shù)據(jù)數(shù)組,然后將GrayNode中的值按位圖數(shù)據(jù)格式填入位圖數(shù)組int Showtga(HDC hDC,LPRECT lpDCRect);/在指定矩形窗口顯示tga算法:提取tga像素?cái)?shù)據(jù)轉(zhuǎn)換為bmp位圖數(shù)據(jù)int LoadtgaFile(CString tgafile);/裝載tga文件算法:從tg

10、a文件中提取位圖數(shù)據(jù)bool SavetgaFile(CString tgafile);/保存tga文件算法:先將tga文件頭數(shù)據(jù)寫入tga文件,然后將Ctga中的位圖數(shù)據(jù)寫入tga文件;5.tga生成流程Dat規(guī)定矢量格式文件(逆時(shí)針數(shù)據(jù)、高程值整數(shù)、坐標(biāo)浮點(diǎn)數(shù))帶頭節(jié)點(diǎn)的二重鏈表(高程鏈表、節(jié)點(diǎn)鏈表)讀入Elev,ElevPoint鏈表填充一維灰度鏈表插值為柵格數(shù)據(jù)tga圖形數(shù)據(jù)即一維像素灰度數(shù)組(行列都為2的n次冪)GrayNode鏈表像素灰度填充 像素必為2的n次冪tga顯示(提取tga像素?cái)?shù)據(jù)轉(zhuǎn)換為bmp位圖數(shù)據(jù))和保存(寫入固定文件頭及tga數(shù)據(jù))難點(diǎn)和重點(diǎn):將矢量數(shù)據(jù)轉(zhuǎn)換為柵格數(shù)

11、據(jù)的算法采用了多邊形填充和線性插值算法: 根據(jù)設(shè)置的X和Y方向點(diǎn)數(shù)并利用插值算法將等高線(逆時(shí)針)二維鏈表轉(zhuǎn)換為按行列規(guī)則排列的高程值,若為多邊形(如森林、草地:某高程值首尾節(jié)點(diǎn)的坐標(biāo)一致),則采用邊界代數(shù)多邊形填充算法(Boundary Algebra Filling,簡(jiǎn)稱BAF),邊界代數(shù)轉(zhuǎn)換法的原理:初始化的柵格陣列各柵格值為零,欲填充多邊形編號(hào)為a的區(qū)域,即將區(qū)域內(nèi)柵格點(diǎn)的值變?yōu)閍,而區(qū)域外各點(diǎn)仍保持原值零。轉(zhuǎn)換時(shí),以柵格行列為參考坐標(biāo)軸,由多邊形邊界上某點(diǎn)為起點(diǎn)逆時(shí)針?biāo)阉鬟吔缇€,當(dāng)邊界線段為下行時(shí),位于搜索邊界曲線左側(cè)的具有相同行坐標(biāo)的所有柵格點(diǎn)被減去一個(gè)值a;當(dāng)邊界線段為上行時(shí),則將邊界曲線左邊(從曲線前進(jìn)方向看為左側(cè))所有具相同行坐標(biāo)的柵格點(diǎn)加上一個(gè)值a,當(dāng)沿邊界搜索運(yùn)算一周回到起

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論