羅萬林,吳永星
(貴州省第三測繪院,貴州 貴陽 550004)
對于不同的項目或者空間數(shù)據(jù)庫,數(shù)據(jù)質量的檢查是必須的,而不同的項目要求的數(shù)據(jù)庫質量檢查內容又不一致,需要針對不同的項目開發(fā)出對應的數(shù)據(jù)質量檢查軟件,開發(fā)成本和精力耗費巨大,而本系統(tǒng)的研究正解決了這一問題,針對不同的空間數(shù)據(jù)庫,即便檢查內容不一致,只要按照一定的格式要求設置好對應的檢查項,就可以用于具體的項目。系統(tǒng)主界面如圖1所示:
圖1 系統(tǒng)主界面
操作流程非常簡單,只需幾個步驟就可以,如圖2所示。
圖2 操作流程
將錯誤代碼和錯誤類型開放存至本系統(tǒng)目錄“...檢查項”下的.txt文件中,用戶可以自定義編輯增加修改檢查項內容(如圖3所示),系統(tǒng)會自動讀取該目錄下的所有檢查項,并將檢查的錯誤類型和錯誤代碼讀取,然后去執(zhí)行CkeckDataFunc()方法,有錯誤記錄的會被追加記錄到檢查字段“CheckResult”中。
圖3 自定義檢查項
檢查功能核心代碼如下所示:
CkeckDataFunc(IFeatureLayer culFeatLayer,string strSQL,string strError)
{
ITable table=culFeatLayer.FeatureClass as ITable;
IQueryFilter pQF=new QueryFilter();
pQF.WhereClause=strSQL;
ICursor cursor=table.Update(pQF,false);
IRow Row=cursor.NextRow();
int fieldCR=Row.Fields.FindField("CheckResult");
int maxCount=table.RowCount(pQF);
for(int i=0;i { string strCR=(string)Row.Value[fieldCR]; Row.Value[fieldCR]=strCR+strError+";"; cursor.UpdateRow(Row); Row=cursor.NextRow(); } Marshal.ReleaseComObject(pQF); } 讀取自定義檢查內容并檢查核心代碼如下: using(StreamReader sr=new StreamReader(strtxt,Encoding.UTF8)) { selSQL=sr.ReadToEnd(); string selSQLBJ=selSQL.Split('&')[0];//錯誤類型 selSQL=selSQL.Split('&')[1];//錯誤代碼 CkeckDataFunc(pSelectFtLayer,selSQL,selSQLBJ); } 用戶可以針對具體情況,設置某檢查項是否需要檢查(如圖4所示),將需要檢查的項點擊選擇對應的復選框,然后點擊保存。系統(tǒng)在執(zhí)行檢查時會判定,只將選中的選項進行檢查。 圖4 檢查項設置 檢查結果存放在被檢查的要素圖層的字段“CheckResult”中,可以用ArcGIS查看,以便于修改,如圖5所示: 圖5 檢查結果 本系統(tǒng)基于VS2015+ArcGISEngine10.4平臺,采用C#語言開發(fā),實現(xiàn)數(shù)據(jù)庫質量檢查項可以自定義檢查,只需新建文本并按照文本格式輸入相應的檢查內容和檢查錯誤描述,系統(tǒng)就會讀取該文本內容去執(zhí)行檢查,檢查結果存放在被檢查數(shù)據(jù)的字段“CheckResult”中。 本系統(tǒng)的優(yōu)勢在于針對不同的項目,若需要對空間數(shù)據(jù)庫屬性質量檢查,只需用戶添加相應的檢查內容就可以了(內容結構如圖6所示),“&”為分割符號,分隔符左邊為檢查的問題描述,右邊為執(zhí)行檢查的SQL語句。目前本系統(tǒng)已經(jīng)用于第三次全國國土調查和貴州省違法占耕項目,極大地節(jié)約了檢查軟件的開發(fā)成本,且提高工作效率,后續(xù)還可以用于其他項目。 圖6 檢查內容結構2.2 設置是否檢查
2.3 檢查結果
3 結語