摘 要:本文基于筆者多年從事地籍?dāng)?shù)據(jù)庫建設(shè)的相關(guān)工作經(jīng)驗,以地籍?dāng)?shù)據(jù)庫建設(shè)中需要二次開發(fā)提高數(shù)據(jù)質(zhì)量的數(shù)據(jù)檢查關(guān)鍵技術(shù)為研究對象,探討了基于VC6.0++和MapGIS SDK6.7開發(fā)城鎮(zhèn)地籍?dāng)?shù)據(jù)庫的屬性值檢查程序的技術(shù)途徑,全文是筆者長期工作實踐基礎(chǔ)上的理論升華,相信對從事相關(guān)工作的同行能有所裨益。
關(guān)鍵詞:地籍?dāng)?shù)據(jù)庫 矢量數(shù)據(jù) 屬性數(shù)據(jù) 拓撲檢查 MapGIS ArcGIS
中圖分類號:P27 文獻標(biāo)識碼:A 文章編號:1672-3791(2013)04(a)-0053-02
城鎮(zhèn)地籍?dāng)?shù)據(jù)庫的建設(shè)任務(wù)是在城市建成區(qū)和縣所在地建制鎮(zhèn)建成區(qū)范圍內(nèi),建立包括土地利用、土地權(quán)屬、基礎(chǔ)地理等內(nèi)容,集影像、圖形、屬性和文檔于一體的數(shù)據(jù)庫及管理系統(tǒng)。主要內(nèi)容包括基礎(chǔ)地理信息數(shù)據(jù)、土地權(quán)屬數(shù)據(jù)、土地利用數(shù)據(jù)、柵格數(shù)據(jù)、元數(shù)據(jù)、表格、報告文本、掃描文件等。
本文所使用的地籍?dāng)?shù)據(jù)庫由MapGIS二次土地調(diào)查數(shù)據(jù)庫建庫系統(tǒng)(城鎮(zhèn)版)(以下簡稱建庫系統(tǒng))來建設(shè),其數(shù)據(jù)格式為MapGIS的.WP(區(qū)文件)、.WL(線文件)、.WT(點文件)。建庫的操作流程軟件幫助中都有詳細說明,本文不再贅述,本文主要探討建庫中需要進行二次開發(fā)才能滿足需求的關(guān)鍵技術(shù)實現(xiàn)思路。
在建庫系統(tǒng)中自帶了數(shù)據(jù)檢查功能,基本滿足屬性數(shù)據(jù)和幾何數(shù)據(jù)的檢查,利用該檢查模塊可作為地籍?dāng)?shù)據(jù)庫的初檢。為了提高產(chǎn)品質(zhì)量,還應(yīng)進行第二次檢查,這就必須要求用另外一種方法來對該地籍?dāng)?shù)據(jù)庫進行復(fù)檢,本文正是在此情況下開發(fā)了一套復(fù)檢的方法。
1 城鎮(zhèn)地籍?dāng)?shù)據(jù)庫檢查內(nèi)容
依據(jù)《第二次全國土地調(diào)查數(shù)據(jù)庫建設(shè)技術(shù)規(guī)范》中的規(guī)定,城鎮(zhèn)地籍?dāng)?shù)據(jù)庫的檢查主要涉及矢量數(shù)據(jù)檢查、屬性數(shù)據(jù)檢查、矢量數(shù)據(jù)與屬性數(shù)據(jù)一致性檢查、其它數(shù)據(jù)檢查等4大項,以下又分了共計10個小項。鑒于以上說提及的后兩項檢查相對容易,故本文主要討論的復(fù)檢方法集中在前2項。
1.1 矢量數(shù)據(jù)檢查
主要內(nèi)容為線段是否自相交、兩線相交、懸掛點、偽結(jié)點;多邊形是否閉合、各多邊形間的拓撲關(guān)系是否正確(如房屋應(yīng)包含在宗地內(nèi)),線點拓撲關(guān)系是否正確(如界址點應(yīng)在界址線上)等。
1.2 屬性數(shù)據(jù)檢查
主要內(nèi)容是屬性是否齊全、各要素層屬性結(jié)構(gòu)是否符合標(biāo)準(zhǔn)要求,屬性值是否為空、是否滿足值域要求等。
2 拓撲檢查
2.1 數(shù)據(jù)準(zhǔn)備
因本文原始建庫數(shù)據(jù)為MapGIS格式,而本文中的拓撲檢查均在ArcGIS中完成,故需要將MapGIS數(shù)據(jù)轉(zhuǎn)換為ArcGIS的shp格式。
轉(zhuǎn)換使用了Map2Shp軟件,該軟件能夠批量轉(zhuǎn)換MapGIS的點、線及區(qū)文件,且能在轉(zhuǎn)換過程中保證屬性結(jié)構(gòu)和幾何精度與原數(shù)據(jù)一致。本文主要針對宗地(QSZT.WP)、房屋(FW.WP)、地類圖斑(DLTB.WP)以及行政區(qū)(XZQ.WP)四者內(nèi)部及其相互之間做了拓撲檢查,故本文僅轉(zhuǎn)換這4個圖層,見圖1。
2.2 拓撲檢查規(guī)則
為了順利完成矢量數(shù)據(jù)的拓撲檢查,需提前制定相關(guān)的拓撲檢查規(guī)則,本文依據(jù)《第二次全國土地調(diào)查數(shù)據(jù)庫建設(shè)技術(shù)規(guī)范》中的相關(guān)檢查要求及重要程度,本文給出了如下拓撲檢查規(guī)則,見表1。
2.3 拓撲檢查步驟
(1)對轉(zhuǎn)換的shape數(shù)據(jù)定義坐標(biāo)單位。執(zhí)行ArcToolbox→Data Management Tools→Projections and Transformations→Define Projection。在打開的Spatial Reference Properties對話框中選擇Modify,修改坐標(biāo)單位為Meter,其它不變。
(2)對轉(zhuǎn)換的shape數(shù)據(jù)進行修復(fù)。執(zhí)行ArcToolbox→Data Management Tools→Features→Repair Geometry。在打開的Repair Geometry對話框中選擇待修復(fù)的shape文件進行修復(fù)。
(3)新建拓撲規(guī)則并驗證。新建Personal Geodatabase→新建Feature Dataset→在Feature Dataset中導(dǎo)入修復(fù)好的shape文件→新建Topology→選中要進行拓撲檢查的要素→在New Topology對話中通過Add Rule按照2.2中表1的描述添加規(guī)則(見圖2)→執(zhí)行validate即可對所添加規(guī)則的進行拓撲檢查→在拓撲檢查結(jié)果上右擊打開Properties對話中的Errors→點擊Generate Summary即可查看拓撲檢查的錯誤個數(shù)(也可以打開ArcMap導(dǎo)入拓撲檢查結(jié)果并加載拓撲檢查所使用的要素來查看拓撲錯誤),如圖3。
3 屬性檢查
3.1 空間要素屬性結(jié)構(gòu)
本文對建庫所涉及的空間要素均做了屬性檢查,包括測量控制點(CLKZD)、行政區(qū)(XZQ)、宗地(QSZT)、地類圖斑(DLTB)、房屋(FW)等。檢查內(nèi)容為屬性表名是否符合標(biāo)準(zhǔn)、屬性結(jié)構(gòu)是否符合標(biāo)準(zhǔn)(包括字段類型、字段長度、小數(shù)位數(shù))、必填項是否為空、值域是否正確。
3.2 屬性檢查程序設(shè)計
本文使用VC++6.0和MapGIS SDK6.7二次開發(fā)了城鎮(zhèn)地籍?dāng)?shù)據(jù)庫屬性數(shù)據(jù)的檢查功能。本文中首先運用VC++6.0創(chuàng)建了一個基于MFC的單文檔類型工程,然后在此基礎(chǔ)上進行MapGIS的二次開發(fā)。
3.2.1 VC++6.0中的設(shè)置
(1)工具→選擇→目錄標(biāo)簽,在顯示目錄Include files指示的路徑框中輸入如下內(nèi)容:D:\mapgis67\include;在顯示目錄Library files指示的路徑框中輸入:D:\mapgis67\Lib。
(2)工程→設(shè)置→C/C++標(biāo)簽→分類欄中選擇Code Generation→將Struct member alignment設(shè)置為1 Byte。
(3)工程→設(shè)置→General標(biāo)簽,將輸出文件設(shè)置為:D:\mapgis67\program。
3.2.2 修改基類
本文使用了MapGIS的CPrjEditView類,該類繼承了CGisEditView類,它集成了對工程文件進行編輯處理所必須的數(shù)據(jù)對象方法,具有對整個工程文件中各個工作區(qū)的編輯處理功能。
該類的具體使用方法如下:(1)將原視圖類中的xzqView.h和xzqView.cpp所涉CView全部替換為CPrjEditView。(2)在xzqView.h中第一個#endif后換行輸入:#include"CPrjEdit.h"。(3)在xzqView.h的OnDraw函數(shù)中添加如下代碼:CPrjEditView::OnDraw(pDC)。
3.2.3 檢查程序
由于實現(xiàn)該檢查的代碼繁多,本文簡要說明一下檢查程序的流程以及主要用到的MFC函數(shù)及MapGIS函數(shù)。
(1)屬性表名檢查。在選擇待檢查要素對話框中選中文件后即可實現(xiàn)屬性表名的檢查,通過MFC提供的相關(guān)函數(shù)即可實現(xiàn),如下:CFile file(Dlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);m_OutFile=file.GetFilePath();datName=new char[strLength];
strncpy(datName,strCheck,strLength);
strCheckFileName=strCheck.Mid(strCheck.ReverseFind('\\')+1);
strCheckFileExt=strCheck.Mid(strCheck.ReverseFind('.')+1);
if(strCheckFileName=="XZQ.WP"||strCheckFileName=="XZQ.wp")
writeWords+="該層名為標(biāo)準(zhǔn)層名,名稱為‘行政區(qū)層’"。
(2)打開并加載待檢查的要素。使用的函數(shù)為:_OpenArea(AREA_HINST, short type), _LoadAFile(char * datName, short ai), _AppendArea(short ai)。
(3)屬性結(jié)構(gòu)檢查。使用的類有CATT_ STRU、CFIELD_HEAD以及CINFO_ HEAD;使用的函數(shù)為_GetAttStru(short ai,short type,ATT_STRU**stru),通過該函數(shù)可獲取CATT_STRU類的實體fldEntry[i],通過該實體,有可獲得其fieldname和fieldtype屬性,通過該該兩項值即可實習(xí)屬性結(jié)構(gòu)的檢查。
(4)屬性值檢查。使用的類有CATT_ STRU,使用的函數(shù)為_GetAtt(short ai,short atype,long i,ATT_STRU**stru,char **att),_GetField(char*att,ATT_STRU *stru,char *fldName,char *fldBuf,long bufLen,short *isBlank),通過判斷獲取值的長度是否小于0,據(jù)此推知必填項是否已經(jīng)填寫。
3.2.4 檢查結(jié)果輸出
本文通過讀寫.txt文檔來實現(xiàn)檢查結(jié)果的輸出,關(guān)鍵代碼表述如下:CFile fileWrite;fileWrite.Open(m_OutFile,CFile::modeWrite|CFile::shareDenyRead); fileWrite.WriteHuge(writeWords,strlen(writeWords))。
3.3 程序運行結(jié)果
程序運行界面見圖4。結(jié)果中會對屬性表名是否為標(biāo)準(zhǔn)屬性表名給予提示;對屬性結(jié)構(gòu)的檢查,會將非標(biāo)準(zhǔn)字段類型、字段長度及及小數(shù)位數(shù)的總數(shù)進行統(tǒng)計;對屬性值的檢查會給出具體的空置圖形ID號,如所有必填字段均已填寫,則不會報錯。
4 結(jié)論
獨立于MapGIS建庫系統(tǒng)的數(shù)據(jù)檢查為數(shù)據(jù)質(zhì)量提供了第三方的認(rèn)定,從而提高了數(shù)據(jù)成果的質(zhì)量,通過自編的程序?qū)崿F(xiàn)了城鎮(zhèn)地籍?dāng)?shù)據(jù)的屬性數(shù)據(jù)檢查,減輕了人工進行屬性檢查的勞動強度,提高了工作效率;運用ArcGIS的拓撲檢查功能,可提高矢量數(shù)據(jù)的拓撲檢查質(zhì)量。
參考文獻
[1]洪波.地籍與房產(chǎn)測量[M].北京:測繪出版社,2010.
[2]城鎮(zhèn)地籍?dāng)?shù)據(jù)庫標(biāo)準(zhǔn)[TD/T1015-2007],中華人民共和國土地管理行業(yè)標(biāo)準(zhǔn)[S].北京:中國標(biāo)準(zhǔn)出版社,2008.
[3]第二次全國土地調(diào)查數(shù)據(jù)庫建設(shè)技術(shù)規(guī)范[S].國務(wù)院第二次全國土地調(diào)查領(lǐng)導(dǎo)小組辦公室,2007.
[4]吳秀芹,張洪巖,李瑞改,等.ArcGIS 9地理信息系統(tǒng)應(yīng)用與實踐[M].北京:清華大學(xué)出版社,2007.