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