方強,翁韜,周喬偉,陳凱
(成都市勘察測繪研究院,四川成都 610081)
“數(shù)字城管”是綜合利用“3S”技術、物聯(lián)網(wǎng)技術、數(shù)據(jù)庫技術于一體的城市管理綜合平臺,這種城市管理新模式能大大加強城市管理和公共服務職能,能對城市管理出現(xiàn)的各種問題做到及時發(fā)現(xiàn)和快速處理,極大提高城市管理服務水平。而部件普查工作就是為“數(shù)字城管”的建設提供基礎的數(shù)據(jù)保障,部件普查數(shù)據(jù)的質量及可靠性直接關系到以后“數(shù)字城管”的運行。
AutoCAD作為一個通用計算機輔助繪圖與設計平臺,有著強大圖形編輯功能及易用性特點,在測繪行業(yè)有著廣泛的應用,鑒于很多部件普查都是以AutoCAD格式的1∶500數(shù)字地形圖為底圖進行的,因此筆者使用AutoCAD VBA以及少量AutoCAD Visual LISP程序開發(fā)技術相結合,按照本次部件普查實際要求,編制一套既有部件成圖功能又有屬性錄入功能的軟件,便于外業(yè)作業(yè)人員的數(shù)據(jù)錄入,提高數(shù)據(jù)質量,提升工作效率。
各個城市對部件普查的數(shù)據(jù)要求是不一樣的,包括不同的普查對象、部件編碼體系、圖層、顏色、屬性要求等等,筆者基于AutoCAD 2004,以成都市雙流縣部件普查標準為例展示程序的開發(fā)。
編碼設計一般要遵循相關的國家標準或行業(yè)標準,因此本系統(tǒng)的編碼依據(jù)CJ/T214-2007《城市市政綜合監(jiān)管信息系統(tǒng)管理部件和事件分類、編碼及數(shù)據(jù)要求》,并根據(jù)城市具體情況進行了調整。
系統(tǒng)開發(fā)前,要設計好本系統(tǒng)所使用的點、線、面符號。
(1)點符號設計
點符號就是AutoCAD的塊,制作點符號的時候,要注意三點:
①符號里面所有的對象要放在0層,否則,會出現(xiàn)多余的圖層刪不掉的情況;
②符號的填充盡可能用帶寬度的線來實現(xiàn),這樣可以提高AutoCAD的速度;
③如果想可以隨時改變塊顏色的話,塊中對象的顏色要定義為ByBlock。
(2)線符號設計
簡單線型符號定義不需要型文件,只要有一個后綴為lin的線文件就可以,復雜的線型文件需要定義型文件。線符號制作要注意以下兩點:
①在.lin文件中,每個線型定義應限制在80字符以內(nèi);
②為了線型顯示美觀的需要,有時需要將循環(huán)單位改小。
(3)面符號設計
在本程序中規(guī)定面就是閉合的線。只是為了更直觀地顯示其面狀特點,才配以填充圖案。所以,筆者直接用AutoCAD自帶的填充模式結合顏色區(qū)分不同的部件面?;谶@個思想,不管是數(shù)據(jù)轉換還是給面賦屬性,都是針對最外圍的閉合線而言的,而不是填充圖案。根據(jù)筆者實踐發(fā)現(xiàn)閉合的線和其填充圖案的邊界有些情況下會有微小的差別。
調用VBA宏的命令采用lsp代碼實現(xiàn),例如:
這樣,用戶在命令行輸入bjpc101就可以調用該宏定義的功能,方便用戶使用命令繪制地物。此處101代表部件編碼。其他的命令代碼類似,命令名稱命名規(guī)范都是bjpc加上代碼,在lsp代碼中只需要更改編碼就可以了。這樣我們可以用VBA函數(shù)Draw中的GetString方法和LISP的(command)函數(shù)來調用不同的編碼,實現(xiàn)一個Draw函數(shù)繪制所有的地物。
考慮到部件普查種類繁多以及作業(yè)員繪制的直觀性,筆者選用AutoCAD的屏幕菜單實現(xiàn)本次開發(fā)的所有功能,系統(tǒng)界面如圖1所示。
此界面需要定義一個后綴為“.mns”的文件,以供AutoCAD加載,示例代碼如下:
在界面設計中,需要制作一套幻燈片來供菜單調用,這樣可以直觀方便地供作業(yè)人員選擇調用。在此程序中,幻燈片名稱用編碼表示?;脽羝梢岳肁utoCAD提供的工具制作,并建立幻燈片庫。
為增強程序的可擴展性及代碼共用性,便于部件的修改和擴充,本次設計使用一個畫法文件存儲地物的畫法信息,再編寫一個通用函數(shù)調用這個文件完成所有地物的繪制,文件格式如下:
編碼就是地物編碼。類型主要包含“點、有向點、線、面”。當類型為“點”或“有向點”的時候參數(shù)名就是塊名,參數(shù)值就是塊插入比例尺;當類型為“線”時,參數(shù)名為線型名,參數(shù)值就是線寬;當類型為“面”的時候,參數(shù)名為填充圖案名稱,參數(shù)值就是圖案比例。層名和顏色就是該地物所放圖層及AutoCAD索引顏色編碼。屬性表名定義該編碼對應的屬性信息列表。例如:
(1)通用函數(shù)實現(xiàn)思路:
①用GetString方法讀取要繪制地物的編碼。
②讀取畫法文件,并根據(jù)地物編碼搜索該編碼對應的畫法定義。
③根據(jù)該編碼對應的類型調用不同的畫法函數(shù),并把其所對應的參數(shù)名、參數(shù)值、層名、顏色、屬性信息傳遞給對應的畫法函數(shù)進行繪制。
④繪制完成后自動彈出來屬性對話框要求填入該地物要求的屬性信息,確定保存屬性信息。
(2)通用調用程序實現(xiàn)代碼如下:
(3)程序說明:
①函數(shù)getHuaFa實現(xiàn)從畫法文件中查找到所繪地物編碼對應的畫法描述。
②函數(shù)getStr實現(xiàn)拆分畫法描述中單個信息的功能,可以從畫法描述字符串中找到用逗號分割的對應的畫法描述詳細信息。
③函數(shù)drawPoint實現(xiàn)在strLayer圖層,用strColor顏色,塊插入比例尺為strValue繪制塊strName。
④函數(shù)drawPPoint功能類似函數(shù)drawPoint,但用戶可以通過鼠標旋轉指定塊方向。
⑤函數(shù)drawLine實現(xiàn)在strLayer圖層,用strColor顏色,線寬為strValue線形為strName畫線。
⑥函數(shù) drawPolygon實現(xiàn)在strLayer圖層,用str-Color顏色,圖案比例為strValue填充圖案名稱為str-Name畫面。
⑦函數(shù) drawPoint、drawPPoint、drawLine、drawPolygon,不僅包括繪制功能,還會在繪制結束后彈出來其對應的屬性對話框,以便把用戶輸入的屬性信息存到該對象的擴展屬性中,如圖2所示。
圖2 屬性錄入界面
基于AutoCAD的VBA二次開發(fā),具有上手快、建設快,可迅速地構建應用程序服務于測繪生產(chǎn)。基于AutoCAD的部件普查錄入程序,具有良好的操作性,為外業(yè)作業(yè)人員所習慣,同時,其開放、統(tǒng)一、規(guī)范的數(shù)據(jù)結構,又方便轉換成其他的通用數(shù)據(jù)格式,便于入庫。實踐證明,成都市雙流縣部件普查程序大大加快了數(shù)據(jù)生產(chǎn)速度,提高了數(shù)據(jù)準確性,為城市部件普查的快速開展奠定了堅實的基礎。
[1]李鳳華.AutoCAD 2002/2000 VBA開發(fā)指南[M].北京:清華大學出版社,2001.
[2]CJ/T214-2007.城市市政綜合監(jiān)管信息系統(tǒng) 管理部件和事件分類、編碼及數(shù)據(jù)要求[S].
[3]張大長,潘慶林,姚伯金.AutoCAD環(huán)境下地形圖符號庫的建立[J].南京建筑工程學院學報,1996(4):48~53.
[4]張帆,鄭立楷,盧擇臨等.AutoCAD VBA二次開發(fā)教程[M].北京:清華大學出版社,2006.
[5]李長勛.AutoCAD VBA程序開發(fā)技術[M].北京:國防工業(yè)出版社,2005.
[6]徐建平,王新程.精通AutoCAD 2004中文版[M].北京:清華大學出版社,2003.
[7]周平,滕得貴,曹欣.重慶市市政部件普查要點淺析[J].城市勘測,2009(1):21~23.