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