李如山,杜 雷,高孝敏,垢元培,于孝民,王佳宏
(1.河北省地礦局第二地質(zhì)大隊(duì),河北 唐山 063000)
(2.唐山中地地質(zhì)工程公司,河北 唐山 063000)
長(zhǎng)期以來(lái),不管是老舊地質(zhì)圖的電子化還是新成果地質(zhì)圖的編繪,圖例的修編工作是地質(zhì)圖一項(xiàng)重要的環(huán)節(jié);現(xiàn)階段,隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,圖例的修編制作手段逐漸采用計(jì)算機(jī)輔助人工識(shí)別編繪,使用的繪圖軟件Surfer、MapGIS、AutoCAD 等手工繪圖功能強(qiáng)大,但圖例制作工作要求細(xì)致且繁瑣,易出現(xiàn)人為遺漏或錯(cuò)誤。近年部分研究者對(duì)MapGIS、AutoCAD、ArcGIS 等軟件進(jìn)行了圖例制作功能的二次開(kāi)發(fā)及應(yīng)用,其繪制圖例也較為繁瑣,而基于MapGIS軟件進(jìn)行的二次開(kāi)發(fā)實(shí)現(xiàn)了圖例自動(dòng)制作的功能,但軟件二次開(kāi)發(fā)的平臺(tái)環(huán)境也局限了其圖例圖元屬性開(kāi)發(fā),因此,從計(jì)算機(jī)底層數(shù)據(jù)層面實(shí)現(xiàn)制作圖例是解決此類(lèi)問(wèn)題的一個(gè)解決方案。筆者梳理了地質(zhì)圖圖例編繪要點(diǎn),在windows 10 操作系統(tǒng)環(huán)境下,基于Access 數(shù)據(jù)庫(kù),建設(shè)項(xiàng)目數(shù)據(jù)庫(kù),使用visual studio 2017 編程平臺(tái),采用C#編程語(yǔ)言編寫(xiě)了相應(yīng)代碼,通過(guò)圖元屬性數(shù)字歸一化,可實(shí)現(xiàn)一鍵智能生成圖例。本次筆者從地質(zhì)圖圖例制作層面,首先簡(jiǎn)述數(shù)據(jù)庫(kù)建設(shè),而后介紹一鍵生成圖例的制作流程及主要工作思路。
數(shù)據(jù)庫(kù)采用Access 數(shù)據(jù)庫(kù)。在參照現(xiàn)行國(guó)家、國(guó)際標(biāo)準(zhǔn)及經(jīng)驗(yàn)下,編制地層、顏色等字典,建立類(lèi)型表、地體表、顏色表等,形成共用數(shù)據(jù)庫(kù);分析地質(zhì)體-內(nèi)在關(guān)系-圖元數(shù)據(jù)之間的空間轉(zhuǎn)換紐帶聯(lián)系,按不同的地質(zhì)信息類(lèi)別建立點(diǎn)、線、面數(shù)據(jù)表,將項(xiàng)目地表地質(zhì)界線、鉆孔、礦體等空間和地質(zhì)屬性數(shù)據(jù)分別輸入數(shù)據(jù)庫(kù),建立項(xiàng)目數(shù)據(jù)庫(kù)。基于建立的共用數(shù)據(jù)庫(kù)和項(xiàng)目數(shù)據(jù)庫(kù)的聯(lián)合使用模式,從而將項(xiàng)目地質(zhì)信息轉(zhuǎn)化保存到數(shù)據(jù)庫(kù)文件。
在按照相關(guān)規(guī)程建設(shè)底層數(shù)據(jù)庫(kù)的基礎(chǔ)上,編寫(xiě)程序讀取數(shù)據(jù)庫(kù)中的地質(zhì)信息,通過(guò)檢索篩選空間屬性信息,經(jīng)計(jì)算確定圖例區(qū)配置位置;對(duì)圖元信息進(jìn)行去重,按照制定的圖例排序原則排序并存儲(chǔ);根據(jù)獲取的圖例區(qū)位置配置信息和圖例存儲(chǔ)信息,程序?qū)崿F(xiàn)生成圖例可視化(見(jiàn)圖1)。
圖1 圖例編繪流程
讀取數(shù)據(jù)庫(kù)圖形圖元中的顏色、點(diǎn)、線等字段數(shù)據(jù)存儲(chǔ)內(nèi)存中。讀取和存儲(chǔ)代碼簡(jiǎn)述如下:
OleDbDataReader rs = cmd.ExecuteReader();//讀數(shù)據(jù)庫(kù)
zdG_LX.Add(lx.Cls, lx)//將數(shù)據(jù)加入到字典中
檢索內(nèi)存中存儲(chǔ)的圖形圖元信息,篩選出空間屬性信息,將圖形四角坐標(biāo)信息(見(jiàn)圖2)標(biāo)記并存儲(chǔ)于min(x,y)、max(x,y)中,作為圖例位置計(jì)算的依據(jù)。計(jì)算圖形范圍坐標(biāo)代碼簡(jiǎn)述如下:
圖2 圖形信息結(jié)構(gòu)圖
double Xmin = NExmin * scale;
double Xmax = NExmax * scale;
double Ymin = Can_wide - scale * NNymin;
double Ymax = Can_wide - scale * NNymax;
通過(guò)不同的關(guān)鍵字段對(duì)各類(lèi)圖元信息進(jìn)行檢索,去除相同的圖元類(lèi)信息,得到加載圖形圖元種類(lèi)及數(shù)量,即圖例的數(shù)量;按照?qǐng)D例順序結(jié)構(gòu)(見(jiàn)表1),對(duì)去重后的圖例信息進(jìn)行排序存儲(chǔ)。去重和排序代碼簡(jiǎn)述如下:
List
dxhR.Sort();//排序
表1 圖例順序結(jié)構(gòu)表
根據(jù)圖形占用位置范圍(min(x,y)、max(x,y))和圖例數(shù)量,計(jì)算圖例區(qū)與圖形區(qū)邊界距離并分配圖例的排列位置,等距放置圖例,使之排列整齊美觀。代碼簡(jiǎn)述如下:
//TL_row 為圖例行數(shù)
int TL_row = (int)(Ymin - Ymax - 260) / 220;
//TL_total 為圖例中的總個(gè)數(shù)
int TL_total = dmhR_number + dxhR_number +CZ_number + zkhR_number + pmxhR_number + xdhR_number;
//TL_colum 為圖例中的列數(shù)
int TL_colum = TL_total / TL_row + 1;
根據(jù)圖例類(lèi)型及存儲(chǔ)信息,提取圖例類(lèi)數(shù)據(jù)庫(kù)內(nèi)相應(yīng)顏色、符號(hào)、線型、線寬等信息,按圖例框尺寸及文字規(guī)格顯示生成在圖例區(qū),保持圖例框內(nèi)顏色、文字(礦種、探礦工程文字、產(chǎn)狀等)等要素與加載范圍圖形信息一致,生成圖例如圖3。生成圖例代碼簡(jiǎn)述如下:
DL_ReadData.zdG_LX.TryGetValue();
GeoPoint.Kjing(canvas,Point,30);
textBlockTL2.Text = g_LXB.Name;
圖3 生成圖例示例
選擇圖例文字輸出控件時(shí),比選了Textbox 和Textblock(見(jiàn)表2),根據(jù)兩種控件功能特點(diǎn),選用Textbox 控件用于圖例框右側(cè)的文字說(shuō)明,Textblock控件主要用于顯示圖例框內(nèi)文字。
表2 Textbox 與Textblock 控件需求功能對(duì)比分析
地質(zhì)圖是地質(zhì)工作總結(jié)及成果組成的重要部分,而圖例是認(rèn)識(shí)地質(zhì)圖內(nèi)容必不可好的輔助工具,幫助讀懂地質(zhì)圖涵蓋的地質(zhì)信息。為提高工作效率,減少人為誤差,不受繪圖軟件二次開(kāi)發(fā)環(huán)境的局限性,基于底層開(kāi)發(fā)技術(shù)開(kāi)發(fā)了該程序,并采用虛擬地質(zhì)圖形數(shù)據(jù)進(jìn)行測(cè)試模塊,實(shí)現(xiàn)一鍵智能生成圖例,得到較好效果。該項(xiàng)模塊主要特點(diǎn):(1)不受繪圖軟件二次開(kāi)發(fā)環(huán)境的局限;(2)一鍵生成圖例,操作簡(jiǎn)單,避免多步手動(dòng)操作出現(xiàn)人為錯(cuò)誤,提高制作圖例的準(zhǔn)確性;(3)根據(jù)加載圖形信息準(zhǔn)確配置圖例區(qū);(4)檢索加載的圖形區(qū)信息,圖例各項(xiàng)顯示信息可與之保持一致。
河北能源職業(yè)技術(shù)學(xué)院學(xué)報(bào)2020年2期