鄒韜 曹紅艷 楊東升 石國良
摘要:針對在地理信息系統(tǒng)上繪制等高線時常常需要將全部高程數(shù)據(jù)讀入緩存,造成三維等高線渲染速度慢、繪制效率低的問題,本文提出了一種由用戶鼠標(biāo)選定關(guān)心區(qū)域,根據(jù)用戶指定采樣行數(shù)、采樣列數(shù)和等高線間距等參數(shù),高效、快速地在osgearth平臺上繪制三維等高線的一種畫法及實現(xiàn)。并將局部等高線做成插件,方便系統(tǒng)集成,其中的二維等值線算法也適用于計算二維等值面其他問題地實現(xiàn)。
關(guān)鍵詞:osgearth;局部等高線; 高程數(shù)據(jù)
中圖分類號:TN911 文獻標(biāo)識碼:A 文章編號:1009-3044(2018)09-0203-04
Abstract: For drawing the contour lines in the geographic information system often needs to be all the elevation data into the cache, resulting in slow rendering, 3D contour rendering problems of low efficiency, this paper proposes a mouse by the user selected regions of interest, according to user specified sampling number of rows, columns and contour sampling spacing, and achieve a drawing efficiently and quickly rendering 3D contour on the osgearth platform. In addition, the local contour line is made into a plug-in to facilitate the integration of the system, and the two dimensional contour algorithm is also applied to the realization of other problems of the two-dimensional ISO surface.
Key words: osgearth; local contour; elevation data
osg是一個開源的場景圖形管理開發(fā)庫,它對底層的opengl進行了封裝。osg擁有強大的插件庫,使用戶可以利用這些插件庫完成自己的應(yīng)用程序。osgearth是帶有GIS功能的osg圖形庫,利用它用戶可快速搭建起數(shù)字地球,及做出基于此的各種應(yīng)用程序。等高線的畫法是gis系統(tǒng)中不可回避的課題,也是gis系統(tǒng)中常用的功能。本文利用osgearth平臺及高程數(shù)據(jù),根據(jù)用戶給定的參數(shù),利用柵格算法,在地理信息系統(tǒng)上高效繪制出局部等高線。
1平臺概述
1.1坐標(biāo)系
坐標(biāo)系是GIS圖形系統(tǒng)圖形顯示、數(shù)據(jù)組織分析的基礎(chǔ),建立完善的坐標(biāo)投影系統(tǒng)對于GIS應(yīng)用來說是非常重要的。GIS系統(tǒng)的坐標(biāo)系大致有三種Plannar Coordinate System(平面坐標(biāo)系統(tǒng))Geographic Coordinate System(地理坐標(biāo)系統(tǒng))Projection Coordinate System(投影坐標(biāo)系統(tǒng))。平面坐標(biāo)系統(tǒng)常常在小范圍內(nèi)使用,它不需要投影或坐標(biāo)轉(zhuǎn)換。地理坐標(biāo)系統(tǒng)是球面坐標(biāo)系統(tǒng),是以經(jīng)緯度為單位進行存儲的。
地圖坐標(biāo)系統(tǒng)是由二個因素決定的:大地基準面和投影系統(tǒng)。大地基準面指特定橢球體對特定地區(qū)地球表面的逼近。我國的兩個大地基準面為北京54基準面和西安80基準面。投影坐標(biāo)系統(tǒng)就是利用不同的投影規(guī)則將球面坐標(biāo)投影到大地基準面上,從而得到不同的投影坐標(biāo)系統(tǒng)。常用的投影規(guī)則有:高斯-克呂格投影、墨卡托投影等。它們的主要區(qū)別在于南北網(wǎng)格的比例系數(shù)是上,高斯-克呂格投影的中央經(jīng)線投影后保持長度不變,即比例系數(shù)為1,而墨卡托投影的比例系數(shù)為0.9996。
本文采用WGS84坐標(biāo)系統(tǒng),基準面采用WGS84橢球體基準面。它是地心坐標(biāo)系,即以地心作為橢球體中心的坐標(biāo)系。橢球體長半軸為6378137米,短半軸為6356752.3142米。投影方式為高斯投影。在配置文件中進行如下設(shè)置:
1.2影像數(shù)據(jù)
影像數(shù)據(jù)也稱作紋理數(shù)據(jù),是地理信息系統(tǒng)中最基本的數(shù)據(jù)結(jié)構(gòu)。影像數(shù)據(jù)通常采用瓦片金字塔形式進行存儲。影像瓦片技術(shù)是一種地圖預(yù)緩存技術(shù),將配置好的一定坐標(biāo)范圍的地圖,按照固定的若干個比例尺(瓦片級別)和指定圖片尺寸,切成若干行及若干列的正方形圖片,以指定的格式保存成圖像文件,按照一定的命名規(guī)則和組織方式存儲到目錄系統(tǒng)中或是數(shù)據(jù)庫系統(tǒng)里,形成金字塔模型的靜態(tài)地圖緩存,影像瓦片所得到的地圖瓦片也稱瓦片(Tile)。影像瓦片金字塔模型是一種多分辨率層次模型,從瓦片金字塔的底層到頂層,分辨率越來越低,但表示的地理范圍不變。
影像瓦片采用四叉樹結(jié)構(gòu)進行瓦片劃分,四叉樹是一種每個非葉子節(jié)點最多只用4個分支的樹型結(jié)構(gòu),也是一種層次的數(shù)據(jù)結(jié)構(gòu),其特性是能夠?qū)崿F(xiàn)空間遞歸分解。以一副使用WGS84投影坐標(biāo)的地球全球地圖為例,在0圖層,這幅影像分成2個影像瓦片,每個瓦片跨度為180°*180°。 圖層1在圖層0影像的基礎(chǔ)上提高2倍的分辨率,也就是說對于同一影像,被分成90°*90°的片段,因此產(chǎn)生8塊影像瓦片。在圖層2,分辨率提高到含有32塊45°*45°的瓦片數(shù)據(jù),圖層3也就是22.5°*22.5°,含有128塊影像瓦片,以此類推。
影像瓦片文件的解析一般采用XML文件格式。影像瓦片文件表現(xiàn)為一個典型的樹狀結(jié)構(gòu)。根節(jié)點
子節(jié)點
<?xml version="1.0" encoding="UTF-8" ?>
<!--tiletype>hang_sjz_standard_hang
屬性TileFormat表示高程瓦片的尺寸為15*15像素的正方形,數(shù)據(jù)類型為heightfield,數(shù)據(jù)格式為osgb。加載影像高程后的地圖效果如下:
2 設(shè)計與實現(xiàn)
2.1原理
根據(jù)用戶確定的等高線劃分區(qū)域,高程采樣行列數(shù),利用線形差值方法,得到等高線區(qū)域內(nèi)所有采樣點經(jīng)緯度信息,壓入容器 vector中。從地理信息系統(tǒng)當(dāng)前等級高程瓦片數(shù)據(jù)中,由采樣點經(jīng)緯度值得到采樣點對應(yīng)的高程信息,同樣壓入到容器vector中。最后根據(jù)等高線間距對vector中的高程數(shù)據(jù)進行分組,得到每個采樣點的高度等級。這樣,把每個采樣點的經(jīng)緯度、高度、高度等級信息進行整理,壓入容器map中,作為數(shù)據(jù)源,供算法調(diào)用。
在采樣點容器map中,依據(jù)每四個相鄰點構(gòu)成一個矩形,作為等高線劃分基礎(chǔ)單元。由每個基礎(chǔ)單元的高度等級及高程瓦片數(shù)據(jù)的等高閾值,得出等高線與基礎(chǔ)單元四個采樣點之間的拓撲關(guān)系,繼而得到每條等高線與矩形邊的交點坐標(biāo)。利用線形插值的方法連接基礎(chǔ)單元邊界上高程值相等的點。其中,基礎(chǔ)單元頂點與等高線相交的拓撲關(guān)系有以下16種情況組成。加號表示頂點高程值大于等高線高程,減號表示頂點高程值小于等高線高程值。
按照拓撲關(guān)系,連接矩形中每兩個高度相同的交點為一條等高遍歷所有頂點,得到若干條等高線。遍歷所有等高線,遞歸查找有相同交點的相連等高線及相連等高線的相連等高線,直至所有具有相同交點的等高線都相連,得到若干條閉合的等高線。使用OSG的三維渲染技術(shù)根據(jù)等高線的頂點位置在三維地理信息系統(tǒng)中繪制等高線,并在每條等高線上標(biāo)注高度值。以下為基礎(chǔ)單元頂點與等高線交點拓撲關(guān)系圖:
2.2實現(xiàn)
為實現(xiàn)局部等高線插件化使用的目的,在程序設(shè)計中,創(chuàng)建ContourMeasure和ContourResult兩個類,其中CContourMeasure用于和用戶做交互,接收用戶的輸入?yún)?shù)。ContourResult則處理局部等高線的具體算法與實現(xiàn)。
利用CContourMeasure中的UpdateContour函數(shù)將用戶輸入?yún)?shù)傳入功能插件。ContourResult中SetContourInterval、SetRow、SetColumn對用戶傳入的參數(shù)進行設(shè)置,UpdateContourNode執(zhí)行是否從當(dāng)前瓦片數(shù)據(jù)中得到高程值,用于更新等高線瓦片數(shù)據(jù)的級別。CreatContourNode等高線繪制函數(shù),利用osgearth的osgEarth::Annotation::FeatureNode節(jié)點對等高線上高程值相等的交點連接,利用osgearth::GeoHeightField獲取當(dāng)前瓦片數(shù)據(jù)的高程值,用于計算等高線基礎(chǔ)單元的交點坐標(biāo)。程序流程圖如下:
利用函數(shù)addChild函數(shù)將等高線繪制葉子節(jié)點加入根節(jié)點root中,交給osg視景器osg::viewer進行渲染處理。CreatContourNode核心源代碼如下:
if (m_rpContourNode.valid())
{
removeChild(m_rpContourNode.get());
m_rpContourNode.release();
}
auto mapLineData = GetLineDataByPointData(m_vecPointData );
osgEarth::Features::FeatureList m_featureList;
while(listLineData.size()>0)
{
int nCount = 0;
auto pLineData = *listLineData.begin();
listLineData.erase(listLineData.begin());
osg::ref_ptr
Check(pLineDa ta,listLineData,rpLine,0,nCount);
rpLineFeature = new osgEarth::Features::Feature(rpLine, m_pSrs, osgEarth::Symbology::Style());
rpLineFeature->geoInterp() = osgEarth::GEOINTERP_RHUMB_LINE;
m_featureList.push_back(rpLineFeature);
}
m_rpContourNode = new osgEarth::Annotation::FeatureNode(m_pMapNode, m_featureList, m_Linestyle);
m_rpContourNode->getOrCreateStateSet()->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);m_rpContourNode->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON);
addChild(m_rpContourNode.get());
最后利用函數(shù)Frame函數(shù)對每一幀的數(shù)據(jù)進行刷新,視景器osg::viewer顯示每一幀局部等高線繪制結(jié)果。不同參數(shù)局部等高線的繪制顯示效果如下:
1) 采樣等級相同,采樣行列數(shù)不同
采樣等級100,采樣行數(shù)列數(shù)100*100
采樣等級100,采樣行數(shù)列數(shù)1000*1000
2) 采樣行列數(shù)相同,采樣等級不同
3結(jié)束語
本文以osgearth為基礎(chǔ)地理信息平臺,分層提取了DEM高程數(shù)據(jù),根據(jù)用戶給定的局部地理信息參數(shù)、等高線采樣行列數(shù)、等高線等級參數(shù),構(gòu)建起等高線繪制基礎(chǔ)單元。依據(jù)局部地理范圍內(nèi)等高線與基礎(chǔ)單元相交的16種拓撲關(guān)系,循環(huán)遍歷了每個等高線繪制基礎(chǔ)單元。利用線形插值方法將高程值相等的交點連接起來。最后所有基礎(chǔ)單元中的等高線構(gòu)成整個區(qū)域的等高線顯示效果。這種方法,不僅地提高了等高線的渲染效率,而且顯示范圍靈活可控,作為地理信息系統(tǒng)的基本功能,封裝成插件形式,方便項目靈活調(diào)用。
參考文獻:
[1] 聶欣,李鑫慧,吳良林.基于DEM生成等高線的方法[J].地理空間信息,2009,7(4):85-87.
[2] 陳鐘鳴,閆建強。一種由DEM獲取等高線的方法[J].物探裝備,2017,27(2):130-132
[3] 邊淑莉,柳佳佳,王海龍,等.基于規(guī)則格網(wǎng)DEM的等高線提取算法的優(yōu)化與實現(xiàn)[J].測繪科學(xué),2008,33(6):151-153.
[4] 肖鵬,劉更代,徐明亮.OpenSceneGraph 三維渲染引擎編程指南[M].北京:清華大學(xué)出版社,2010.
[5] 趙建三.基于格網(wǎng)DEM 的自適應(yīng)等高線內(nèi)插方法[J].中南工業(yè)大學(xué)學(xué)報,2003,34(3):315-318.
[6] 張顯全,劉忠平.基于格網(wǎng)模型的等高線算法[J].計算機科學(xué),2005,33(9):199-201.