顧有兵
(蚌埠市勘測(cè)設(shè)計(jì)研究院,安徽蚌埠 233000)
AutoCAD中過(guò)近頂點(diǎn)的自動(dòng)溶合
顧有兵
(蚌埠市勘測(cè)設(shè)計(jì)研究院,安徽蚌埠 233000)
在基于AuotoCAD的圖形中,采用多邊形過(guò)近頂點(diǎn)的自動(dòng)溶合方式,可有效地消除多邊形的拓?fù)鋯?wèn)題,提高內(nèi)業(yè)數(shù)據(jù)處理速度和數(shù)據(jù)質(zhì)量。
多邊形;拓?fù)?自動(dòng)溶合
在地籍測(cè)量中,要求宗地線、圖斑線、房屋線等之間拓?fù)潢P(guān)系正確,即不能有懸掛點(diǎn)、重疊、交叉等問(wèn)題存在,利用文獻(xiàn)[1-2]可有效地發(fā)現(xiàn)存在的拓?fù)鋯?wèn)題,進(jìn)而以手工方式逐個(gè)進(jìn)行處理。在文獻(xiàn)[1]中也提到,這種錯(cuò)誤是人工操作時(shí)造成的,一般問(wèn)題較小。另外,不同的軟件之間相互轉(zhuǎn)換數(shù)據(jù),因取位問(wèn)題,多邊形之間看似完全重合,但放大之后有極小差異;再就是圖形之間的相互復(fù)制,其定位點(diǎn)的微小差異也會(huì)引起微小的拓?fù)鋯?wèn)題。盡管這些問(wèn)題在測(cè)量誤差的允許范圍內(nèi),但在整個(gè)圖形數(shù)據(jù)中是不允許存在的。雖然這些拓?fù)鋯?wèn)題極小,反不如大的問(wèn)題容易處理,而且這些微小的拓?fù)鋯?wèn)題可能因系統(tǒng)問(wèn)題大量存在,盡管采用文獻(xiàn) [1-2]的方法可以快速發(fā)現(xiàn),但因數(shù)量大,處理起來(lái)也非常麻煩。如圖 1所示,多邊形A與多邊形B之間存在縫隙,因點(diǎn) 1、2之間的間距極小 (實(shí)際編程時(shí)可以自由設(shè)定),無(wú)論是點(diǎn) 1靠近到點(diǎn) 2上,還是點(diǎn) 2靠近到點(diǎn) 1上,或者點(diǎn) 1、點(diǎn) 2靠近到兩點(diǎn)的連線中點(diǎn)上,都可以滿足要求,而不需人工輔助判斷,這就為自動(dòng)處理提供了可能。
圖1 拓?fù)鋯?wèn)題示例
頂點(diǎn)的自動(dòng)溶合是將在設(shè)定范圍內(nèi)的若干個(gè)頂點(diǎn)溶合為一個(gè)頂點(diǎn),從而消除多邊形的拓?fù)溴e(cuò)誤。如圖 2所示,多邊形 A、B、C、D在頂點(diǎn)A3、B4、D1、C2處存在微小的拓?fù)溴e(cuò)誤,頂點(diǎn)的自動(dòng)溶合即是將頂點(diǎn) A3、B4、D1、C2自動(dòng)溶合為相同坐標(biāo)值的點(diǎn),從而消除多邊形之間的微小拓?fù)溴e(cuò)誤。
圖2 多邊形之間的微小拓?fù)溴e(cuò)誤
在AutoCAD中多邊形均是由若干個(gè)頂點(diǎn)構(gòu)成,多邊形的形狀、位置等則是由頂點(diǎn)的坐標(biāo)值確定。如圖 2所示,多邊形A由頂點(diǎn)A1、A2、A3、A4構(gòu)成;多邊形B由頂點(diǎn)B1、B2、B3、B4構(gòu)成;多邊形 C由頂點(diǎn)C1、C2、C3、C4構(gòu)成;多邊形 D由頂點(diǎn) D1、D2、D3、D4構(gòu)成。多邊形之間的關(guān)系只是位置上的關(guān)系,這種關(guān)系隱含在頂點(diǎn)坐標(biāo)值中,需要通過(guò)坐標(biāo)分析來(lái)獲得,而不是記錄在多邊形或圖形的某種屬性中,并可以直接讀取。如點(diǎn) A2和點(diǎn) B1位置相同,這種位置相同只有通過(guò)坐標(biāo)分析才可以計(jì)算得到,而在圖形或多邊形某個(gè)屬性中沒有記錄。所以在AutoCAD中分析或處理多邊形必須從分析或處理頂點(diǎn)坐標(biāo)開始。
通過(guò)AutoCAD多邊形的分析可知,預(yù)分析或處理多邊形需從頂點(diǎn)坐標(biāo)開始,頂點(diǎn)自動(dòng)溶合的具體方案流程如下:
1)設(shè)定自動(dòng)溶合的限差,即距離小于多少的頂點(diǎn)才會(huì)相互溶合。
2)生成預(yù)留頂點(diǎn)坐標(biāo)庫(kù)。逐個(gè)處理多邊形,分析多邊形的每一個(gè)頂點(diǎn),如果當(dāng)前頂點(diǎn)與頂點(diǎn)庫(kù)中所有頂點(diǎn)的最小距離大于設(shè)限差,則將當(dāng)前頂點(diǎn)加入到頂點(diǎn)庫(kù)中去,否則不加入,最后形成需保留頂點(diǎn)的頂點(diǎn)庫(kù)。如圖 2所示,假設(shè)處理多邊形的順序是按照A、B、C、D進(jìn)行的,分析各頂點(diǎn)也是按照 1、2、3、4順序進(jìn)行的。處理多邊形 A時(shí),首先分析頂點(diǎn)A1,因頂點(diǎn)庫(kù)中當(dāng)前為空,則頂點(diǎn) A1加入到頂點(diǎn)庫(kù)中去,分析點(diǎn) A2時(shí),與頂點(diǎn)庫(kù)中最小距離為和點(diǎn)A1的距離,大于限差,加入頂點(diǎn)庫(kù),A3、A4也會(huì)加入頂點(diǎn)庫(kù)。處理多邊形B時(shí),分析頂點(diǎn) B1,因 B1與頂點(diǎn)庫(kù)中最小距離(和A2的距離)為 0,所以頂點(diǎn)B1被忽略,沒有加入頂點(diǎn)庫(kù)。設(shè)點(diǎn)B4、D1、C2與點(diǎn)A3距離均小于限差,則都不加入頂點(diǎn)庫(kù),最后加入頂點(diǎn)庫(kù)中所有的頂點(diǎn)為A1、A2、A3、A4、B2、B3、D3、D4、C2。
3)頂點(diǎn)的溶合處理。頂點(diǎn)庫(kù)生成后再次逐個(gè)處理多邊形,對(duì)多個(gè)頂點(diǎn)進(jìn)行分析處理。如果當(dāng)前頂點(diǎn)與頂點(diǎn)庫(kù)中點(diǎn)的最小距離不為 0,則用最小距離對(duì)應(yīng)的點(diǎn)替換當(dāng)前頂點(diǎn)坐標(biāo),相當(dāng)于把當(dāng)前頂點(diǎn)移動(dòng)到距離頂點(diǎn)庫(kù)中距離最小的頂點(diǎn)上。如圖 2所示,仍然假設(shè)處理多邊形的順序是按照A、B、C、D進(jìn)行的,分析各頂點(diǎn)也是按照 1、2、3、4順序進(jìn)行的。處理多邊形A時(shí),首先分析頂點(diǎn) A1,頂點(diǎn) A1在頂點(diǎn)庫(kù)中存在,則頂點(diǎn)A1距離頂點(diǎn)庫(kù)中距離所有點(diǎn)的最小距離為 0,不用調(diào)整,保持原位置不動(dòng),頂點(diǎn) A2、A3、A4相同。處理多邊形 B時(shí),點(diǎn) B1、B2、B3距離頂點(diǎn)庫(kù)中距離所有點(diǎn)的最小距離均為 0,不作調(diào)整,分析頂點(diǎn)B4時(shí),因點(diǎn)B4沒有加入到頂點(diǎn)庫(kù),且和頂點(diǎn)庫(kù)所有點(diǎn)的最小距離為和 A3的距離,不為 0,則將B4移動(dòng)到點(diǎn) A3上。逐個(gè)多邊形逐頂點(diǎn)進(jìn)行分析處理,頂點(diǎn)D1、C2會(huì)移動(dòng)到點(diǎn) A3上,其他頂點(diǎn)位置不會(huì)調(diào)整。
4)優(yōu)先圖層的設(shè)置。在頂點(diǎn)的自動(dòng)溶合處理過(guò)程中,如前所述,各多邊形處理順序是無(wú)法預(yù)知的,處理的順序不同,則選擇的頂點(diǎn)庫(kù)中頂點(diǎn)就不同,處理的結(jié)果就不同,在大批量數(shù)據(jù)處理中人為設(shè)置順序的可能性也不大,盡管這種自動(dòng)處理的限差設(shè)置會(huì)很小,對(duì)測(cè)量誤差來(lái)說(shuō)毫無(wú)意義,但對(duì)于拓?fù)涮幚韥?lái)說(shuō)會(huì)存在問(wèn)題。如在地籍圖中,假設(shè)街坊的邊界已經(jīng)設(shè)定,則在處理街坊線和宗地線時(shí),街坊界是不能被調(diào)整的,即使和宗地邊界有微小縫隙,只能調(diào)整宗地界線。為此,在頂點(diǎn)庫(kù)構(gòu)建時(shí),設(shè)置一優(yōu)先圖層。首先處理優(yōu)先圖層中的多邊形,再處理其他圖層上的多邊形,則位置調(diào)整時(shí),參照點(diǎn)優(yōu)先是使用了優(yōu)先圖層上的頂點(diǎn),確保其他圖層上的點(diǎn)向優(yōu)先圖層上的點(diǎn)靠近。在實(shí)際處理問(wèn)題時(shí),首先將街坊界進(jìn)行獨(dú)立自動(dòng)處理,確保街坊界拓?fù)錄]有問(wèn)題,再將街坊和宗地界聯(lián)合處理,將街坊界設(shè)為優(yōu)先圖層,則街坊和宗地之間有微小拓?fù)鋯?wèn)題時(shí),是宗地界線靠近到街坊界線上。以此逐級(jí)處理宗地與圖斑、圖斑與房屋等。
通過(guò)以上的分析,采用 Visual Studio 2008中VB.net語(yǔ)言基于 AutoCAD 2008進(jìn)行程序設(shè)計(jì),程序的主要語(yǔ)句如下:
1)使用以上設(shè)計(jì)的程序?qū)D 2進(jìn)行頂點(diǎn)溶合處理,未設(shè)置優(yōu)先圖層,結(jié)果如圖 3所示。設(shè)置多邊形B所在圖層為優(yōu)先圖層,其他多邊形不在優(yōu)先圖層上,處理結(jié)果如圖 4所示。通過(guò)優(yōu)先圖層的設(shè)置,可確保處理結(jié)果按設(shè)定目標(biāo)處理,達(dá)到處理結(jié)果的可控性。
2)因?yàn)轫旤c(diǎn)位置的自動(dòng)調(diào)整,為不影響圖形本身的數(shù)學(xué)精度,所以限值設(shè)定一般小于 0.001 m,確保不影響測(cè)量成果精度。
3)頂點(diǎn)自動(dòng)溶合不僅用于圖形微小拓?fù)溴e(cuò)誤的自動(dòng)處理,還可用于多邊形邊長(zhǎng)的濾波處理,自動(dòng)刪除多邊形過(guò)短邊長(zhǎng),減小數(shù)據(jù)量。如圖 5、圖 6所示。
圖 3 多邊形頂點(diǎn)自動(dòng)溶合結(jié)果(無(wú)優(yōu)先圖層)
圖 4 多邊形頂點(diǎn)自動(dòng)溶合結(jié)果(B為優(yōu)先圖層)
圖5 多邊形濾波前情況
圖6 多邊形濾波后情況
[1] 陳重奎,李乃良.基于 AutoCAD的多邊形間的間隙核查[J].測(cè)繪通報(bào),2009(8):44-46.
[2] 陳重奎,李乃良.AutoCAD中利用區(qū)域計(jì)算實(shí)現(xiàn)多邊形的重疊與空洞檢查 [J].城市勘測(cè),2009(4): 117-119.
[3] STEVEN J,牛力,等.Visual Basic 6編程寶典[M].北京:電子工業(yè)出版社,2004.
Automatic Gathering of Polygon Apexes in AutoCAD
GU Youbing
0494-0911(2010)07-0062-03
P271
B
2010-02-22;
2010-06-06
顧有兵(1957—),男,安徽蚌埠人,高級(jí)工程師,主要研究方向?yàn)楣こ虦y(cè)量。