本發(fā)明涉及地理信息系統(tǒng)(gis)和計算機圖形學(xué)領(lǐng)域,尤其涉及一種基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法。
背景技術(shù):
1、近年來,隨著地理信息系統(tǒng)技術(shù)和計算機圖形技術(shù)的迅猛發(fā)展,人們對于數(shù)字高程模型(dem)數(shù)據(jù)處理和虛擬地形生成的需求也越來越高。傳統(tǒng)的地形數(shù)據(jù)處理和生成方法通常需要通過繁瑣的軟件處理和人工的手動工序,耗時且容易出錯,地形生成的準確率及可視化效果也隨之下降。
2、目前有針對自然科學(xué)領(lǐng)域的dem地形掃描或地形生成方法,例如地理學(xué)和地質(zhì)學(xué)等領(lǐng)域的dem地形提取方法,但尚未有基于主流游戲引擎的dem數(shù)據(jù)三維地形可視化生成的流程和方法。
技術(shù)實現(xiàn)思路
1、本發(fā)明針對現(xiàn)有技術(shù)存在的上述不足,提供了一種基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,包括下述步驟:
2、第1步,對dem高程數(shù)據(jù)進行預(yù)處理,獲得規(guī)范的地形數(shù)據(jù),所述規(guī)范的地形數(shù)據(jù)是指符合標準地理空間數(shù)據(jù)規(guī)范、地圖瓦片規(guī)范、柵格數(shù)據(jù)規(guī)范的地形數(shù)據(jù);
3、第2步,對規(guī)范的地形數(shù)據(jù)進行讀取解析,獲得dem高程源數(shù)據(jù),包括對元數(shù)據(jù)進行讀取和解析,并存儲在下述定義的類中,用于后續(xù)的三維網(wǎng)格生成:
4、dem數(shù)據(jù)類規(guī)定了三個變量,包括地形的width行、height列以及mdata[]高度數(shù)據(jù)數(shù)組,此類用于存儲解析后的高程元數(shù)據(jù),
5、utm類規(guī)定了兩個變量,包括utmx摩卡爾投影坐標x以及utmy摩卡爾投影坐標y,此類用于存儲該地塊數(shù)據(jù)解析后的utm坐標;
6、第3步,生成unity?terrain地形,輸出標準化三維地形網(wǎng)格數(shù)據(jù),包括在unity中生成.tif高程數(shù)據(jù)對應(yīng)的標準化三維地形,unity?terrain地形生成旨在通過unity?api將讀取到的源數(shù)據(jù)在unity中實現(xiàn)數(shù)據(jù)重建和三維地形可視化。
7、進一步的是,所述第1步包括:對于通過任意數(shù)據(jù)源獲得的.tif地形數(shù)據(jù)或是地理信息數(shù)據(jù),首先進行1.1步:判斷其是否是utm通用墨卡爾投影,如果不是,則將數(shù)據(jù)調(diào)整至utm投影進行處理,然后進入1.2步;如若是utm投影,則直接進入進入1.2步,第1.2步包括:判斷數(shù)據(jù)源的分辨率大小是否為標準格式分辨率,若分辨率不符合標準貼圖格式,則使用切分工具進行地形切分,將元數(shù)據(jù)的分辨率進行重新裁切,裁切至標準格式大小,若分辨率符合標準貼圖格式,則直接導(dǎo)出,或進行進一步細分再進行瓦片切分導(dǎo)出。
8、進一步的是,規(guī)范的地形數(shù)據(jù)采用標準的地理空間參考系統(tǒng),采用的投影方式為utm投影,地形的精度單位為米或千米,分辨率以2的整次冪大小進行約束。
9、進一步的是,在第2步中,使用tiff.open方法打開指定路徑的tiff圖像文件,通過image.getfield方法獲取圖像的寬度和高度,并將其分別賦值給dem的width和height屬性;調(diào)用image.scanlinesize方法獲取一行數(shù)據(jù)的字節(jié)總數(shù),使用兩層循環(huán)循環(huán)遍歷圖像的寬度和高度,在內(nèi)循環(huán)中,將一行遍歷獲得的數(shù)據(jù)以每四個字節(jié)進行分割即四個字節(jié)為一個單精度float,從而獲得每行對應(yīng)所有的高度數(shù)據(jù),并存儲在mdata中,自此就得到了地形所有的寬高索引以及高度元數(shù)據(jù)。
10、進一步的是,在第2步中,在得到了地形所有的寬高索引以及高度元數(shù)據(jù)后,通過tifftag.geotiff_modeltiepointtag獲得頂點的綁定信息,在其中取出索引為1的btye數(shù)組,其中存儲的是綁定點的utm坐標信息;接著,使用bitconverter.todouble方法從中讀取utm坐標信息,將讀取到的utm坐標保存到utm類中,自此就得到了地形當前地塊的utm坐標信息。
11、進一步的是,所述第3步包括:第3.1步,高度差校正計算,計算出每個地塊相對整體數(shù)據(jù)的高度偏移值,最后將偏移值賦予給自身地形的整體高度,以實現(xiàn)地塊間的無縫拼接;第3.2步,計算地塊高度,通過絕對值比較獲得當前地塊的實際高度;第3.3步,映射地塊高度數(shù)組,將所有高度值映射至[0,1]區(qū)間,并重新存儲為高度數(shù)組;第3.4步,計算地塊位置,計算每個地塊的左下角位置坐標,實現(xiàn)地塊按照坐標信息正確、自動化排列;第3.5步,調(diào)用unity地形api來生成最終的地塊三維網(wǎng)格模型。
12、進一步的是,所述3.4步包括:取得第2步中utm類中的utmx和utmy,將utmx減去某個為基準起始地塊的utmx值,utmy同理計算,最后獲得兩個轉(zhuǎn)換完成的地塊坐標:convertedutmx和convertedutmy。
13、進一步的是,所述3.5步包括:首先,定義一個新的terrain物體以及terraindata,將以上計算獲得的所有數(shù)據(jù)賦予給這個terrain,
14、接著,獲得第2步元數(shù)據(jù)中的寬度,將寬度值賦予給terrain的heightmapresolutions,
15、接著,將3.1中計算所得的offsetheight賦予給terrain的世界位置transform.y,
16、接著,將3.2中計算所得的實際地塊高度terrainheight賦予給terraindata.size的y值,
17、接著,將3.3中計算所得的重映射高度數(shù)據(jù),通過terraindata.setheights方法給地形的高度進行賦值,
18、接著,將3.4中計算所得的convertedutmx和convertedutmy賦予給terrain的世界transform.x及transform.z,
19、接著,將width加1賦予給terrain的terraindata.heightmapresolution,
20、接著,將width及terrainheight賦予給terrain的terraindata.size,
21、接著,使用terrain的相關(guān)api完成terrain世界物體生成的功能,
22、到此,便完成了地塊三維網(wǎng)格的生成。
23、進一步的是,所述第3步進一步包括:第3.6步,通過獲得地形地塊貼圖文件路徑索引讀取貼圖數(shù)據(jù),使用terrainlayer相關(guān)api接口賦予對應(yīng)地形的貼圖顏色。
24、進一步的是,其進一步包括:第4步,構(gòu)建生成地形工具并利用獲得的標準化三維地形數(shù)據(jù)生成可視化的地形展示。
25、本發(fā)明能自動化速生成、處理地形數(shù)據(jù),節(jié)省了大量的時間和人力資源,較大程度提高了地形數(shù)據(jù)處理的效率。
1.一種基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,包括下述步驟:
2.根據(jù)權(quán)利要求1所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,所述第1步包括:對于通過任意數(shù)據(jù)源獲得的.tif地形數(shù)據(jù)或是地理信息數(shù)據(jù),首先進行1.1步:判斷其是否是utm通用墨卡爾投影,如果不是,則將數(shù)據(jù)調(diào)整至utm投影進行處理,然后進入1.2步;如若是utm投影,則直接進入進入1.2步,第1.2步包括:判斷數(shù)據(jù)源的分辨率大小是否為標準格式分辨率,若分辨率不符合標準貼圖格式,則使用切分工具進行地形切分,將元數(shù)據(jù)的分辨率進行重新裁切,裁切至標準格式大小,若分辨率符合標準貼圖格式,則直接導(dǎo)出,或進行進一步細分再進行瓦片切分導(dǎo)出。
3.根據(jù)權(quán)利要求1所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,規(guī)范的地形數(shù)據(jù)采用標準的地理空間參考系統(tǒng),采用的投影方式為utm投影,地形的精度單位為米或千米,分辨率以2的整次冪大小進行約束。
4.根據(jù)權(quán)利要求1所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,在第2步中,使用tiff.open方法打開指定路徑的tiff圖像文件,通過image.getfield方法獲取圖像的寬度和高度,并將其分別賦值給dem的width和height屬性;調(diào)用image.scanlinesize方法獲取一行數(shù)據(jù)的字節(jié)總數(shù),使用兩層循環(huán)循環(huán)遍歷圖像的寬度和高度,在內(nèi)循環(huán)中,將一行遍歷獲得的數(shù)據(jù)以每四個字節(jié)進行分割即四個字節(jié)為一個單精度float,從而獲得每行對應(yīng)所有的高度數(shù)據(jù),并存儲在mdata中,自此就得到了地形所有的寬高索引以及高度元數(shù)據(jù)。
5.根據(jù)權(quán)利要求1所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,在第2步中,在得到了地形所有的寬高索引以及高度元數(shù)據(jù)后,通過tifftag.geotiff_modeltiepointtag獲得頂點的綁定信息,在其中取出索引為1的btye數(shù)組,其中存儲的是綁定點的utm坐標信息;接著,使用bitconverter.todouble方法從中讀取utm坐標信息,將讀取到的utm坐標保存到utm類中,自此就得到了地形當前地塊的utm坐標信息。
6.根據(jù)權(quán)利要求1所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,所述第3步包括:第3.1步,高度差校正計算,計算出每個地塊相對整體數(shù)據(jù)的高度偏移值,最后將偏移值賦予給自身地形的整體高度,以實現(xiàn)地塊間的無縫拼接;第3.2步,計算地塊高度,通過絕對值比較獲得當前地塊的實際高度;第3.3步,映射地塊高度數(shù)組,將所有高度值映射至[0,1]區(qū)間,并重新存儲為高度數(shù)組;第3.4步,計算地塊位置,計算每個地塊的左下角位置坐標,實現(xiàn)地塊按照坐標信息正確、自動化排列;第3.5步,調(diào)用unity地形api來生成最終的地塊三維網(wǎng)格模型。
7.根據(jù)權(quán)利要求6所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,所述3.4步包括:取得第2步中utm類中的utmx和utmy,將utmx減去某個為基準起始地塊的utmx值,utmy同理計算,最后獲得兩個轉(zhuǎn)換完成的地塊坐標:convertedutmx和convertedutmy。
8.根據(jù)權(quán)利要求6所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,所述3.5步包括:首先,定義一個新的terrain物體以及terraindata,將以上計算獲得的所有數(shù)據(jù)賦予給這個terrain,
9.根據(jù)權(quán)利要求6所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,所述第3步進一步包括:第3.6步,通過獲得地形地塊貼圖文件路徑索引讀取貼圖數(shù)據(jù),使用terrainlayer相關(guān)api接口賦予對應(yīng)地形的貼圖顏色。
10.根據(jù)權(quán)利要求1所述的基于dem高程數(shù)據(jù)處理和生成對應(yīng)三維地形的通用處理方法,其特征在于,其進一步包括:第4步,構(gòu)建生成地形工具并利用獲得的標準化三維地形數(shù)據(jù)生成可視化的地形展示。