李愛民 兀澤坤 趙佳樂(lè) 張心怡 郭振強(qiáng)
(鄭州大學(xué)地球科學(xué)與技術(shù)學(xué)院,河南 鄭州 450001)
工程測(cè)量數(shù)據(jù)處理中的導(dǎo)線測(cè)量、水準(zhǔn)測(cè)量、坐標(biāo)轉(zhuǎn)換等內(nèi)容,計(jì)算工作量很大。目前測(cè)繪行業(yè)內(nèi)流行幾款數(shù)據(jù)處理軟件,如南方測(cè)繪的平差易軟件(Power Adjustment)[1]、 武大的“科傻”系統(tǒng)(COSA)[2]、清華山維的平差軟件(NASEW)[3]等。這些軟件都具有概算、平差、精度評(píng)定、控制網(wǎng)顯示等功能,在測(cè)繪單位的測(cè)量數(shù)據(jù)處理中發(fā)揮了重要作用。但是,調(diào)查發(fā)現(xiàn),這些軟件普遍沒有顯示測(cè)區(qū)地圖的功能,而工程測(cè)量一定是在一定區(qū)域進(jìn)行的,測(cè)量數(shù)據(jù)都包含坐標(biāo)位置信息,控制點(diǎn)點(diǎn)之記資料也需要周圍地物地貌信息的支持,因此,把測(cè)區(qū)地圖融合到測(cè)量數(shù)據(jù)處理軟件中,研究建立基于測(cè)區(qū)電子地圖的工程測(cè)量數(shù)據(jù)處理系統(tǒng)十分必要。
本文利用ArcGIS Engine 組件開發(fā)[4]、數(shù)據(jù)庫(kù)等技術(shù)研究構(gòu)建基于測(cè)區(qū)地圖的測(cè)量數(shù)據(jù)計(jì)算處理系統(tǒng),實(shí)現(xiàn)地圖和測(cè)量數(shù)據(jù)計(jì)算處理功能的無(wú)縫集成,使測(cè)量數(shù)據(jù)處理地圖化,提高測(cè)繪人員處理測(cè)量數(shù)據(jù)的可視化和便捷性。
某本系統(tǒng)對(duì)應(yīng)的用戶人群為有工程測(cè)量數(shù)據(jù)處理需求的測(cè)量人員,因此系統(tǒng)運(yùn)行環(huán)境設(shè)置為PC 端,且無(wú)聯(lián)網(wǎng)要求,設(shè)計(jì)為單機(jī)版系統(tǒng),不考慮網(wǎng)絡(luò)問(wèn)題,但系統(tǒng)涉及GIS 技術(shù)和測(cè)量理論,因此開發(fā)者需要具有這方面的知識(shí)。
數(shù)據(jù)流程包括:數(shù)據(jù)錄入,將測(cè)區(qū)地圖數(shù)據(jù)和測(cè)量數(shù)據(jù)輸入;根據(jù)測(cè)量數(shù)據(jù)進(jìn)行平差計(jì)算,獲得測(cè)量點(diǎn)坐標(biāo)和高程數(shù)據(jù);在地圖窗口根據(jù)坐標(biāo)數(shù)據(jù)生成測(cè)量點(diǎn)圖層;基于地圖制作點(diǎn)之記,進(jìn)行空間查詢和分析等;成果輸出,輸出所需的空間數(shù)據(jù)、測(cè)量數(shù)據(jù)處理結(jié)果等。系統(tǒng)應(yīng)包括地圖編輯、測(cè)量數(shù)據(jù)平差處理、空間分析、數(shù)據(jù)、圖形的檢索、查詢及數(shù)據(jù)輸出等功能。
系統(tǒng)設(shè)計(jì)要遵循軟件工程建設(shè)的思想和簡(jiǎn)潔、實(shí)用、可靠、可拓展的原則,充分利用計(jì)算機(jī)編程、GIS、空間數(shù)據(jù)可視化、數(shù)據(jù)庫(kù)查詢和分析等技術(shù),構(gòu)建以電子地圖為基礎(chǔ)平臺(tái)的測(cè)量數(shù)據(jù)處理系統(tǒng)。
從系統(tǒng)特點(diǎn)和應(yīng)用角度出發(fā),立足于整體,采用軟件工程的結(jié)構(gòu)化設(shè)計(jì)模式,把系統(tǒng)功能分解為不同的模塊,包括數(shù)據(jù)操作、查詢統(tǒng)計(jì)、報(bào)表操作、圖形操作、測(cè)繪功能五個(gè)方面,如圖1 所示。
圖1 系統(tǒng)總體框架
把GIS 技術(shù)和測(cè)量數(shù)據(jù)處理相結(jié)合,使得一些測(cè)量數(shù)據(jù)處理操作更加直觀地在地圖上展現(xiàn)。
(1)軟件支持mxd、Shapefile 等文件類型的導(dǎo)入,同時(shí)可以實(shí)時(shí)查看及更改屬性表。主菜單上有跳轉(zhuǎn)功能,通過(guò)輸入某點(diǎn)坐標(biāo)而直接跳轉(zhuǎn)選中該點(diǎn)。此外,還具備打開文件、選中、平移、放大、縮小地圖、添加數(shù)據(jù)、移除圖層等地圖軟件所具有的基礎(chǔ)功能。
(2)主菜單上有創(chuàng)建地圖要素功能,可以進(jìn)行點(diǎn)要素、線要素與面要素的創(chuàng)建,點(diǎn)擊開始編輯后,在其右側(cè)框體中選擇圖層,并使用繪圖工具進(jìn)行要素的創(chuàng)建;點(diǎn)屬性配備有專門的要素庫(kù),可以用于選擇點(diǎn)要素的樣式。
(3)鷹眼功能,用于全局顯示地圖的處理情況,便于查找所進(jìn)行處理或當(dāng)前展示的頁(yè)面位置。
(4)“生成測(cè)量點(diǎn)”功能,通過(guò)導(dǎo)入帶有點(diǎn)坐標(biāo)的Excel 或TXT 文件,從而生成帶有相關(guān)點(diǎn)屬性的Shapefile 文件,并保存在指定路徑。
(5)“地圖注記”功能,選擇特定圖層以及該圖層內(nèi)所想要顯示的字段,可以將字段內(nèi)容顯示在底圖上。
(6)“地圖選擇集”和輸出功能,用于顯示和輸出所選要素的屬性表。
(7)導(dǎo)線平差計(jì)算。導(dǎo)線測(cè)量是將測(cè)點(diǎn)連成折線,得到折線邊的邊長(zhǎng)和轉(zhuǎn)折角后,根據(jù)數(shù)據(jù)推算導(dǎo)線點(diǎn)的平面直角坐標(biāo)的過(guò)程[9]。根據(jù)其導(dǎo)線布設(shè)方式,分為附合導(dǎo)線、閉合導(dǎo)線、支導(dǎo)線、導(dǎo)線網(wǎng)[10,11]。在選定精度等級(jí)并輸入源數(shù)據(jù)后,平差得出導(dǎo)線網(wǎng)型繪制結(jié)果、解算結(jié)果、精度核驗(yàn)結(jié)果等內(nèi)容。
(8)水準(zhǔn)平差計(jì)算。水準(zhǔn)測(cè)量是利用水平視線測(cè)定地面高差的方法,即由已知點(diǎn)高程推算未知點(diǎn)高程的過(guò)程[6-8],在選定精度等級(jí)和已知高程后,導(dǎo)入觀測(cè)數(shù)據(jù)的Excel 或Shapefile 文件,得出線路總長(zhǎng)、閉合差、限差等信息,并計(jì)算閉合差是否符合要求,且設(shè)置相應(yīng)的結(jié)果導(dǎo)出功能。
(9)坐標(biāo)轉(zhuǎn)換功能。包括大地坐標(biāo)、平面坐標(biāo)、空間直角坐標(biāo)等多種坐標(biāo)系的坐標(biāo)轉(zhuǎn)換。
測(cè)量數(shù)據(jù)一般包括空間數(shù)據(jù)和屬性數(shù)據(jù),空間數(shù)據(jù)是用來(lái)直觀表達(dá)位置關(guān)系的點(diǎn)狀、線狀、面狀要素信息,圖層的分類依據(jù)是根據(jù)其幾何形狀分為Point、Polyline、Polygon 等類型的要素圖層[12-14];屬性數(shù)據(jù)主要是測(cè)量數(shù)據(jù)以及對(duì)空間數(shù)據(jù)的說(shuō)明。以控制點(diǎn)為例,空間數(shù)據(jù)類型為點(diǎn)狀要素,其屬性數(shù)據(jù)為控制點(diǎn)坐標(biāo)、點(diǎn)名、點(diǎn)號(hào)、控制點(diǎn)高程等屬性信息;以導(dǎo)線測(cè)量為例,導(dǎo)入數(shù)據(jù)后生成的空間數(shù)據(jù)類型為線狀要素,其屬性數(shù)據(jù)為點(diǎn)號(hào)、坐標(biāo)、方位角、轉(zhuǎn)折角、邊長(zhǎng)等屬性信息??臻g數(shù)據(jù)采用圖層模式管理,使用Esri 公司的ArcGIS Engine 軟件提供的各類控件進(jìn)行輸入、顯示、存儲(chǔ)、輸出等功能,而對(duì)于使用測(cè)量功能得到的屬性數(shù)據(jù),則通過(guò)輕型關(guān)系型數(shù)據(jù)庫(kù)SQLite進(jìn)行輸入、顯示、存儲(chǔ)、輸出等功能,基于ComGIS 技術(shù)實(shí)現(xiàn)兩種數(shù)據(jù)類型的無(wú)縫集成。
根據(jù)ArcGIS Engine 組件式開發(fā)技術(shù)提供的地理數(shù)據(jù)可視化及空間數(shù)據(jù)處理等特點(diǎn),將多種測(cè)量數(shù)據(jù)處理功能與地理信息系統(tǒng)集成,綜合利用空間數(shù)據(jù)和屬性數(shù)據(jù),在Visual Studio.NET 開發(fā)環(huán)境中嵌入ArcGIS Engine 組件[15,16],利用COM 組件技術(shù)開發(fā)測(cè)量數(shù)據(jù)處理系統(tǒng),實(shí)現(xiàn)坐標(biāo)值轉(zhuǎn)換、七參數(shù)解算、水準(zhǔn)測(cè)量、導(dǎo)線測(cè)量等測(cè)繪數(shù)據(jù)處理的功能,并且添加相應(yīng)的處理結(jié)果可視化界面,提供網(wǎng)型繪制、解算結(jié)果、精度核驗(yàn)、起算及觀測(cè)數(shù)據(jù)顯示等功能。操作系統(tǒng)為WindowsXP/7/10,數(shù)據(jù)庫(kù)管理系統(tǒng)采用SQLite 數(shù)據(jù)庫(kù)。
主界面如圖2 所示:
①菜單欄,可實(shí)現(xiàn)文件操作、地圖注記、控制點(diǎn)生成、測(cè)量計(jì)算等功能。
②基礎(chǔ)工具條,可實(shí)現(xiàn)對(duì)電子地圖等基本操作,例如漫游、全圖顯示等。
③編輯工具條,可實(shí)現(xiàn)對(duì)地圖要素的創(chuàng)建、編輯、刪除等功能。
④圖層目錄,可實(shí)現(xiàn)對(duì)地圖圖層的管理、要素符號(hào)更改等操作。
⑤鷹眼,展示數(shù)據(jù)視圖中的地理范圍在全圖中的位置。
⑥地圖窗口,地圖交互操作的窗口。
⑦狀態(tài)欄,可顯示數(shù)據(jù)框內(nèi)鼠標(biāo)的位置,菜單欄功能的簡(jiǎn)短說(shuō)明。
圖2 系統(tǒng)主界面
坐標(biāo)轉(zhuǎn)換模塊包括坐標(biāo)值轉(zhuǎn)換和七參數(shù)解算,坐標(biāo)值轉(zhuǎn)換即選定轉(zhuǎn)換前后的坐標(biāo)系,輸入單個(gè)點(diǎn)得到轉(zhuǎn)換后的坐標(biāo)系的相應(yīng)坐標(biāo)值,如圖3 所示。七參數(shù)解算即輸入相應(yīng)的三個(gè)公共點(diǎn)的坐標(biāo),得到目標(biāo)坐標(biāo)以及七參數(shù)的值,如圖4 所示。
以西安80 高斯投影平面坐標(biāo)轉(zhuǎn)換西安80 大地坐標(biāo)為例,部分代碼如下:
crd.x_XA = textBoxNum_xBX; ……//得到西安高斯投影平面坐標(biāo)的X、Y、HZ
elpF.num = Ellips.Ellips75_XA80.num; ……//得到西安80所用橢球的參數(shù)
trans.XiAn80xyHgToXiAn80BLH(crd, elpF); // 調(diào)用轉(zhuǎn)換函數(shù)
圖3 坐標(biāo)轉(zhuǎn)換
圖4 七參數(shù)解算界面
包括閉合水準(zhǔn)測(cè)量平差、附合水準(zhǔn)測(cè)量平差、支水準(zhǔn)測(cè)量平差,選定精度等級(jí)及已知高程后輸入文件,得到報(bào)表窗口,顯示相應(yīng)的源數(shù)據(jù)及結(jié)果,以及導(dǎo)出結(jié)果功能,如圖5 所示。
以閉合水準(zhǔn)平差為例,部分代碼如下:closedDiff += Convert.ToDouble(dt.Rows[i][3]);//計(jì)算閉合差(單位:mm)
圖5 水準(zhǔn)數(shù)據(jù)處理
導(dǎo)線測(cè)量計(jì)算模塊包括閉合導(dǎo)線坐標(biāo)平差、附合導(dǎo)線坐標(biāo)平差、支導(dǎo)線坐標(biāo)計(jì)算、導(dǎo)線網(wǎng)平差(前方交會(huì)、側(cè)邊網(wǎng)坐標(biāo)平差)功能。選定精度并輸入數(shù)據(jù)后,得到網(wǎng)型繪制結(jié)果、解算結(jié)果、精度核驗(yàn)等信息,結(jié)果窗口右側(cè)顯示起算數(shù)據(jù)及觀測(cè)數(shù)據(jù)信息,并提供導(dǎo)出結(jié)果功能,如圖6 所示。
以閉合導(dǎo)線平差為例,部分代碼如下:cartsCrds[i].X = Convert.ToInt32(stations[i].y);//將給出的測(cè)繪坐標(biāo)轉(zhuǎn)笛卡爾坐標(biāo),圖形形狀相同Increment[i].X = cartsCrds[i].X - knownedX;//求各點(diǎn)與已知點(diǎn)A的相對(duì)位置if(Increment[i].X < minIncrementX)//尋找X方向最小負(fù)增量
圖6 導(dǎo)線數(shù)據(jù)處理
圖層目錄:可在圖層欄中右擊圖層進(jìn)行圖層的相關(guān)操作,如圖7 所示。
圖7 圖層控制目錄樹
創(chuàng)建要素:在編輯欄中選擇帶有鉛筆圖表的按鈕(Sketch Tool),即可進(jìn)行要素的創(chuàng)建,其右側(cè)按鈕(Attributes)可打開所創(chuàng)建要素的屬性表,如圖8所示。
圖8 創(chuàng)建要素
生成控制點(diǎn):選擇導(dǎo)入帶有點(diǎn)坐標(biāo)的Excel 或Shapefile 文件,從而在指定路徑中生成帶有這些點(diǎn)屬性的Shapefile 格式的文件,如圖9 所示。
導(dǎo)入Excel 生成Shapefile 文件核心代碼如下:String fileName = openFileDialog.FileName;DataTable myTable = ExcelToDataTable(fileName,"sheet1");string Point = myTable.Rows[i][0].ToString();//獲取excel中的數(shù)據(jù)double x = Convert.ToDouble(myTable.Rows[i][1]); ……//得到xyh的值addPoint(ly, x, y, h ,Point);//添加點(diǎn)至shpfile文件
圖9 導(dǎo)入Shapefile格式的文件
圖10 點(diǎn)狀要素符號(hào)選擇器
符號(hào)選擇器:通過(guò)在屬性欄中雙擊點(diǎn)狀符號(hào)、線狀符號(hào)或面狀符號(hào),可打開符號(hào)選擇器,選擇所需要的符號(hào)來(lái)標(biāo)記點(diǎn)、線、面要素,如圖10 所示。pTextSymbol.Font = pFont as stdole.IFontDisp;I L i n e L a b e l P o s i t i o n p P o s i t i o n = n e w LineLabelPositionClass();……//設(shè)置注記放置格式、排放位置、擺設(shè)路徑權(quán)重,以及處理文字間沖突的處理方式等pLableEngine.Expression = "[" + sFieldName +"]";//輸入VBScript或JavaScript語(yǔ)言,設(shè)置要標(biāo)注的字段IAnnotateLayerProperties pAnnoLayerProps=pLableEngine as IAnnotateLayerProperties;pAnnoProps.Add(pAnnoLayerProps);
圖11 注記選擇
圖12 注記效果
地圖選擇集 :選擇底圖中的要素后,點(diǎn)擊“地圖選擇集”,可彈出選中圖層中所選要素的屬性表,如圖13 所示。
圖13 地圖選擇集效果圖
本文利用GIS 組件開發(fā)技術(shù)設(shè)計(jì)了融合測(cè)區(qū)地圖的工程測(cè)量數(shù)據(jù)處理系統(tǒng),并利用C#語(yǔ)言編程實(shí)現(xiàn)了軟件功能。把測(cè)量數(shù)據(jù)處理與測(cè)區(qū)地圖無(wú)縫集成,實(shí)現(xiàn)了測(cè)量數(shù)據(jù)的可視化,進(jìn)而使計(jì)算更直觀、高效和便捷,提高工作效率。組件開發(fā)技術(shù)的使用有利于系統(tǒng)的可拓展性,方便后期的維護(hù)與系統(tǒng)升級(jí)。