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