陳 磊 朱永華
(1、陜西聚信規(guī)劃設計咨詢有限公司,陜西 西安710018 2、西安華泰測繪工程有限公司,陜西 西安710054)
通常在城鄉(xiāng)建設用地增減掛鉤項目實施方案編制過程中,地塊信息入庫均在ArcGIS 環(huán)境下完成。由于部分項目區(qū)拆舊地塊面積較小,地塊數量較多,導致地塊入庫編號困難,具體表現為三種情況:一是地塊數量大,手動輸入編碼工作量巨大;二是增減地塊導致已編號出現“斷號”、“跳號”、“重號”,二次手動編號困難;三是檢查工作量巨大,易發(fā)生錯誤。為提高工作效率,大幅降低編號錯誤率,采用計算機自動生成編號是增減掛鉤工作發(fā)展趨勢。
一般情況某一增減掛鉤項目區(qū)內安置地塊及留用地塊數量相對較少,本次編號以拆舊地塊為例。
根據陜西省自然資源廳的要求,拆舊地塊編號為CJXXXXXXYY-QQ(NN),其中XXXXXX 為試點項目區(qū)所在地行政區(qū)劃代碼、YY 為項目區(qū)流水編號、QQ 為該項目區(qū)內的拆舊塊流水號、NN 為項目實施年份。由編號規(guī)則可知,在某一個增減掛鉤項目區(qū)內,地塊實施類型、項目區(qū)所在地行政區(qū)劃代碼及項目區(qū)流水號為定量,變量為拆舊塊流水號和實施年份。
本次編號思路為“先拆分,后合并”,即拆分地塊編號為定量和變量兩部分,拆分變量為變量1 和變量2 兩個子單元,待變量單元屬性值賦值完成后,合并相關屬性值得到完整編號。
基于ArcGIS 建立拆舊地塊shp,設拆舊地塊數據表名為CJDK,根據編號規(guī)則,建立地塊類型(定量)、行政區(qū)劃代碼(定量)、項目區(qū)流水編號(定量)、塊流水號(變量1)、實施年份(變量2)、地塊編號等字段(詳見表1),完成定量和變量賦值。
對于拆舊地塊,需要確定拆舊實施年份。一般情況下,同一實施年份地塊相對集中,可批量賦值,且拆舊年份排序優(yōu)先級最高。在不考慮拆舊年份的情況下,塊流水號賦值需遵守兩個規(guī)則:一是應按照鄉(xiāng)(街、鎮(zhèn))、村兩級轄區(qū)排序,即升序塊流水號后不應出現鄉(xiāng)鎮(zhèn)、行政村亂序;二是按照自上而下、從左向右的位置順序編號??傮w排序優(yōu)先級為鄉(xiāng)鎮(zhèn)>行政村>地塊位置。經過轄區(qū)排序、位置排序后,將排序的順序號轉換為塊流水號即可。
表1 字段結構表
坐標值排序不可采用鄉(xiāng)鎮(zhèn)區(qū)域多邊形質心坐標值。當某一行政區(qū)劃多邊形為狹長形,雖其位置處于左上,應優(yōu)先排序,但其質心坐標靠右下導致排序靠后。本次采用多邊形最小外接矩形的最小橫坐標(左)和最大縱坐標(上)排序。
在鄉(xiāng)鎮(zhèn)多邊形屬性表中添加數據類型均為浮點的xmin(最小橫坐標)和ymax(最大縱坐標)字段,使用python 對xmin 字段進行xmin=!shape.extent.XMin! 運算,對ymax 字段進行ymax=!shape.extent.YMax!運算,得到多邊形最小外接矩形的最小橫坐標和最大縱坐標,以sort 工具按照ymax 降序(DESCENDING)、xmin 升序(ASCENDING)排序得到順序值。
由于一個增減掛鉤項目涉及鄉(xiāng)鎮(zhèn)一般不會超過十個,在涉及鄉(xiāng)鎮(zhèn)數量較少的情況下也可手動排序。
行政村排序方法類似于鄉(xiāng)鎮(zhèn)排序,此處不再贅述。
優(yōu)先行政區(qū)劃排序的目的是保證行政區(qū)劃范圍內地塊完整性。即某一鄉(xiāng)鎮(zhèn)內某一行政村內的地塊全部排序后再進行本鄉(xiāng)鎮(zhèn)下一行政村地塊排序,同時行政村排序同樣遵守自上而下、從左向右的順序。待某一鄉(xiāng)鎮(zhèn)內所有行政區(qū)內的所有地塊排序完成后轉至下一鄉(xiāng)鎮(zhèn),確保塊流水號在同一行政轄區(qū)的連續(xù)性。
地塊位置排序類似于鄉(xiāng)鎮(zhèn)排序。
得到全部順序號后,使用sort 工具按照鄉(xiāng)鎮(zhèn)>行政村>地塊位置的優(yōu)先級排序。塊流水號經鄉(xiāng)鎮(zhèn)、行政村、地塊位置三級屬性排序后,可將排序的順序號轉換為塊流水號。即使排序工作完成后添加或者減少地塊,由于涉及鄉(xiāng)鎮(zhèn)及行政村位置固定、行政區(qū)代碼固定,運行上述運算后依然可迅速得到完整、連續(xù)、準確的塊流水號。
EXCEL 編號是導出拆舊地塊屬性表,借助EXCEL 軟件按照編碼規(guī)則合并相關列達到修改拆舊地塊數據表dbf 文件的目的,可采用代碼完成。完成列合并后一是采用另存替換的方法,二是ArcGIS 中運用Joins and Relates 功能關聯屬性即可完成編號工作。
若以geodatabase 模型管理拆舊地塊數據表,可借助ACCESS 設計SQL 更新完成編號。字段類型一致是字段合并的必要條件,需轉換Longint 和Int 型字段為char 型。設計SQL 部分更新代碼為:
Update CJDK set DKBH = DKLX +CStr (right(100+XMQLSH,2))+'-' +CStr(right(1000+KLSH,3))+'('+CStr(CJNF)+')'。
由于ACCESS 暫不支持SQL 中的cast()函數,此處以CStr()函數代替。使用right()函數的目的是補齊虛位。
ArcGIS 屬性表的字段計算器功能非常強大,借助此功能可輕松完成編號生成。ArcGIS 字段計算器提供兩種解析程序,分別是VBScript 和python。
(1)VBScript 編號。
VBScript 編號與SQL 更新運算方式相似,且都采用right()函數補齊虛位。與SQL 不同的是,由于VBScript 不允許顯式聲明任何數據類型,所有變量均屬于隱式變量,可不用函數轉換數據類型。
設計VBScript 部分更新代碼為:
DKBH=[DKLX]&[XZQDM]&right(100+[XMQLSH],2)&"-"&right(1000+[KLSH],3)& "(" &[CJNF] & ")"
(2)Python 編號。
Python 是ArcGIS 建議使用的腳本語言。與SQL 類似,"+"運算符兩邊的數據需要類型一致,因此在字符串中使用整數時,需要顯式地將整數用作字符串,使其與兩側的字符串數據類型保持一致,即調用str()函數。虛位補齊可直接使用zfill()方法右端補齊。
設計python 部分更新代碼為:
DKBH=!DKLX!+str (!XZQHDM!)+str (!XMQLSH!).zfill(2)+"-"+str(!KLSH!).zfill(3)+"("+str(!CJNF!)+")"
EXCEL 合并、ACCESS SQL 更新、ArcGIS 字段計算器都可以快速地完成編號。一般情況下,增減掛鉤項目范圍區(qū)劃定、地類統計、規(guī)劃復核、耕地等別判定等均在ArcGIS 環(huán)境下完成。使用ArcGIS 字段計算器編號不需要借助其他軟件,避免操作環(huán)境切換和數據的轉換,工作環(huán)節(jié)的減少可大幅提高工作效率。再者,拆舊地塊的確定并非一次完成,需要經過多次論證及討論,以致編號工作需反復多次。ArcGIS 環(huán)境下直接使用字段計算器編號不需要數據轉換,可降低編號錯誤率。
按照增減掛鉤實施規(guī)劃數據審核要求,建立的六個字段中僅需要地塊編號一個字段信息,其余字段數據皆為過程數據。根據增減掛鉤相關文件政策及地塊最小圖斑面積的要求,同一增減掛鉤項目區(qū)內拆舊地塊數量不會超過999 個。其冗余數據量非常小,幾可忽略。
屬性值虛位僅出現于兩處,一是項目區(qū)流水號,二是塊流水號。項目區(qū)流水號固定位數為二位,且此字段可批量賦值,此處不討論。當少于10 個地塊時和10-99 個地塊時,其數值位數都固定為2 位,僅當地塊數量大于100 時需補三位位數,故塊流水號位數僅可能為2 或3。自動識別并自動更新虛位位數,進一步完善更新代碼是下一步研究方向。