李旺民,陳 勝,黎 彬,丁建勛
(1.珠海市測繪院,廣東 珠海 519000;2.湖南省第三測繪院,湖南 長沙 410007)
一種高集成度土地勘測定界數(shù)據(jù)處理方法
李旺民1,陳 勝2,黎 彬1,丁建勛1
(1.珠海市測繪院,廣東 珠海 519000;2.湖南省第三測繪院,湖南 長沙 410007)
結(jié)合生產(chǎn)實(shí)踐經(jīng)驗(yàn),基于GDAL/OGR矢量數(shù)據(jù)處理庫、NPOI技術(shù)等,提出了一種自動(dòng)化、高集成度的勘測定界數(shù)據(jù)處理方法。該方法與傳統(tǒng)數(shù)據(jù)生產(chǎn)處理方式相比,在生產(chǎn)效率、數(shù)據(jù)質(zhì)量等方面均有很大程度的提升。通過測繪作業(yè)部門生產(chǎn)實(shí)踐,驗(yàn)證了該方法的實(shí)用性和可靠性。
土地勘測定界;高集成度;GDAL/OGR;dxf;NPOI
合理利用每寸土地,切實(shí)保護(hù)耕地是我國的基本國策。及時(shí)、準(zhǔn)確地掌握各類土地?cái)?shù)據(jù)特別是建設(shè)用地批準(zhǔn)數(shù)據(jù)也是土地資源規(guī)劃管理的基本手段[1]。對建設(shè)用地的許可審批,我國采用建設(shè)用地審查報(bào)批的方式。其核心內(nèi)容包括:建設(shè)用地是否符合土地利用總體規(guī)劃,選址是否符合合理用地和集約用地原則,土地權(quán)屬、位置、范圍、地類、面積是否清楚、準(zhǔn)確,是否涉及占用非規(guī)劃建設(shè)用地,申請用地涉及突破土地利用規(guī)劃的,其相關(guān)理由是否充分、土地利用規(guī)劃變更及耕地占補(bǔ)平衡等工作是否完成等,這些內(nèi)容主要由勘測定界測繪完成[2]。通過先進(jìn)的地理信息技術(shù),改造測繪作業(yè)流程,形成科學(xué)、規(guī)范、高效的測繪數(shù)據(jù)生產(chǎn)解決方案,對提高測繪作業(yè)生產(chǎn)自動(dòng)化程度,提升測繪在土地勘測定界方面的保障能力具有重要意義[3]。
土地勘測定界的內(nèi)業(yè)數(shù)據(jù)處理工作主要包括土地利用分類和面積匯總、土地勘測定界圖編繪、土地勘測定界報(bào)告書撰寫、電子報(bào)盤數(shù)據(jù)制作、土地利用現(xiàn)狀圖及規(guī)劃圖編制等內(nèi)容,如圖1所示。土地利用分類和面積匯總是土地勘測定界內(nèi)業(yè)數(shù)據(jù)處理中一項(xiàng)重要工作,其地類統(tǒng)計(jì)結(jié)果是土地勘測定界報(bào)告書和電子報(bào)盤數(shù)據(jù)的基礎(chǔ)數(shù)據(jù);提取的地類圖斑線是土地勘測定界圖的專題底圖,涉及地類圖斑線的提取、編繪與格式轉(zhuǎn)換。傳統(tǒng)作業(yè)方式主要依靠人工來計(jì)算和統(tǒng)計(jì),需對圖形文件進(jìn)行多次格式轉(zhuǎn)換,不僅費(fèi)時(shí)費(fèi)力,容易出錯(cuò),而且對土地的報(bào)批進(jìn)度和質(zhì)量有一定影響??梢妭鹘y(tǒng)的土地勘測定界內(nèi)業(yè)數(shù)據(jù)處理方式需要依托多種軟件,存在數(shù)據(jù)匯總、報(bào)告編制、電子報(bào)盤制作方面集成度不高等缺點(diǎn)。針對傳統(tǒng)作業(yè)方式的局限性,本文從分析土地勘測定界數(shù)據(jù)處理流程入手,發(fā)現(xiàn)和提取內(nèi)部規(guī)律,以Visual Studio 2005為開發(fā)平臺,運(yùn)用C++、C#等多種開發(fā)語言,充分利用GDAL/OGR矢量數(shù)據(jù)處理庫、NPOI技術(shù)等,設(shè)計(jì)和研發(fā)了一種自動(dòng)化、高集成度的勘測定界數(shù)據(jù)處理方法,以提升土地勘測定界數(shù)據(jù)處理效率,優(yōu)化作業(yè)流程,提高成果質(zhì)量。
圖1 土地勘測定界內(nèi)業(yè)數(shù)據(jù)處理現(xiàn)狀分析
2.1 設(shè)計(jì)思路
實(shí)現(xiàn)勘測定界內(nèi)業(yè)數(shù)據(jù)處理的自動(dòng)化和集成化,確保計(jì)算正確性,提高生產(chǎn)效率,需從數(shù)據(jù)錄入、數(shù)據(jù)處理、數(shù)據(jù)輸出3方面進(jìn)行設(shè)計(jì)與實(shí)現(xiàn),流程見圖2。實(shí)現(xiàn)步驟如下:
1)將用地坐標(biāo)按照“點(diǎn)號+地塊圈號+X坐標(biāo)+ Y坐標(biāo)”的格式(同電子報(bào)盤txt數(shù)據(jù)中“地塊坐標(biāo)”格式)編輯為txt文本,作為原始數(shù)據(jù),將其導(dǎo)入、轉(zhuǎn)化并輸出為shp和dxf圖形數(shù)據(jù);
2)將生成的用地范圍圖形數(shù)據(jù)與作業(yè)員選擇的土地利用現(xiàn)狀、規(guī)劃數(shù)據(jù)庫進(jìn)行疊加處理,獲取用地的土地利用現(xiàn)狀和規(guī)劃地類信息,提取并輸出用地的土地利用現(xiàn)狀和規(guī)劃地類圖斑線,自動(dòng)標(biāo)注對應(yīng)的圖斑信息,同時(shí)按土地利用類型分別統(tǒng)計(jì)地類面積并輸出地類面積統(tǒng)計(jì)表;
3) 結(jié)合作業(yè)員錄入的項(xiàng)目用地信息,輸出電子報(bào)盤數(shù)據(jù)(建設(shè)項(xiàng)目用地坐標(biāo)文件)。
圖2 土地勘測定界內(nèi)業(yè)數(shù)據(jù)處理流程圖
2.2 關(guān)鍵技術(shù)與程序?qū)崿F(xiàn)
2.2.1 文本數(shù)據(jù)讀取并轉(zhuǎn)化為shp格式
原始用地坐標(biāo)數(shù)據(jù)為文本數(shù)據(jù),需轉(zhuǎn)換為shp格式數(shù)據(jù),以其坐標(biāo)形成幾何圖形,并修正其中的拓?fù)溴e(cuò)誤,將項(xiàng)目信息存入shp屬性表。該部分核心代碼如下:
pFeature = OGRFeature::CreateFeature(destLayer->GetLayerDefn());
pFeature->SetField("界址點(diǎn)數(shù)", lbs[i].DianShu);
pFeature->SetField("地 塊 面 積", lbs[i].MianJi.c_ str());
pFeature->SetField("地塊編號", lbs[i].BianHao.c_ str());
pFeature->SetField("地塊名稱", lbs[i].MingChen.c_ str());
pFeature->SetField("圖形類型", lbs[i].TuXingLei Bie.c_str());
pFeature->SetField("圖幅 號", lbs[i].TuFuHao.c_ str());
pFeature->SetField("地塊用途", lbs[i].YongTu.c_ str());
pFeature->SetField("地類編碼", lbs[i].DiLeiBianMa. c_str());
pFeature->SetField("描述", lbs[i].MiaoShu.c_str());
2.2.2 矢量圖形的讀寫與拓?fù)溆?jì)算
GDAL是一個(gè)專門對柵格空間數(shù)據(jù)進(jìn)行讀取、轉(zhuǎn)換、編輯等操作的開源庫,OGR是GDAL項(xiàng)目的一個(gè)分支,功能與GDAL類似,提供對矢量數(shù)據(jù)的支持與操作。GDAL/OGR作為一個(gè)優(yōu)秀的開源庫,提供了標(biāo)準(zhǔn)的二次開發(fā)接口,包括讀取、寫入、轉(zhuǎn)換、處理多種柵格/矢量數(shù)據(jù)格式,同時(shí)它提供完全公開的源代碼,為用戶進(jìn)行二次開發(fā)和底層功能擴(kuò)展提供了很高的起點(diǎn)[4]。該方法采用GDAL/OGR矢量數(shù)據(jù)處理庫對矢量圖形進(jìn)行讀寫與拓?fù)溆?jì)算。
其實(shí)現(xiàn)步驟為:打開mdb格式的土地利用數(shù)據(jù)庫,按行政區(qū)劃識別圖層,并把該圖層數(shù)據(jù)讀入內(nèi)存,以用地范圍與現(xiàn)狀、規(guī)劃圖層進(jìn)行拓?fù)溥\(yùn)算,將用地范圍內(nèi)的現(xiàn)狀、規(guī)劃圖斑提取并保存為一個(gè)shp文件。該部分核心代碼如下:
//打開紅線圖層
shpDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName(shpDriverName);
crdDS = OGRSFDriverRegistrar::Open(CString2strin g(crdShpPath + _T(".shp")).c_str(), FALSE, &shpDriver);
OGRLayer* crdLayer = crdDS->GetLayerByName(C String2string(crdShpLayer).c_str());
//創(chuàng)建裁切后的圖
destDS = shpDriver->CreateDataSource(CString2strin g(tempDir).c_str());
OGRLayer* destLayer = destDS->CreateLayer(CStrin g2string(curShpLayer).c_str(), srcLayer->GetSpatialRef(), srcLayer->GetGeomType());
//進(jìn)行裁切
srcLayer->Clip(crdLayer, destLayer, papszOptions);
2.2.3 輸出用地范圍、地類圖斑線為dxf文件
dxf繪圖交換文件是Autodesk公司開發(fā)的用于AutoCAD與其他軟件進(jìn)行數(shù)據(jù)交換的CAD數(shù)據(jù)文件格式,是AutoCAD圖形文件中包含所有信息的一種帶標(biāo)記數(shù)據(jù)的表示方式。dxf是一種開放的矢量數(shù)據(jù)格式,可分為ASCII格式和二進(jìn)制格式2類,ASCII格式具有可讀性好的特點(diǎn)。筆者根據(jù)AutoCAD軟件的幫助中dxf描述文檔,編寫代碼對ASCII格式dxf進(jìn)行解析和讀寫操作,不依賴AutoCAD軟件或其他第三方庫,使得軟件的運(yùn)行、分發(fā)都極為簡單、方便。
輸出用地范圍、地類圖斑線為dxf文件的實(shí)現(xiàn)步驟為:首先在CAD中生成dxf文件模板,包含必要的圖層定義、字體定義和塊參照定義,再把文件模板另存拆分為dxf頭文件和dxf結(jié)束文件。在輸出用地范圍、地類圖斑線時(shí)先輸出dxf頭文件,再根據(jù)數(shù)據(jù)內(nèi)容輸出圖元,最后輸出dxf結(jié)束文件,并保存。輸出地類圖斑線核心代碼如下:
2.2.4 地類面積分類統(tǒng)計(jì)與報(bào)表輸出
POI是一個(gè)開源的基于.NET平臺的讀寫Excel、Word等微軟OLE2組件文檔的項(xiàng)目,可在沒有安裝Office或相應(yīng)環(huán)境的機(jī)器上對 Word/Excel文檔進(jìn)行讀寫。NPOI是基于.NET用C#開發(fā),主程序是用C++開發(fā),然而用C++進(jìn)行.NET軟件開發(fā)并不便捷,所以用C#將報(bào)表輸出功能封裝成DLL,以在主程序中進(jìn)行調(diào)用的方式實(shí)現(xiàn)報(bào)表輸出。該部分核心代碼如下:
2.3 應(yīng)用示例
以珠海市某道路的勘測定界測量為例,該道路長度為10余km,分為若干地塊,用地情況較復(fù)雜。數(shù)據(jù)處理主界面如圖3所示。通過成果輸出模塊,可輸出地類面積分類統(tǒng)計(jì)表(Excel格式,如圖4)、用地范圍圖形文件(shp、dxf格式)、地類圖斑線文件(dxf格式,如圖5),電子報(bào)盤文件(txt格式)等數(shù)據(jù)成果,經(jīng)生產(chǎn)驗(yàn)證,成果數(shù)據(jù)正確無誤。
圖3 數(shù)據(jù)處理主界面
圖4 地類面積分類統(tǒng)計(jì)表示意圖
P208
B
1672-4623(2016)05-0109-03
10.3969/j.issn.1672-4623.2016.05.034
2015-12-07。
項(xiàng)目來源:國家自然科學(xué)基金資助項(xiàng)目(91224008)。