陳秀萍, 郭忠明,呂翠華
(1.云南省測(cè)繪產(chǎn)品檢測(cè)站,云南 昆明 650034;2.昆明冶金高等??茖W(xué)校 測(cè)繪學(xué)院,云南 昆明 650033)
本文以云南省某建制鎮(zhèn)地籍?dāng)?shù)據(jù)庫(kù)建設(shè)為例,嘗試?yán)肞ython編程語(yǔ)言構(gòu)建數(shù)據(jù)庫(kù)數(shù)據(jù)框架,采用ArcGIS數(shù)據(jù)導(dǎo)入模塊,將外業(yè)采集的CAD格式的地形、地籍?dāng)?shù)據(jù)導(dǎo)入數(shù)據(jù)框架中,利用SQL查詢語(yǔ)言對(duì)屬性賦值,完成數(shù)據(jù)庫(kù)的建設(shè)。
筆者單位地籍建庫(kù)工作可謂“一波三折”:工作初期技術(shù)路線的確定是基于建庫(kù)作業(yè)員有多年MapGIS平臺(tái)的數(shù)據(jù)編輯經(jīng)驗(yàn),擬購(gòu)買MapGIS地籍管理系統(tǒng):采用南方CASS地籍成圖軟件采集數(shù)據(jù),以DXF為數(shù)據(jù)交換格式,將數(shù)據(jù)轉(zhuǎn)換為入庫(kù)要求的(*.wt、*.wl、*.wp)格式,然后建庫(kù),輸出數(shù)據(jù)交換文件VCT。后期由于上交成果格式由最初規(guī)定的VCT或MDB改為唯一格式MDB,只能將數(shù)據(jù)重新轉(zhuǎn)換到ArcGIS的personal GDB數(shù)據(jù)庫(kù)中。由于MapGIS和ArcGIS對(duì)拓?fù)湟?guī)則的定義不一致,兩者在數(shù)據(jù)轉(zhuǎn)換過(guò)程中產(chǎn)生了許多拓?fù)溴e(cuò)誤,無(wú)法保證數(shù)據(jù)精度。為了工作的正常進(jìn)行,單位購(gòu)買了一套城鎮(zhèn)地籍建庫(kù)管理軟件(南方數(shù)碼太極軟件),重新考慮建庫(kù)技術(shù)路線,之前在MapGIS平臺(tái)所做的工作都白費(fèi)了,不僅浪費(fèi)大量的時(shí)間,而一套城鎮(zhèn)地籍建庫(kù)管理軟件根本無(wú)法滿足10個(gè)項(xiàng)目的需求。在這種情況下,綜合利用多種已有的公共軟件平臺(tái)構(gòu)建地籍?dāng)?shù)據(jù)庫(kù)勢(shì)在必行。
針對(duì)以上問(wèn)題,筆者經(jīng)過(guò)反復(fù)研究和實(shí)踐,利用Python編程語(yǔ)言構(gòu)建數(shù)據(jù)庫(kù)框架及完整屬性結(jié)構(gòu),配合ArcGIS的數(shù)據(jù)導(dǎo)入模塊、強(qiáng)大的拓?fù)錂z測(cè) 、拓?fù)涮幚砉δ埽Y(jié)合關(guān)系數(shù)據(jù)庫(kù)的特點(diǎn),利用SQL查詢語(yǔ)句,完成了多個(gè)數(shù)據(jù)庫(kù)的建設(shè)。
1)Python是ESRI支持的一種面向?qū)ο?、直譯式、開(kāi)源腳本語(yǔ)言,在ArcGIS典型安裝時(shí)隨其他組件一起安裝[2],其語(yǔ)法簡(jiǎn)捷而清晰,具有豐富和強(qiáng)大的類庫(kù)。
2)關(guān)系數(shù)據(jù)庫(kù)是當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)的主流,SQL語(yǔ)言是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的一種高級(jí)語(yǔ)言,它集數(shù)據(jù)操作、定義和控制功能于一體,具有很強(qiáng)的通用性,且語(yǔ)言簡(jiǎn)單易學(xué)、風(fēng)格統(tǒng)一,利用幾個(gè)簡(jiǎn)單的英語(yǔ)單詞組合,就可以完成很多復(fù)雜的功能[3]。
地籍?dāng)?shù)據(jù)庫(kù)的主要內(nèi)容為包括[1]:定位基礎(chǔ)、行政區(qū)劃、地形、土地權(quán)屬、土地利用、注記等空間要素;房屋權(quán)利人擴(kuò)展屬性、權(quán)屬來(lái)源證明擴(kuò)展屬性等多個(gè)擴(kuò)展屬性表;街坊宗地、街坊面積等面積統(tǒng)計(jì)表;地籍調(diào)查表、審批意見(jiàn)等宗地文檔。
根據(jù)數(shù)據(jù)庫(kù)的內(nèi)容及現(xiàn)有數(shù)據(jù)采集平臺(tái)、數(shù)據(jù)處理軟件,建庫(kù)流程如下:
2.3.1 空間數(shù)據(jù)的處理
1)數(shù)據(jù)庫(kù)數(shù)據(jù)框架的建立。采用2種方法:利用已有的南方數(shù)碼太極軟件建立數(shù)據(jù)框架;利用Python程序建立數(shù)據(jù)框架,這種方法可以完全脫離專業(yè)軟件,充分發(fā)揮作業(yè)員的主動(dòng)性和創(chuàng)造性(本文重點(diǎn)推薦)。
①設(shè)計(jì)、建立一個(gè)空數(shù)據(jù)庫(kù)。為了便于數(shù)據(jù)的管理,在MDB數(shù)據(jù)庫(kù)中建立一個(gè)數(shù)據(jù)集,數(shù)據(jù)集中包括所有要素類,根據(jù)要求對(duì)要素類定義相應(yīng)的屬性結(jié)構(gòu)。地籍?dāng)?shù)據(jù)的精度非常重要,在自動(dòng)建立數(shù)據(jù)集的過(guò)程中,需要增加1段代碼,定義數(shù)據(jù)集中要素類的XYTolerance、XYResolution值,確保精度滿足要求,代碼中的A、B根據(jù)項(xiàng)目范圍確定。
②下載并安裝Python2.6。使用Windows的記事本建立一個(gè)新文件,輸入程序代碼,并保存為Build53XXXX.py文件。Build53XXXX.py的核心代碼如下:
…
location = sys.argv[1]
gdb = sys.argv[2]
gp.CreatePersonalGDB_management(location, gdb)
mdb = "%s\%s" % (location, gdb)
gp.XYTolerance = "0.0000000001"
gp.XYResolution = "0.00000000001"
rs = gp.CreateSpatialReference_management("", "","0 0 A B, "", "", "", "0")
ds = "DS"
gp.CreateFeatureDataset_management(mdb, ds, rs)
gp.workspace = "%s\%s\%s" % (location, gdb, ds)
fc = "DGX"
gp.CreateFeatureclass(gp.workspace, fc, "POLYLINE")
gp.AddField_management(fc,"BSM","LONG","#","#","#","標(biāo)識(shí)碼", "NULLABLE", "NON_REQUIRED", "#")
gp.AddField_management(fc,"YSDM","TEXT","#","#","10"," 要素代碼 ","NULLABLE", "NON_REQUIRED", "#")
…
fc = "GCZJD"
…
print gp.getmessages()
③啟動(dòng)ArcCatalog,根據(jù)項(xiàng)目情況定義數(shù)據(jù)集的坐標(biāo)系。
2)數(shù)據(jù)的導(dǎo)入。利用ArcGIS的數(shù)據(jù)轉(zhuǎn)換工具將AutoCAD數(shù)據(jù)導(dǎo)入到personal GDB文件中,已有的地形、地籍的屬性數(shù)據(jù)均需要無(wú)損導(dǎo)入ArcGIS平臺(tái)[4-6]。
3)數(shù)據(jù)拓?fù)涮幚怼rcGIS拓?fù)錂z查、拓?fù)渚庉嫳粡V泛應(yīng)用于地籍空間數(shù)據(jù)的處理及檢查工作中,能夠確保各空間數(shù)據(jù)層內(nèi)、層間嚴(yán)格的拓?fù)潢P(guān)系的正確性。ArcGIS通過(guò)確定的拓?fù)湟?guī)則在ArcMap和ArcCatalog中運(yùn)行拓?fù)潢P(guān)系, ArcCatalog用于拓?fù)湟?guī)則的創(chuàng)建,拓?fù)溴e(cuò)誤的檢查,在ArcMap中按照錯(cuò)誤提示進(jìn)行修改。
2.3.2 屬性數(shù)據(jù)的賦值
1)分析已有的3個(gè)mdb數(shù)據(jù)庫(kù)。①GENERALDATA.mdb:前期在土地部門收集地籍檔案資料,錄入并保存地籍調(diào)查表、土地證等相關(guān)信息的數(shù)據(jù)庫(kù),表中包含了大量的擴(kuò)展屬性表內(nèi)容;②DJ.mdb:外業(yè)提供的保存界址點(diǎn)、界址線、宗地等信息的數(shù)據(jù)庫(kù);③53XXXX.mdb:保存地形數(shù)據(jù)、地籍?dāng)?shù)據(jù)要素類且屬性結(jié)構(gòu)完整的數(shù)據(jù)庫(kù)。
2)要素空間關(guān)系、屬性字段的關(guān)系分析。①地籍權(quán)屬要素之間的空間關(guān)系:宗地、界址線、界址點(diǎn)三者的空間約束關(guān)系非常緊密,界址點(diǎn)必然是界址線的端點(diǎn),不存在沒(méi)有界址點(diǎn)的宗地,也不存在孤立于宗地之外的界址點(diǎn)。②調(diào)查區(qū)、行政區(qū)、街坊、宗地、塊地之間的關(guān)系:同一街坊的宗地加塊地形成街坊,無(wú)縫的街坊合并后形成行政區(qū),行政區(qū)面積之和等于調(diào)查區(qū)面積。分析要素類字段間的相互關(guān)系是確保屬性數(shù)據(jù)賦值正確性的重要前提和基礎(chǔ)。
根據(jù)云南省城鎮(zhèn)地籍?dāng)?shù)據(jù)庫(kù)建庫(kù)技術(shù)標(biāo)準(zhǔn),城鎮(zhèn)地籍?dāng)?shù)據(jù)庫(kù)各類要素的代碼與名稱是根據(jù)《基礎(chǔ)地理信息要素分類與代碼》(GB/T 13923-2006)的擴(kuò)展,技術(shù)標(biāo)準(zhǔn)中規(guī)定了唯一代碼[7],可以用SQL UPDATE語(yǔ)句直接更新。
擴(kuò)展屬性的部分內(nèi)容根據(jù)土地局收集的地籍調(diào)查表、土地證、地籍申請(qǐng)書(shū)、權(quán)源文件等資料,錄入保存在Microsoft Office Access 2003數(shù)據(jù)庫(kù)數(shù)據(jù)總表中,使用INSERT語(yǔ)句復(fù)制相關(guān)內(nèi)容到相關(guān)擴(kuò)展屬性表中。
3)常用的部分SQL語(yǔ)句。從上述建庫(kù)技術(shù)路線不難看出,屬性值僅包含少量的從已有AutoCAD轉(zhuǎn)換過(guò)來(lái)自帶的屬性值,大量的屬性字段值仍為空。我們采用ArcGIS的空間分析功能,配合SQL語(yǔ)句,對(duì)3個(gè)mdb中的表進(jìn)行聯(lián)合操作,快速完成屬性賦值。
圖層內(nèi)字段直接賦值的語(yǔ)句:
update CLKZD, ZD, JZD set CLKZD.YSDM ="1000110000", ZD.YSDM = "1000110000", JZD.YSDM= "1000110000";
圖層間字段賦值的語(yǔ)句:
update DLTB,JF set DLTB.QSDWMC =JF.XZQMC,DLTB.ZLDWMC = JF.XZQMC where DLTB.ZLDWDM = JF.XZQDM;
按照建庫(kù)標(biāo)準(zhǔn)對(duì)某些字段值取位的語(yǔ)句:
Update JZD set JZDH1 = right(ZLDM,10) &left(UCa se(JZDH),1)+right("00000"+right(JZDH,len(JZDH)-1),4);
update FW set FWBH1 = right("000"+right(FWBH,le n(FWBH)),3);
update FW set ZDMJ = format(ZDMJ,"0.00");
擴(kuò)展屬性表數(shù)據(jù)的復(fù)制語(yǔ)句:
insert into ZD_TXQLDJ ( DJH, TDZH, QLR,QLRSFZJLX, QLRSFZJH, YWR, YWRSFZJLX,YWRSFZJH, TXQLZL, TXQLFW, SDRQ, QLSX,XCQX, SQSBH, SQS, SJR, SJRQ, SJD, SPBH,CSYJ, SCR, SCRQ, SHYJ, SHR, SHRQ, SPR,SPRQ, DJKBH, DJRQ, DJJS, DJKJBR, DJKSHR,TXQLZH ) select 地籍號(hào), 土地證號(hào), 權(quán)利人, 證件種類, 證件編號(hào), 土地使用者, 證件種類, 證件編號(hào), 權(quán)利種類, 權(quán)利范圍, 權(quán)利設(shè)定日期, 權(quán)利順序, 續(xù)存期限, 申請(qǐng)書(shū)編號(hào), 申請(qǐng)書(shū), 收件人, 收件日期, 收件單,審批表編號(hào), 初審意見(jiàn), 初審人, 初審人日期, 審核意見(jiàn), 審核人, 審核人日期, 審批人, 審批人日期, 登記卡編號(hào), 登記日期,登記記事, 經(jīng)辦人, 審核人, 土地證號(hào)from GENERALDATA;
1)綜合利用多種公共平臺(tái)軟件構(gòu)建地籍?dāng)?shù)據(jù)庫(kù),減少了對(duì)專業(yè)建庫(kù)軟件的依賴,降低了生產(chǎn)投入。筆者單位承擔(dān)10個(gè)地籍建庫(kù)項(xiàng)目,由于工期緊,由幾個(gè)作業(yè)組同時(shí)作業(yè),采用本文推薦的建庫(kù)技術(shù)路線,順利完成了工作任務(wù)。
2)在降低投入的同時(shí),大大提高了工作效率。主要體現(xiàn)在2個(gè)方面:①SQL是對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表進(jìn)行操作,與某些專業(yè)軟件對(duì)屬性的操作是基于對(duì)空間數(shù)據(jù)的疊加分析相比,速度更快,可以在短時(shí)間內(nèi)更新上萬(wàn)條記錄,輕松處理地籍?dāng)?shù)據(jù)庫(kù)大量的屬性內(nèi)容;②所有數(shù)據(jù)庫(kù)規(guī)模不同,結(jié)構(gòu)、要素類相同,只要適當(dāng)修改數(shù)據(jù)范圍,就能生成數(shù)據(jù)庫(kù)框架,SQL查詢語(yǔ)句保存后可以不斷重復(fù)用于不同數(shù)據(jù)庫(kù)。
3)采用該方法建庫(kù),作業(yè)人員都感覺(jué)自身業(yè)務(wù)能力得到較大提高,思維模式發(fā)生轉(zhuǎn)變,不再是一些工具的“奴隸”。
4)如果利用SQL語(yǔ)言的通用性,嵌入到如Visual Basic這樣的高級(jí)語(yǔ)言開(kāi)發(fā)平臺(tái)上,或者結(jié)合Python腳本語(yǔ)言,利用高級(jí)語(yǔ)言開(kāi)發(fā)工具的計(jì)算能力和SQL的數(shù)據(jù)庫(kù)操縱能力,快速建立數(shù)據(jù)庫(kù)應(yīng)用程序,能更好地解決地籍建庫(kù)中的屬性錄入問(wèn)題;同時(shí),在數(shù)據(jù)導(dǎo)入階段,也可以利用Python腳本語(yǔ)言自動(dòng)完成,進(jìn)一步優(yōu)化工作方案。
[1]張耀武,余蘊(yùn)祥,趙喬貴,等.云南省地籍調(diào)查實(shí)施細(xì)則[M].昆明:云南大學(xué)出版社,2007
[2]Alex Martelli ,Anna Martelli Ravenscroft. Python Cookbook[M].第2版.北京:人民郵電出版社,2010
[3]李俊民.SQL結(jié)構(gòu)化查詢語(yǔ)言詳解[M].北京:人民郵電出版社,2008
[4]李蘇,楊敏華.地籍?dāng)?shù)據(jù)庫(kù)動(dòng)態(tài)更新機(jī)制的探討[J].測(cè)繪科學(xué),2010,33(4):166-168
[5]蔣紹年, 閻鳳霞. 地籍?dāng)?shù)據(jù)建庫(kù)方法研究[J].測(cè)繪與空間地理信息,2010,33(5):88-90
[6]陳春華,余紅舉. GIS 數(shù)據(jù)質(zhì)量控制技術(shù)在地籍?dāng)?shù)據(jù)庫(kù)建設(shè)中的應(yīng)用[J].地理空間信息,2009,7(1):31-32
[7]GB/T 13923.基礎(chǔ)地理信息要素分類與代碼[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2006