国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于osgearth局部等高線畫法研究及實(shí)現(xiàn)

2018-05-28 11:10鄒韜曹紅艷楊東升石國(guó)良
電腦知識(shí)與技術(shù) 2018年9期

鄒韜 曹紅艷 楊東升 石國(guó)良

摘要:針對(duì)在地理信息系統(tǒng)上繪制等高線時(shí)常常需要將全部高程數(shù)據(jù)讀入緩存,造成三維等高線渲染速度慢、繪制效率低的問題,本文提出了一種由用戶鼠標(biāo)選定關(guān)心區(qū)域,根據(jù)用戶指定采樣行數(shù)、采樣列數(shù)和等高線間距等參數(shù),高效、快速地在osgearth平臺(tái)上繪制三維等高線的一種畫法及實(shí)現(xiàn)。并將局部等高線做成插件,方便系統(tǒng)集成,其中的二維等值線算法也適用于計(jì)算二維等值面其他問題地實(shí)現(xiàn)。

關(guān)鍵詞:osgearth;局部等高線; 高程數(shù)據(jù)

中圖分類號(hào):TN911 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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是一個(gè)開源的場(chǎng)景圖形管理開發(fā)庫,它對(duì)底層的opengl進(jìn)行了封裝。osg擁有強(qiáng)大的插件庫,使用戶可以利用這些插件庫完成自己的應(yīng)用程序。osgearth是帶有GIS功能的osg圖形庫,利用它用戶可快速搭建起數(shù)字地球,及做出基于此的各種應(yīng)用程序。等高線的畫法是gis系統(tǒng)中不可回避的課題,也是gis系統(tǒng)中常用的功能。本文利用osgearth平臺(tái)及高程數(shù)據(jù),根據(jù)用戶給定的參數(shù),利用柵格算法,在地理信息系統(tǒng)上高效繪制出局部等高線。

1平臺(tái)概述

1.1坐標(biāo)系

坐標(biāo)系是GIS圖形系統(tǒng)圖形顯示、數(shù)據(jù)組織分析的基礎(chǔ),建立完善的坐標(biāo)投影系統(tǒng)對(duì)于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)緯度為單位進(jìn)行存儲(chǔ)的。

地圖坐標(biāo)系統(tǒng)是由二個(gè)因素決定的:大地基準(zhǔn)面和投影系統(tǒng)。大地基準(zhǔn)面指特定橢球體對(duì)特定地區(qū)地球表面的逼近。我國(guó)的兩個(gè)大地基準(zhǔn)面為北京54基準(zhǔn)面和西安80基準(zhǔn)面。投影坐標(biāo)系統(tǒng)就是利用不同的投影規(guī)則將球面坐標(biāo)投影到大地基準(zhǔn)面上,從而得到不同的投影坐標(biāo)系統(tǒng)。常用的投影規(guī)則有:高斯-克呂格投影、墨卡托投影等。它們的主要區(qū)別在于南北網(wǎng)格的比例系數(shù)是上,高斯-克呂格投影的中央經(jīng)線投影后保持長(zhǎng)度不變,即比例系數(shù)為1,而墨卡托投影的比例系數(shù)為0.9996。

本文采用WGS84坐標(biāo)系統(tǒng),基準(zhǔn)面采用WGS84橢球體基準(zhǔn)面。它是地心坐標(biāo)系,即以地心作為橢球體中心的坐標(biāo)系。橢球體長(zhǎng)半軸為6378137米,短半軸為6356752.3142米。投影方式為高斯投影。在配置文件中進(jìn)行如下設(shè)置:

epsg:4326

1.2影像數(shù)據(jù)

影像數(shù)據(jù)也稱作紋理數(shù)據(jù),是地理信息系統(tǒng)中最基本的數(shù)據(jù)結(jié)構(gòu)。影像數(shù)據(jù)通常采用瓦片金字塔形式進(jìn)行存儲(chǔ)。影像瓦片技術(shù)是一種地圖預(yù)緩存技術(shù),將配置好的一定坐標(biāo)范圍的地圖,按照固定的若干個(gè)比例尺(瓦片級(jí)別)和指定圖片尺寸,切成若干行及若干列的正方形圖片,以指定的格式保存成圖像文件,按照一定的命名規(guī)則和組織方式存儲(chǔ)到目錄系統(tǒng)中或是數(shù)據(jù)庫系統(tǒng)里,形成金字塔模型的靜態(tài)地圖緩存,影像瓦片所得到的地圖瓦片也稱瓦片(Tile)。影像瓦片金字塔模型是一種多分辨率層次模型,從瓦片金字塔的底層到頂層,分辨率越來越低,但表示的地理范圍不變。

影像瓦片采用四叉樹結(jié)構(gòu)進(jìn)行瓦片劃分,四叉樹是一種每個(gè)非葉子節(jié)點(diǎn)最多只用4個(gè)分支的樹型結(jié)構(gòu),也是一種層次的數(shù)據(jù)結(jié)構(gòu),其特性是能夠?qū)崿F(xiàn)空間遞歸分解。以一副使用WGS84投影坐標(biāo)的地球全球地圖為例,在0圖層,這幅影像分成2個(gè)影像瓦片,每個(gè)瓦片跨度為180°*180°。 圖層1在圖層0影像的基礎(chǔ)上提高2倍的分辨率,也就是說對(duì)于同一影像,被分成90°*90°的片段,因此產(chǎn)生8塊影像瓦片。在圖層2,分辨率提高到含有32塊45°*45°的瓦片數(shù)據(jù),圖層3也就是22.5°*22.5°,含有128塊影像瓦片,以此類推。

影像瓦片文件的解析一般采用XML文件格式。影像瓦片文件表現(xiàn)為一個(gè)典型的樹狀結(jié)構(gòu)。根節(jié)點(diǎn)資源表示一個(gè)完整的地圖,子節(jié)點(diǎn)表示該地圖的名稱,子節(jié)點(diǎn)<abstract>表示該地圖的簡(jiǎn)要描述,子節(jié)點(diǎn)<srs>表示該地圖使用的空間參考,子節(jié)點(diǎn)<origin>表示原點(diǎn)坐標(biāo)。</p><p>子節(jié)點(diǎn)<tilesets>的子節(jié)點(diǎn)集合< TileSet>由規(guī)則采樣圖像數(shù)據(jù)塊構(gòu)成,一個(gè)<tileset>表示在某一尺度上一系列固定大小均勻采樣數(shù)據(jù)塊。一個(gè)<tileset>的存儲(chǔ)路徑由<href>屬性決定。Units-per-pixel表示瓦片的分辨率,即每個(gè)像素代表的度數(shù)。配置文件做如下設(shè)置:</p><p><?xml version="1.0" encoding="UTF-8" ?></p><p><tilemap tilemapservice="http://127.0.0.1/" version="1.0.0"></p><p><title>ImageLayers

osgeaeth Soft

epsg:4326

<!--tiletype>hang_sjz_standard_hang

屬性TileFormat表示高程瓦片的尺寸為15*15像素的正方形,數(shù)據(jù)類型為heightfield,數(shù)據(jù)格式為osgb。加載影像高程后的地圖效果如下:

2 設(shè)計(jì)與實(shí)現(xiàn)

2.1原理

根據(jù)用戶確定的等高線劃分區(qū)域,高程采樣行列數(shù),利用線形差值方法,得到等高線區(qū)域內(nèi)所有采樣點(diǎn)經(jīng)緯度信息,壓入容器 vector中。從地理信息系統(tǒng)當(dāng)前等級(jí)高程瓦片數(shù)據(jù)中,由采樣點(diǎn)經(jīng)緯度值得到采樣點(diǎn)對(duì)應(yīng)的高程信息,同樣壓入到容器vector中。最后根據(jù)等高線間距對(duì)vector中的高程數(shù)據(jù)進(jìn)行分組,得到每個(gè)采樣點(diǎn)的高度等級(jí)。這樣,把每個(gè)采樣點(diǎn)的經(jīng)緯度、高度、高度等級(jí)信息進(jìn)行整理,壓入容器map中,作為數(shù)據(jù)源,供算法調(diào)用。

在采樣點(diǎn)容器map中,依據(jù)每四個(gè)相鄰點(diǎn)構(gòu)成一個(gè)矩形,作為等高線劃分基礎(chǔ)單元。由每個(gè)基礎(chǔ)單元的高度等級(jí)及高程瓦片數(shù)據(jù)的等高閾值,得出等高線與基礎(chǔ)單元四個(gè)采樣點(diǎn)之間的拓?fù)潢P(guān)系,繼而得到每條等高線與矩形邊的交點(diǎn)坐標(biāo)。利用線形插值的方法連接基礎(chǔ)單元邊界上高程值相等的點(diǎn)。其中,基礎(chǔ)單元頂點(diǎn)與等高線相交的拓?fù)潢P(guān)系有以下16種情況組成。加號(hào)表示頂點(diǎn)高程值大于等高線高程,減號(hào)表示頂點(diǎn)高程值小于等高線高程值。

按照拓?fù)潢P(guān)系,連接矩形中每?jī)蓚€(gè)高度相同的交點(diǎn)為一條等高遍歷所有頂點(diǎn),得到若干條等高線。遍歷所有等高線,遞歸查找有相同交點(diǎn)的相連等高線及相連等高線的相連等高線,直至所有具有相同交點(diǎn)的等高線都相連,得到若干條閉合的等高線。使用OSG的三維渲染技術(shù)根據(jù)等高線的頂點(diǎn)位置在三維地理信息系統(tǒng)中繪制等高線,并在每條等高線上標(biāo)注高度值。以下為基礎(chǔ)單元頂點(diǎn)與等高線交點(diǎn)拓?fù)潢P(guān)系圖:

2.2實(shí)現(xiàn)

為實(shí)現(xiàn)局部等高線插件化使用的目的,在程序設(shè)計(jì)中,創(chuàng)建ContourMeasure和ContourResult兩個(gè)類,其中CContourMeasure用于和用戶做交互,接收用戶的輸入?yún)?shù)。ContourResult則處理局部等高線的具體算法與實(shí)現(xiàn)。

利用CContourMeasure中的UpdateContour函數(shù)將用戶輸入?yún)?shù)傳入功能插件。ContourResult中SetContourInterval、SetRow、SetColumn對(duì)用戶傳入的參數(shù)進(jìn)行設(shè)置,UpdateContourNode執(zhí)行是否從當(dāng)前瓦片數(shù)據(jù)中得到高程值,用于更新等高線瓦片數(shù)據(jù)的級(jí)別。CreatContourNode等高線繪制函數(shù),利用osgearth的osgEarth::Annotation::FeatureNode節(jié)點(diǎn)對(duì)等高線上高程值相等的交點(diǎn)連接,利用osgearth::GeoHeightField獲取當(dāng)前瓦片數(shù)據(jù)的高程值,用于計(jì)算等高線基礎(chǔ)單元的交點(diǎn)坐標(biāo)。程序流程圖如下:

利用函數(shù)addChild函數(shù)將等高線繪制葉子節(jié)點(diǎn)加入根節(jié)點(diǎn)root中,交給osg視景器osg::viewer進(jìn)行渲染處理。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 rpLine = new osgEarth::Symbology::LineString;

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ù)對(duì)每一幀的數(shù)據(jù)進(jìn)行刷新,視景器osg::viewer顯示每一幀局部等高線繪制結(jié)果。不同參數(shù)局部等高線的繪制顯示效果如下:

1) 采樣等級(jí)相同,采樣行列數(shù)不同

采樣等級(jí)100,采樣行數(shù)列數(shù)100*100

采樣等級(jí)100,采樣行數(shù)列數(shù)1000*1000

2) 采樣行列數(shù)相同,采樣等級(jí)不同

3結(jié)束語

本文以osgearth為基礎(chǔ)地理信息平臺(tái),分層提取了DEM高程數(shù)據(jù),根據(jù)用戶給定的局部地理信息參數(shù)、等高線采樣行列數(shù)、等高線等級(jí)參數(shù),構(gòu)建起等高線繪制基礎(chǔ)單元。依據(jù)局部地理范圍內(nèi)等高線與基礎(chǔ)單元相交的16種拓?fù)潢P(guān)系,循環(huán)遍歷了每個(gè)等高線繪制基礎(chǔ)單元。利用線形插值方法將高程值相等的交點(diǎn)連接起來。最后所有基礎(chǔ)單元中的等高線構(gòu)成整個(gè)區(qū)域的等高線顯示效果。這種方法,不僅地提高了等高線的渲染效率,而且顯示范圍靈活可控,作為地理信息系統(tǒng)的基本功能,封裝成插件形式,方便項(xiàng)目靈活調(diào)用。

參考文獻(xiàn):

[1] 聶欣,李鑫慧,吳良林.基于DEM生成等高線的方法[J].地理空間信息,2009,7(4):85-87.

[2] 陳鐘鳴,閆建強(qiáng)。一種由DEM獲取等高線的方法[J].物探裝備,2017,27(2):130-132

[3] 邊淑莉,柳佳佳,王海龍,等.基于規(guī)則格網(wǎng)DEM的等高線提取算法的優(yōu)化與實(shí)現(xiàn)[J].測(cè)繪科學(xué),2008,33(6):151-153.

[4] 肖鵬,劉更代,徐明亮.OpenSceneGraph 三維渲染引擎編程指南[M].北京:清華大學(xué)出版社,2010.

[5] 趙建三.基于格網(wǎng)DEM 的自適應(yīng)等高線內(nèi)插方法[J].中南工業(yè)大學(xué)學(xué)報(bào),2003,34(3):315-318.

[6] 張顯全,劉忠平.基于格網(wǎng)模型的等高線算法[J].計(jì)算機(jī)科學(xué),2005,33(9):199-201.