摘 要:本文從北京市東城區城市監督管理中心對于城市部件數據檔案管理的需求出發,基于城市部件空間數據庫,利用MapBasic語言進行二次開發擴展MapInfo系統功能,設計實現了城市部件數據檔案管理工具,完全滿足東城區城市監督管理中心的要求,極大地方便了城市監督員的部件管理工作。
關鍵詞:數字城管 城市部件 檔案管理 MapBasic 二次開發
中圖分類號:TP3 文獻標識碼:A 文章編號:1672-3791(2013)07(c)-0039-02
“數字城管”建設作為城市管理工作信息化的標志,采用萬米單元網格管理法和城市部件、事件管理法相結合的方式,應用、整合多項數字城市技術,創建城市管理監督中心和指揮中心兩個軸心的管理體制,再造城市管理流程,從而實現精確、敏捷、高效、全時段、全方位覆蓋的城市管理模式。
為了開展上述工作,北京市東城區按照行政區域劃分管理權限,從縱向層面,將東城區的管理區域劃分為四個層面:街道辦事處、社區居委會、監督員責任區、萬米單元網格。其中街道辦事處10個,社區居委會126個,監督員責任區92個、萬米單元網格1593個。東城區城市部件按照城市管理功能劃分,共分為六大類一共60種,城市部件的大類包括:公用設施類、道路交通類、市容環境類、園林綠化類、房屋土地類及其他類。根據統計東城區部件總數為168339個,此外還有各種參照物、興趣點、地址等數據,整個東城區城市部件的管理任務落實到92個監督員身上,每個監督員平均要管理1800多個城市部件。為了讓每個監督員做到對自己轄區范圍的部件種類、部件標識碼及部件所在的萬米單元網格編碼心中有數,能對城市部件進行迅速查找和定位,建立一套城市部件檔案勢在必行。
鑒于東城區城市監督管理中心使用的是MapInfo系統,因此本文選用MapInfo的二次開發語言MapBasic對MapInfo系統進行功能擴展,基于城市部件空間數據庫,設計了城市部件數據檔案管理工具,完全滿足東城區城市監督管理中心的要求。
1 程序設計方案
1.1 設計思路
城市部件數據檔案管理工具的功能要求主要包括:用戶可以根據街道辦事處名稱、社區居委會名稱、監督員責任區名稱、或萬米單元網格編碼對該區域的部件進行查詢統計;計算該查詢區域內各類部件的總數及該查詢區域內各部件的詳細信息;將查詢的結果最終保存為xls格式的數據。
其中的查詢采用MapBasic空間查詢算法,查詢面對象中包含的點對象。根據對現有數據的分析,可以知道街道辦事處、監督員管理層面、社區居委會、萬米單元網格都是面對象,它們之間有如下的空間關系:萬米單元網格社區居委會街道辦事處。監督員工作層面是個比較特殊的圖層,每個監督員層面由一個或兩個社區居委會組成,但“王府井”和“站東街”兩個社區居委會例外,由于“王府井”和“站東街”這兩個居委會面積較大,因此在監督員管理層面中這兩個社區居委會分別被劃分成兩個監督員層面“王府井東”、“王府井西”和“站東街南”、“站東街北”,所以進行算法設計時主要按照空間查詢的思想,對“王府井”和“站東街”進行特殊處理。部件對象是點對象。對落在街道辦事處、監督員管理層面、社區居委會、萬米單元網格的區域的部件對象進行查詢就是所謂空間查詢。在MapInfo中查詢統計結果無法直接保存為xls的數據格式,需要將結果保存為MapInfo能輸出的txt文本格式,然后將這些文本格式的數據批量轉成xls格式的文本。
1.2 程序實現
(1)創建對話框部分。在對話框設置中,用戶可以選擇查詢對象,既可對部件對象查詢,也可對門址、參照物、興趣點查詢,這兩類數據的屬性結構是完全不同的,因此必須分別進行查詢。在查詢前必須讓用戶能選擇街道辦事處、監督員工作層面、社區居委會和萬米單元網格圖層,可讓用戶查詢某一街道,某一社區、某一監督員管理區域甚至可以精確到某一萬米單元網格的,可以選擇需要查詢的部件種類,這樣查詢設計可以滿足用戶的查詢需求。查詢對話框如圖1。
Dialog Width 175 Height 290
Title "統計窗口"
Calling Dialog_Sub
Control GroupBox
Title "選擇查詢對象"
Position 5,5 Width 165 Height 35
Control RadioGroup
Title "&部件查詢;&地址查詢"
ID6
Value 1
Position 10 ,15 Width 50
calling RadioGroup_Sub
Control StaticText
Position 70,15
Width 100
Height 30
Control GroupBox
Title "表"
Position 5,40 Width 165 Height 70
Control StaticText
Title "街道"
Position 10,50
Control PopupMenu
Title From Variable jd_tablist
ID 12
Position 54,48 Width 110
Calling jdTab_sub
Control StaticText
Title "監督員"
Position 10,65
Control PopupMenu
Title From Variable jdy_tablist
ID 13
Position 54,63 Width 110
Calling jdytab_Sub
(2)街道辦事處、社區居委會、監督員責任區、萬米單元網格空間關系的查詢代碼。正如前面分析的這四個圖層關系如下:萬米單元網格社區居委會街道辦事處系,所以用Mapbasic語言的within語句就能將這三者的關系體現出來。監督員管理層面和社區居委會的空間管理有點特殊。可以以用Partly Within來表示這兩者的關系。根據這四者之間的關系,編寫了如下代碼:
If check_sq=true then
If check_jdy=true Then
Select 社區居委會 From sq_Tab
'Where所屬管理社區=jdy_list(ReadControlValue(7))
Where Obj Partly Within Any(Select Obj from jdy_tab
Where Alias1=jdy_list(ReadControlValue(7)))
Into Sel
Else
Select 社區居委會 From sq_Tab
'Where 所屬街道=jd_list(ReadControlValue(1))
Where Obj Within Any(Select Obj From jd_tab
Where Alias2=jd_list(ReadControlValue(1)))
Into Sel
End If
Else
Alter control 2
Title ""
call wg_sub
Exit Sub
End If
(3)查詢結果顯示。在用戶選擇好需要查詢的管理區域和部件類型后,需要將所有的查詢統計結果保存為tab格式的數據。創建tab格式的表,并對結果進行統計輸出的代碼如下:
sq_count =TableInfo(sel,TAB_INFO_NROWS)
Redim sq_list(0)
If sq_count=0 Then
Redim sq_list(1)
Alter Control 2
Title From variable sq_list
Else
Fetch First From sel
Do
sq_Nm=sel.社區居委會
If sq_Nm<>"" Then
i=UBound(sq_list)+1
Redim sq_list(i)
sq_list(i)=sq_Nm
End If
Fetch Next From sel
Loop Until EOT(sel)
If ReadControlValue(6)=1 Then
Tab_Nm=PathToTableName$(FileSaveAsDlg("",ExpressStr,"Tab","保存..."))
If Tab_Nm="_" Then
Goto cleanlist
End If
Create Table Tab_nm
(標識碼 char(16),名稱 char(30),單元網格 char(14))
Type DBF
For k=1 To UBound(Seltab_list)
TabNm=Seltab_list(k)
alias3=TabNm+".所在單元網格"
alias5=wg_tab+".網格編碼"
If TabNm<>"" then
Select標識碼,名稱,Right$(所在單元網格,5)From TabNm,wg_tab
Where alias3=alias5 And wg_code=ExpressStr
Order By 所在單元網格,標識碼
Into sel
Insert into Tab_Nm Select * From sel
commit table Tab_Nm
End if
Next
Filename1=Tab_nm+"統計結果"+".txt"
Filename2=Tab_nm+".txt"
Select * From Tab_Nm
Order By 單元網格,標識碼
Into bujian
Export bujian
Into Filename2
Type "ASCII" Titles
' Overwrite
Select名稱"部件名稱",count(*)"部件總數" From Tab_Nm
Group by 名稱
Order By col2
Into bujiantongji
Export bujiantongji
Into Filename1
Type "ASCII" Titles
' Overwrite
End If
如圖2,為查詢統計表;圖3為查詢結果表。
2 結語
以上程序在MapBasic環境下,進行編譯和運行,打開圖層進行相應的操作可以實現各程序功能,本程序增加了MapInfo的系統功能,可提高工作效率,使用方便,對管理人員來說,能做到對每個管理區域的部件種類和個數心中有數。批量保存功能可以將查詢結果批量保存為txt文本格式,在word中打開后使用宏命令對結果打印輸出,制作成小冊子,讓監督員隨身攜帶,便于及時查閱。
參考文獻
[1]陳平.網格化城市管理新模式[M].北京:出版:北京大學出版社,2000.
[2]王曉武.MapBasic程序設計[M].北京:電子工業版社,2006.
[3]劉光.地理信息系統二次開發教程語言篇[M].北京:清華大學出版社,2003.