李青青,徐良驥,翟應(yīng)峰
(1.安徽理工大學 測繪學院,安徽 淮南232001)
基于ArcGIS Engine的開采沉陷數(shù)據(jù)處理和可視化
李青青1,徐良驥1,翟應(yīng)峰1
(1.安徽理工大學 測繪學院,安徽 淮南232001)
調(diào)用工作面內(nèi)的參數(shù),利用ArcGIS Engine通過概率積分法計算得出工作面內(nèi)任意點的下沉值,并根據(jù)得出的沉陷值生成圖像。這樣就可以比較直觀地將地表的變形情況展現(xiàn)出來,既能輸出具體變形數(shù)值,又能夠以圖像的形式表達。
Arc Objects;沉陷;參數(shù);概率積分法;圖像
GIS的發(fā)展與普及為礦山開采沉陷控制提供了一種數(shù)據(jù)處理與可視化的方法與途徑[1]。對于采區(qū)的變形監(jiān)測數(shù)據(jù)進行處理,根據(jù)主要影響參數(shù)計算出沉陷值,包括數(shù)據(jù)處理和可視化2個主要部分。此文基于ArcObjects進行開采沉陷數(shù)據(jù)處理與可視化的表達。因為地表下沉比較抽象,地下開采后對地表的影響需要三維圖像對其進行逼真的描繪和定量化的表達,利用已知的數(shù)據(jù)對其進行三維可視化表達,給地下開采后地表沉陷比較直觀形象的圖像[2,3],便于直觀的觀察和研究。
1.1 ArcGIS Engine技術(shù)
ArcGIS Engine(AE)是用于構(gòu)建定制應(yīng)用的一個完整的嵌入式GIS組件庫,它可以為用戶提供針對GIS解決方案的定制應(yīng)用[4]。利用 ArcGIS Engine ,開發(fā)者可以將 ArcGIS 功能集成到一些應(yīng)用軟件中,但它并不是一個最終產(chǎn)品,而是一組ArcObjects 軟件開發(fā)包[5]。
ArcGIS Engine可以在Windows、UNIX和Linux桌面上運行并支持一系列的應(yīng)用軟件開發(fā)環(huán)境,包括Visual Basic 6,Microsoft Visual Studio NET和各種Java開發(fā)環(huán)境如表1[6]。
表1 ArcGIS Engine支持一系列操作系統(tǒng)平臺和編程語言
此文主要是利用了ArcGIS Engine提供的幾種控件——MapControl、ToolbarControl、PageLayOutControl,以及用于三維場景顯示的SceneControl等進行開發(fā),并且對于開發(fā)出的應(yīng)用程序賦予了一定的license,可以單獨運行于沒有任何ArcGIS程序的微機上。
1.2 Visual C#.NET簡介
Visual C#.NET是一套綜合工具集,用于為Microsoft Windows和Web創(chuàng)建XML Web服務(wù)和基于Microsoft.NET的應(yīng)用程序。Visual C#.NET是基于強大的C++傳統(tǒng)語言創(chuàng)建的。C#是一種現(xiàn)代化的面向?qū)ο蟮某绦蜷_發(fā)語言,它使程序員能夠在微軟.NET平臺上快捷開發(fā)種類豐富的應(yīng)用程序。.NET平臺提供了大量的工具盒服務(wù),能夠最大限度地挖掘和使用計算及通信能力[7]。
系統(tǒng)以微軟的Visual Studio.NET為開發(fā)環(huán)境,它是一個功能強大、高效并且可擴展的編程環(huán)境[8]。在語言上主要基于C#編程為主體程序并且調(diào)用其他功能模塊實現(xiàn)系統(tǒng)的功能。
概率積分法是因其所用的移動和變形預(yù)計公式中含有概率積分(或其導數(shù))而得名。由于這種方法的基礎(chǔ)是隨機介質(zhì)理論,所以又叫隨機介質(zhì)理論[9]。在二維情況下,若開采單元的橫坐標為s,地表任意點A的坐標為x,則此單元開采引起的A點的下沉為:
若煤層是水平的,煤層坐標系(t,s)和地面坐標(x,y)的水平投影重合,則單元B(坐標為(s,t))的開采引起地表任意點a(坐標為(x,y))的下沉W0(x,y)為[10]:
程序是根據(jù)概率積分法思想來實現(xiàn)的。從統(tǒng)計觀點看,概率積分法認為任意開采條件下都可以把整個開采分解為許多或無線多個微小單元的開采,整個開采對地表的影響等于所有單元影響的總和,而可以從單元開采入手,研究下沉盆地的方程式。主程序流程如圖1所示。
圖1 主程序流程圖
此文基于AE編程,調(diào)用工作面參數(shù),根據(jù)概率積分法原理,計算得出工作面內(nèi)任意點的下沉值,并根據(jù)沉陷值生成圖像[11]。計算中主要用到MapControl、TOCControl、ToolbarControl、SceneControl4個控件。需要說明的是,每個AE程序都要加一個LicenseControl控件。
操作基本上按圖1主程序流程圖進行,主要分為以下幾個步驟:
第1步,數(shù)據(jù)處理。點擊“生成下沉值”按鈕,輸入工作面參數(shù),確定后輸入保存路徑,保存處理后的數(shù)據(jù)。
第2步,數(shù)據(jù)格式轉(zhuǎn)換,將txt文本轉(zhuǎn)換為Shapefile格式的文件。
第3步,加載數(shù)據(jù),生成點狀圖像。
第4步,生成TIN,并在MapControl與SceneControl中同步顯示。
4.1 數(shù)據(jù)處理
首先,需要收集采區(qū)的部分參數(shù)。本設(shè)計用到的采區(qū)參數(shù)主要包括:平均開采厚度、下沉系數(shù)、煤層傾角弧度、走向巖層厚度、上山覆巖厚度、下山覆巖厚度、走向長度、傾向長度、左邊界拐點偏移距、右邊界拐點偏移距、上邊界拐點偏移距、下邊界拐點偏移距、最大影響角正切值,這些數(shù)值收集和整理后可以在系統(tǒng)運行的時候輸入到沉陷預(yù)計參數(shù)界面里面。
最大影響半徑、工作面的長度和寬度、最大下沉值都可以根據(jù)以上這些參數(shù)通過概率積分法計算得出,然后計算工作面內(nèi)任意點的下沉值并輸出最終的下沉數(shù)據(jù)。下面給出計算任意點下沉值的方法。
在開采水平煤層時,設(shè)煤層采出厚度為m,開采面積為F,如圖2所示,則開采單元積dF引起地表點的下沉將為DW0=q·mf(S)dF,當面積F全部采出后,地表點A的總下沉值為WA[12]。
式中,q為下沉系數(shù),主要決定于頂板管理方法;f(S)為單位面積dF至A點距離S的函數(shù),這個函數(shù)一般稱為影響函數(shù)。
將f(S)、dF分成沿x、y 兩個方向來考慮:
圖 2 水平煤層
根據(jù)《幾何理論》研究地表變形的規(guī)律,認為地下開采對地表點下沉的影響服從于正態(tài)分布,因此影響曲線函數(shù)為一高斯曲線,即
所以,
系統(tǒng)運行后,第一步操作是進行數(shù)據(jù)處理,點擊“生成下沉值”,輸入工作面參數(shù)后,點擊“確定”按鈕,在彈出的對話框中輸入保存路徑,點擊“確定”后,系統(tǒng)會自動彈出“完成”對話框,點擊并完成第一步操作。數(shù)據(jù)處理后將以txt文本格式輸出。
4.2 數(shù)據(jù)格式轉(zhuǎn)換
第一步處理完數(shù)據(jù)生成下沉值后,以txt文本格式輸出。此時,需要轉(zhuǎn)換數(shù)據(jù)格式才能進行下一步操作,類似于ArcGIS中數(shù)據(jù)格式之間的轉(zhuǎn)換。設(shè)計中主要是將txt文本格式轉(zhuǎn)換成Shapefile格式,然后再將其加載進程序中。
從txt到Shapefile轉(zhuǎn)換主要有2種方式。其一主要是在ArcView中進行。具體步驟是file--extentions--Generate to shape,可以加載相應(yīng)的模塊,然后點擊view--add Generate Theme對話框中加載,完成轉(zhuǎn)換。此文采用另一種方式,利用ArcToolbox/Samples/Data Management/Features中 的2個工具Create Features From Text File(導入)和Write Features To Text File(導出)完成txt文件格式的要素導入導出。程序流程如圖3所示。
圖3 txt轉(zhuǎn)Shapefile流程圖
格式轉(zhuǎn)換的部分代碼如下:
OpenFileDialog pOpenFileDialog = new OpenFileDialog();
pOpenFileDialog.Filter = "文本文件|*.txt";
pOpenFileDialog.InitialDirectory = Application. ExecutablePath;
if (pOpenFileDialog.ShowDialog() != DialogResult. OK) return;
m_txtFilePath = pOpenFileDialog.FileName.ToString();
SaveFileDialog pSaveFileDialog = new SaveFileDialog();
pSaveFileDialog.Filter = "shp文件|*.shp";
pSaveFileDialog.InitialDirectory = Application. ExecutablePath;
if (pSaveFileDialog.ShowDialog() == DialogResult. OK)
……
系統(tǒng)運行時,點擊“txt轉(zhuǎn)換為shp”按鈕,在彈出的對話框中選擇第一步生成下沉值后輸出的txt文本,選中并確定后,選擇保存路徑將轉(zhuǎn)換格式后的數(shù)據(jù)命名、保存起來。格式轉(zhuǎn)換完成以后,需要檢查其最終的數(shù)據(jù)是否正確,如果發(fā)現(xiàn)空文本或空數(shù)據(jù)集,說明轉(zhuǎn)換不正確。還可以通過加載格式轉(zhuǎn)換后的數(shù)據(jù)文件到系統(tǒng)中,進一步驗證。
4.3 圖像顯示
數(shù)據(jù)轉(zhuǎn)換為Shapefile格式后,就可以將其加載進來。
添加shp文件的代碼如下:
//添加shp文件到Map
private void AddData_Click(object sender, EventArgs e)
{
arclss.Addshp();
this.axMapControl1.Map.AddLayer(arclss.PLayer as ILayer);
this.axMapControl1.Refresh();
點擊“加載數(shù)據(jù)”,選中格式轉(zhuǎn)換后的文件,點擊“確定”,成功添加shp文件后,圖層樹控件——TOCControl中會有一個shp文件的圖層,它可以顯示出文件的要素為點狀要素,而右邊地圖控件——MapControl中顯示的圖像則為本次設(shè)計選取的所有采樣點。
加載數(shù)據(jù)成功之后,就可以在工具欄控件——ToolbarControl上面進行操作,如中心放大、中心縮小、漫游、全圖、選中位置縮小和放大等。
通過這些點狀圖像,并不能直觀地獲取其他信息,因此,接下來需要通過其生成TIN,然后加載TIN進來,在MapControl與SceneControl中分別顯示二維和三維的圖像。從散點到連續(xù)表面,需要引進數(shù)字高程模型的概念。
4.4 數(shù)字高程模型
數(shù)字高程模型是通過有限的地形高程數(shù)據(jù)實現(xiàn)對地形曲面的數(shù)字化模擬。最為常見的表示方法主要是規(guī)則格網(wǎng)——GRID和不規(guī)則三角網(wǎng)——TIN,如圖4所示。規(guī)則格網(wǎng)的數(shù)據(jù)組織類似于圖像柵格數(shù)據(jù),而它的每個像元的值是高程值,即格網(wǎng)DEM是一種高程矩陣。不規(guī)則三角網(wǎng)直接利用原始的采樣點進行地表重建,由連續(xù)的相互連接的三角面組成,三角面的形狀和大小取決于不規(guī)則分布的觀測點的密度和位置。
圖4 GRID和TIN
本設(shè)計主要通過TIN來建立地形模型。在格式轉(zhuǎn)換后,運行系統(tǒng),點擊“三維顯示”按鈕,在彈出的對話框中選中轉(zhuǎn)換格式后的shp文件并確定,生成并加載TIN,如圖5所示。
圖5 生成TIN圖像
生成TIN的部分代碼如下:
pOpenFileDialog.Filter = "shp文件|*.shp";
if (pOpenFileDialog.ShowDialog() == DialogResult. OK)
{
string tempPath = pOpenFileDialog.FileName. ToString();
stringtemp1=System.IO.Path.GetDirectoryName (tempPath);
string tempname =System.IO.Path.GetFileName (tempPath);
IWorkspaceFactoryp WorkspaceFact = newShapefile WorkspaceFactoryClass();
IWorkspacepWorkspace=pWorkspaceFact. OpenFromFile(temp1, 0);
IFeatureWorkspacepFeatureWorkspace=(IFeatureWor kspace)pWorkspace; IFeatureClasspFeatClass=pFeature Workspace.OpenFeatureClass(tempname);
IFeatureLayer pFLayer = new FeatureLayer();
pFLayer.FeatureClass = pFeatClass;
IFields pFields = pFeatClass.Fields;
IFieldpHeighField=pFields.get_Field(pFields. FindField("S"));
IGeoDataset pGDS = pFeatClass as IGeoDataset;
IEnvelope pEnv = pGDS.Extent;
pEnv.SpatialReference = pGDS.SpatialReference;
ITinEdit pTinEdit = new TinClass();
pTinEdit.InitNew(pEnv);
object obj = Type.Missing;
pTinEdit.AddFromFeatureClass(pFeatClass, null, pHeighField, null, esriTinSurfaceType.esriTinMassPoint, ref obj);
pTinEdit.SaveAs("D:\daaa", ref obj);
pTinEdit.StopEditing(false);
在生成TIN并加載進來后,于MapControl與SceneControl中分別顯示二維和三維圖像。需要考慮二者的同步顯示和更新問題,即同步縮小和放大等。以中心放大為例,部分代碼如下:
IEnvelope penv = this.axMapControl1.Extent; penv.Expand(0.8, 0.8, true);
this.axMapControl1.Extent = penv;
IActiveView pActiveView = this.axMapControl1.Map as IActiveView;//得到接口
IEnvelope pEnvelope = (IEnvelope)pActiveView. Extent;//獲得顯示范圍
pEnvelope.Expand(0.8, 0.8, true);
pActiveView.Extent = pEnvelope;
pActiveView.Refresh(); //刷新
……
ISceneViewer pSceneViewer = this.axSceneControl1. SceneGraph.ActiveViewer as ISceneViewer;
pSceneViewer.Redraw(false);//重繪現(xiàn)場
4.5 三維場景
生成TIN圖像后,在MapControl中的二維顯示如圖5,還可以進一步通過分層設(shè)色來使圖像中地貌高程分布及其相互對照鮮明,如圖6所示。但是,通過2 個圖我們?nèi)匀徊荒軌蚝苤庇^地看出地表的變形,需要通過場景控件——SceneControl來顯示三維場景,比較直觀地表達地表的變形情況,顯示出來的圖像也是整個設(shè)計最終的可視化結(jié)果,如圖7所示。
圖6 分層設(shè)色
圖7 地表變形三維場景
我們可以通過ToolbarControl上的工具來調(diào)整圖像,如點擊“漫游”,按鈕在圖中可以觀察任一方向的地表變形。
1)本文以概率積分法為基礎(chǔ),利用C#語言開發(fā)出開采沉陷預(yù)計程序核心程序,通過調(diào)用工作面參數(shù)預(yù)計地表下沉盆地內(nèi)任一點的下沉值,并輸出數(shù)據(jù)。
2)在設(shè)計中完成了數(shù)據(jù)格式的轉(zhuǎn)換,將輸出數(shù)據(jù)的txt文本格式轉(zhuǎn)換為Shapefile格式,并利用AE將轉(zhuǎn)換格式后的數(shù)據(jù)以圖形輸出,這樣就可以比較直觀地觀察工作面內(nèi)的點分布。
3)完成了TIN的構(gòu)建,從而實現(xiàn)了開采沉陷可視化,可以直觀地觀察到工作面內(nèi)的地表變形情況。
4)實現(xiàn)了MapControl與SceneControl的同步顯示和更新,并初步實現(xiàn)分層設(shè)色,使圖像中地貌高程分布及其相互對照更加鮮明。
[1] 趙林林,佟光成,申靈玲,等. 基于ArcObjects的地表沉陷信息可視化技術(shù)研究與實現(xiàn)[J].中國礦業(yè),2007(11):33-35
[2] 王飛.基于MapGIS的開采沉陷預(yù)計分析系統(tǒng)[D].焦作:河南理工大學,2010
[3] 路兵.基于C#的礦山開采沉陷預(yù)計可視化系統(tǒng)[D].青島:山東科技大學,2011
[4] 李青元,林宗堅,李成名.真三維 GIS 技術(shù)研究的現(xiàn)狀與發(fā)展[J].測繪科學,2000,25(2):47-51
[5] 周新耿,劉芬.二維三維空間信息系統(tǒng)的結(jié)合和應(yīng)用[J].計算機與數(shù)字工程,2005,33(3):101-103
[6] 劉仁義,劉南.ArcGIS開發(fā)寶典——從入門到精通[M].北京:科學出版社,2006
[7] 劉貴明,張衛(wèi)國,蘭小機. 基于ArcGIS Engine的礦山3D-GIS的設(shè)計與實現(xiàn)[J]. 金屬礦山,2009(5):92-95
[8] 王玲,吳侃,奚新麗. 基于ArcGIS Engine的開采沉陷預(yù)計系統(tǒng)[J]. 測繪科學,2008,33(4):153-154
[9] 吳侃. 開采沉陷預(yù)計一體化方法[M]. 徐州:中國礦業(yè)大學出版社,1998
[10] 張應(yīng)昌,孫亞峰,何堯. 基于概率積分法的開采沉陷預(yù)計分析[J].山西建筑,2009(20):119-120
[11] 白力改,譚志祥,柳聰亮,等.基于ArcGIS的開采沉陷預(yù)計分析可視化方法[J].金屬礦山,2010(5):140-142
[12] 翟厥成,洪加明.地表移動盆地內(nèi)任意點下沉值的預(yù)計[J].礦山測量,1978(2):35-43
[13] Demers M N. 地理信息系統(tǒng)基本原理 [M].北京:電子工業(yè)出版社,1999
[14] 張新宇,陳殿友,楊天行. Arc/View中Shapefile數(shù)據(jù)結(jié)構(gòu)剖析及格式轉(zhuǎn)換[J]. 吉林大學學報:信息科學版,2003(4):399-402
P208
B
1672-4623(2015)02-0126-04
10.3969/j.issn.1672-4623.2015.02.045
李青青,碩士,研究方向為地圖制圖與地理信息工程。
2014-03-12。
項目來源:安徽省自然科學基金資助項目(1208085QE91);安徽省國土資源科技資助項目(2012-k-24)。