穆 凱
(1.新疆維吾爾自治區(qū)第二測(cè)繪院, 新疆 烏魯木齊830000)
測(cè)繪領(lǐng)域目前常用的圖幅接邊編輯軟件有Geoway、AutoCAD、MapGIS、ArcDIS、Coredraw等,這些軟件在自動(dòng)接邊時(shí)存在的問題有:不提供接邊檢查、無(wú)屬性項(xiàng)接邊、接邊生硬、直角房屋接邊角度變形、獨(dú)立面要素接邊與相鄰面產(chǎn)生面裂隙、大數(shù)據(jù)量接邊計(jì)算緩慢等[1-3]。人工接邊則存在接邊精度無(wú)法保證、屬性項(xiàng)接邊檢查工作量大、容易出現(xiàn)遺漏等問題[4]。本文結(jié)合上述常見的接邊問題,按照人機(jī)交互的接邊方式,先檢查再接邊,保留檢查結(jié)果,闡述錯(cuò)誤原因,并能定位錯(cuò)誤位置,保證接邊準(zhǔn)確性。設(shè)計(jì)智能算法確保大數(shù)據(jù)量接邊速度,做到線接邊自然過渡、面接邊角度無(wú)變化、無(wú)縫接邊。設(shè)計(jì)了多種接邊方案,最終實(shí)現(xiàn)操作者使用該程序能最大程度地提高工作效率、節(jié)約生產(chǎn)成本、保證產(chǎn)品質(zhì)量。
ArcGIS中利用Spatial Adjustment里的edge match實(shí)現(xiàn)自動(dòng)接邊。設(shè)置接邊緩沖區(qū),對(duì)接邊要素采用樣條法進(jìn)行平滑??梢赃x擇一個(gè)目標(biāo)點(diǎn)由多個(gè)源點(diǎn)連接來保證面要素接邊時(shí)不產(chǎn)生面裂隙,但ArcGIS接邊工具中沒有提供接邊檢查,屬性接邊后無(wú)法保持原要素的角度,接邊方式采用主圖附圖各改一半的方式,接邊后有些地方還得靠手工接邊。
MapGIS提供了一個(gè)“接邊處理”的模塊,可以根據(jù)參數(shù)設(shè)置的方式進(jìn)行接邊范圍及容差設(shè)置,只支持單層接邊,線面接邊要分開,接邊效果生硬不自然,接邊結(jié)果為兩圖各改一半,無(wú)接邊檢查,無(wú)屬性檢查。
Geoway 軟件中專門設(shè)計(jì)了接邊工程,設(shè)計(jì)了接邊邊線確認(rèn)功能來保證接邊的準(zhǔn)確性,可以設(shè)置接邊緩沖區(qū),提供了3種接邊方案來應(yīng)對(duì)與已成圖接邊時(shí)所產(chǎn)生的問題。在線接邊過程中采用5點(diǎn)遞減的偏移方式進(jìn)行自然過渡處理,保證接邊不生硬??梢圆捎每蜻x、點(diǎn)選要素的方式進(jìn)行自動(dòng)接邊。但是在Geoway軟件中沒有提供直接構(gòu)面概念,其中的面要素都是通過線要素構(gòu)面的方式進(jìn)行的,所以對(duì)線要素接邊后要進(jìn)行重構(gòu)面的處理。此外Geoway中也沒有提供接邊檢查,以及屬性項(xiàng)接邊的功能,接邊后面形狀有變化。
AutoCAD和Coredraw本身并不是專業(yè)的GIS軟件,所以在設(shè)計(jì)中并沒有提供專門的接邊功能,可以通過軟件中自帶的捕捉和屬性查看功能進(jìn)行人工接邊,接邊費(fèi)時(shí)費(fèi)力,且容易遺漏,精度不高。
將整個(gè)程序分為接邊檢查與接邊修復(fù)2個(gè)部分來實(shí)現(xiàn)。接邊檢查功能的設(shè)計(jì)既是對(duì)自動(dòng)接邊功能的一種補(bǔ)充,又是對(duì)自動(dòng)接邊成果的一種檢驗(yàn)。接邊檢查對(duì)因特定原因不能實(shí)現(xiàn)自動(dòng)接邊需要手動(dòng)接邊的圖幅提供了參考依據(jù)[5]。接邊修復(fù)分為線要素接邊、面要素接邊和屬性項(xiàng)接邊3種類型,修復(fù)側(cè)重各有不同,如圖1所示。
邊界的確定直接影響到接邊的最終成果,它具有唯一性、準(zhǔn)確性的特點(diǎn)。下文中各種算法的實(shí)現(xiàn)都是以邊界線的提取為前提的。
首先通過圖號(hào)計(jì)算出主圖圖廓四角的大地坐標(biāo),然后通過高斯反算計(jì)算出投影坐標(biāo),為了確保圖廓精度,采用人機(jī)互動(dòng)的方式對(duì)圖廓坐標(biāo)予以顯示,并可以進(jìn)行人工校正,再利用主圖與副圖的圖號(hào)判斷它們之間的空間位置關(guān)系,確定相鄰邊界線并將其保存為Geometry的數(shù)據(jù)形式,便于空間分析使用。
圖1 接邊設(shè)計(jì)流程圖
按點(diǎn)查詢按要素修改的接邊方式,判斷這些在邊界上的點(diǎn)是否在限差范圍內(nèi),可以通過判斷是否存在與其相同類型的鄰圖點(diǎn)就可以。如果鄰圖不存在對(duì)應(yīng)接邊點(diǎn)則為空間幾何位置不接邊。在接邊檢查中先提取主圖與副圖邊界線上的點(diǎn),縮小比較范圍,來提高運(yùn)算效率。具體方法如下:
對(duì)已提取的邊界線Geometry建立緩沖極小的緩沖區(qū),分別對(duì)主圖和副圖作緩沖區(qū)分析,提取每幅圖中與邊界線上存在的點(diǎn)并將其分別保存至數(shù)據(jù)庫(kù)臨時(shí)表中。
IGeometry geometry = topologicalOperator.Buffer(distance);//對(duì)邊界線建立緩沖區(qū)
IRelationalOperator relationalOperator = geometry as IRelationalOperator;//將緩沖區(qū)放入關(guān)系容器中
if (relationalOperator.Contains(pointCollection.get_Point(i)))//提取邊線上的點(diǎn)
再對(duì)主圖邊界線上的點(diǎn)逐一建立緩沖區(qū),緩沖區(qū)范圍為接邊限差的最大距離。逐一與副圖邊界線上的點(diǎn)作比較,如果緩沖區(qū)范圍內(nèi)不存在副圖中的要素和邊界線的交點(diǎn),則證明該點(diǎn)所在位置的對(duì)應(yīng)幾何體與副圖存在幾何位置不接邊的情況,用紅色邊框?qū)υ擖c(diǎn)所在位置進(jìn)行標(biāo)注,并記錄錯(cuò)誤信息。通過axMapControl1.CenterAt方法可以實(shí)現(xiàn)雙擊錯(cuò)誤信息局部放大錯(cuò)誤位置的效果。如果緩沖區(qū)范圍內(nèi)存在副圖點(diǎn),則查詢其屬性信息是否與主圖屬性一致,如不一致用藍(lán)色邊框標(biāo)出,并記錄具體錯(cuò)誤原因,如圖2所示。
圖2 錯(cuò)誤記錄及錯(cuò)誤標(biāo)注
這種接邊檢查算法可能在面屬性檢查時(shí)出現(xiàn)誤判,將無(wú)公共邊但存在公共點(diǎn)的一對(duì)面進(jìn)行比較,而對(duì)角相鄰的面實(shí)際上屬性是可以不一致的。因此要在屬性比較前判斷2個(gè)面是否存在公共邊,再進(jìn)行屬性比較,如圖3所示。
圖3 蘆葦不會(huì)與相鄰的密集進(jìn)行屬性比較
幾何位置接邊主要分線接邊和面接邊2種,每種方式都有其所側(cè)重的方向。線接邊首先通過接邊檢查后查找出有錯(cuò)誤的點(diǎn)所對(duì)應(yīng)的幾何體,判斷幾何形狀是線的幾何體,對(duì)該點(diǎn)作緩沖區(qū)查找,找出其可移動(dòng)限差范圍內(nèi)的最近的一個(gè)屬性相同的線形幾何體與其進(jìn)行接邊。接邊算法是將2條線在圖廓線上對(duì)應(yīng)點(diǎn)移動(dòng)至同一位置實(shí)現(xiàn)接邊,但這種算法所實(shí)現(xiàn)的接邊效果過渡不自然,因此要加入一定的智能算法對(duì)角度變化較大的線進(jìn)行擬合。首先判斷接邊前后的線在節(jié)點(diǎn)移動(dòng)后角度變化是否超過30°,如果超過30°則對(duì)其進(jìn)行擬合,如圖4所示。
提取與線要素邊線上的點(diǎn)相鄰的連續(xù)4個(gè)點(diǎn)進(jìn)行擬合處理(如不足4點(diǎn)則注記遞減),主要的擬合算法有樣條法和逐漸遞減的方法。測(cè)試對(duì)5點(diǎn)進(jìn)行2次樣條法擬合和3次樣條法擬合后發(fā)現(xiàn),在對(duì)一些特殊的線段擬合后會(huì)超出移動(dòng)限差位移,所以最終選用逐級(jí)遞減方式進(jìn)行擬合過渡。以下為算法的實(shí)現(xiàn)過程(usep1為邊界上點(diǎn)的序號(hào),如果usp1為終點(diǎn),下式中usp1后改為減號(hào),mdx1 、mdy1為邊界上點(diǎn)坐標(biāo)位移):
newp12.PutCoords(p1c.get_Point(usep1 + 1).X - (mdx1/ 5 * 4), p1c.get_Point(usep1 + 1).Y - (mdy1 / 5 * 4));
newp13.PutCoords(p1c.get_Point(usep1 + 2).X - (mdx1/ 5 * 3), p1c.get_Point(usep1 + 2).Y - (mdy1 / 5 * 3));
圖4 有過渡的自然接邊與沒有過渡的生硬接邊比較
newp14.PutCoords(p1c.get_Point(usep1 + 3).X - (mdx1/ 5 * 2), p1c.get_Point(usep1 + 3).Y - (mdy1 / 5 * 2));
newp15.PutCoords(p1c.get_Point(usep1 + 4).X - (mdx1/ 5 * 1), p1c.get_Point(usep1 + 4).Y - (mdy1 / 5 * 1));
面要素接邊主要側(cè)重于解決接邊后面形狀變形、接邊后產(chǎn)生面裂隙和部分面不到邊界線這3類問題。其余接邊算法與線要素接邊相似,都是將2個(gè)不同要素邊線上對(duì)應(yīng)的一對(duì)點(diǎn)移動(dòng)至同一位置。
接邊后,面要素形狀變形的原因是在邊界線上點(diǎn)位移后所產(chǎn)生的角度變化。因此只要對(duì)邊線上的點(diǎn)和與之相鄰且不在邊線上的點(diǎn)同時(shí)做平行移動(dòng),就不會(huì)發(fā)生角度變化。通過判斷與需要移動(dòng)的點(diǎn)、相鄰序號(hào)的點(diǎn)和邊界線的關(guān)系判斷面要素點(diǎn)集的單調(diào)性,從而確定需要作平行移動(dòng)的點(diǎn)[6]。
圖5 1點(diǎn)的相鄰點(diǎn)是2和8,2也在邊線上對(duì)1和8點(diǎn)進(jìn)行平行移動(dòng)
在確定需作同時(shí)平行移動(dòng)的點(diǎn)后(圖5中8號(hào)點(diǎn))對(duì)兩點(diǎn)同時(shí)作平行移動(dòng)達(dá)到接邊后面要素形狀不變的效果。接邊后產(chǎn)生面裂隙的原因是,在對(duì)2個(gè)面要素因接邊發(fā)現(xiàn)位移后,與其有公共邊的相鄰面沒有同時(shí)發(fā)生對(duì)應(yīng)位移從而產(chǎn)生了面裂隙[7]。采用對(duì)移動(dòng)節(jié)點(diǎn)作緩沖區(qū)分析的方法提取與之對(duì)應(yīng)的面要素,并提取對(duì)應(yīng)的點(diǎn)進(jìn)行映射移動(dòng),如圖6所示。
通常一個(gè)由4條邊構(gòu)成的面在被裁切后會(huì)與切割線有2個(gè)交點(diǎn),比較復(fù)雜的面會(huì)有偶數(shù)個(gè)交點(diǎn),當(dāng)出現(xiàn)奇數(shù)個(gè)節(jié)點(diǎn)時(shí),就有可能會(huì)是在作業(yè)過程中產(chǎn)生的失誤而導(dǎo)致的有一端點(diǎn)不在邊界線上。除此之外,也會(huì)有偶數(shù)個(gè)節(jié)點(diǎn),但在特殊情況下也存在部分面不到邊界線的情況。針對(duì)此情況,通過逐一判斷與面要素所有在邊界線上的點(diǎn)相鄰序號(hào)的左右2個(gè)節(jié)點(diǎn)來判斷它們是否在邊界線上,如果都不在邊界上,則選擇移動(dòng)限差內(nèi)離邊線距離最近的一個(gè)節(jié)點(diǎn),將其移動(dòng)至邊界上。
圖6 無(wú)縫接邊
經(jīng)過實(shí)際應(yīng)用檢驗(yàn)發(fā)現(xiàn),智能接邊算法可有效節(jié)省系統(tǒng)內(nèi)存資源,快速進(jìn)行圖幅要素的接邊檢查,實(shí)現(xiàn)數(shù)字地圖的快速接邊,解決了一般接邊算法存在的接邊生硬、接邊后形狀變化和接邊后存在的面裂隙等問題。而且具有簡(jiǎn)單、實(shí)用、運(yùn)行效率高等特點(diǎn),特別是在數(shù)據(jù)量比較大的情況下效果尤其明顯。但是這種算法在對(duì)結(jié)構(gòu)過于復(fù)雜的面進(jìn)行接邊時(shí),暫時(shí)還存在一些遺漏,今后將進(jìn)一步完善。
[1]趙江洪.GIS中多圖幅自動(dòng)接邊的實(shí)現(xiàn)方法探討[J].測(cè)繪通報(bào),2006(2):50-52
[2]孫麗娜,李吉之,陳靜.基于AO的同比例尺地形圖無(wú)縫接邊技術(shù)及其實(shí)現(xiàn)方法[J].測(cè)繪工程,2007(6):49-53
[3]王永哲,金永寶,劉烜.基于ArcGIS Engine 9.2的圖幅自動(dòng)接邊算法的實(shí)現(xiàn)[J].安徽農(nóng)業(yè)科學(xué),2008(34):15 263-15 265
[4]戴相喜,周衛(wèi),高磊.DLG數(shù)據(jù)任意范圍接邊算法及實(shí)現(xiàn)[J].測(cè)繪通報(bào),2008(7):32-35
[5]趙江洪.地理信息系統(tǒng)中多圖幅接邊的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪科學(xué),2004(1):45-46,6
[6]曹麗娟.基于ArcObjects的多圖幅自動(dòng)接邊研究與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2010(9):49-51
[7]韓志遠(yuǎn).基于ArcObjects的城市基礎(chǔ)地理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].大眾科技,2010 (12):31-32