GIS開發(fā):如何在GIS數(shù)據(jù)處理的過程中進(jìn)行拓?fù)錂z查?
在學(xué)習(xí)GIS專業(yè)知識或者從事GIS行業(yè)工作時,大家可能經(jīng)常會接觸到“拓?fù)洹薄ⅰ翱臻g拓?fù)潢P(guān)系”、“拓?fù)錂z查”等類似的概念,那么究竟什么是“拓?fù)洹保繛槭裁葱枰贕IS數(shù)據(jù)處理的過程中進(jìn)行拓?fù)錂z查?以及如何通過二次開發(fā)實(shí)現(xiàn)拓?fù)錂z查的功能?
1.什么是拓?fù)洌?/h1>
首先,我們簡要介紹下拓?fù)涞幕靖拍?,先看看下面一段定義:
拓?fù)鋵W(xué)是研究幾何圖形或空間在連續(xù)改變形狀后還能保持不變的一些性質(zhì)的一個學(xué)科,通過將空間幾何實(shí)體抽象成與其大小、形狀無關(guān)的點(diǎn),將連接實(shí)體的線路抽象成線,進(jìn)而研究點(diǎn)、線、面之間的關(guān)系。
其實(shí)簡單來說,拓?fù)鋵W(xué)屬于數(shù)學(xué)中幾何學(xué)的一個分支,它與通常的平面幾何、立體幾何有所不同,不研究幾何對象的長短、面積等度量性質(zhì),而是研究幾何對象之間的關(guān)系。
比如著名的哥尼斯堡七橋問題:是否存在這樣的走法,即任意從A、B、C、D出發(fā),走遍七座橋,每個橋只能通過一次,再回到出發(fā)點(diǎn)?

在GIS中,拓?fù)涮幚淼暮诵氖墙⑼負(fù)潢P(guān)系,拓?fù)潢P(guān)系是地理對象在空間位置上的相互關(guān)系,如結(jié)點(diǎn)與線、線與面之間的連接關(guān)系??臻g實(shí)體之間的拓?fù)潢P(guān)系是GIS進(jìn)行空間分析和決策的基礎(chǔ)之一。

2.GIS數(shù)據(jù)為什么要進(jìn)行拓?fù)錂z查?
眾所周知,空間數(shù)據(jù)在采集和編輯過程中,常會不可避免地出現(xiàn)一些數(shù)據(jù)錯誤。例如,同一個結(jié)點(diǎn)或同一條線被數(shù)字化了兩次;相鄰的面狀幾何對象在采集過程中出現(xiàn)了裂縫或者相交;多邊形不封閉;多邊形的邊為懸線等等,導(dǎo)致假結(jié)點(diǎn)、冗余結(jié)點(diǎn)、懸線、重復(fù)線等錯誤數(shù)據(jù)的產(chǎn)生。



,而且比較隱蔽,肉眼不容易識別出來,通過手工方法也不易去除,導(dǎo)致采集的空間數(shù)據(jù)之間的拓?fù)潢P(guān)系和實(shí)際地物之間的拓?fù)潢P(guān)系不符合,以致影響后續(xù)的數(shù)據(jù)處理和分析工作,進(jìn)而影響數(shù)據(jù)的質(zhì)量和可用性。因此,需要進(jìn)行拓?fù)涮幚硐@些冗余和錯誤的數(shù)據(jù)。
3.二次開發(fā)實(shí)現(xiàn)拓?fù)錂z查
由于拓?fù)錂z查在GIS數(shù)據(jù)生產(chǎn)與使用過程中起到的關(guān)鍵作用,因此在各大GIS軟件中拓?fù)湎嚓P(guān)功能也成為必不可少的GIS模塊。其原理往往大同小異,即通過建立不同的拓?fù)湟?guī)則對數(shù)據(jù)進(jìn)行拓?fù)錂z查。
下面以MapGIS桌面二次開發(fā)為例,給大家介紹如何在桌面GIS應(yīng)用中快速開發(fā)實(shí)現(xiàn)拓?fù)錂z查功能:
(1)實(shí)現(xiàn)思路
MapGIS桌面二次開發(fā)SDK在MapGIS.SpatialAnalysis程序集中封裝了專門的拓?fù)錂z查類SPTopologyChecker,用于實(shí)現(xiàn)拓?fù)錂z查功能?;緦?shí)現(xiàn)思路如下:

(2)接口詳解
◆ 設(shè)置拓?fù)湟?guī)則,通過AddTopologyRule方法可以設(shè)置拓?fù)錂z查時的規(guī)則;MapGIS將多種不同類型的拓?fù)湟?guī)則封裝為枚舉類型供該方法作為參數(shù)設(shè)置,滿足不同情況下的拓?fù)錂z查需求。

◆ 設(shè)置拓?fù)錂z查數(shù)據(jù),SetCheckSfcls方法可以設(shè)置要進(jìn)行拓?fù)錂z查的矢量數(shù)據(jù),其中第二個數(shù)據(jù)對象為參考數(shù)據(jù),即是否為兩個數(shù)據(jù)之間的拓?fù)錂z查,若僅為單個數(shù)據(jù)本身的拓?fù)?,第二個對象傳入空值null即可。
◆ 拓?fù)錂z查,值得注意的是CheckTopology方法包含了兩個參數(shù),分別是SPTopologyCheckParameter拓?fù)錂z查參數(shù)對象和SPTopologyErrorManager拓?fù)溴e誤管理對象,顧名思義分別是用于設(shè)置拓?fù)洳樵兊膮?shù)和管理拓?fù)溴e誤的。簡單來說,拓?fù)鋮?shù)對象可以設(shè)置拓?fù)錂z查時的容差、最小長度、面積等檢查指標(biāo),而錯誤管理對象則保存檢查處的錯誤結(jié)果,包括錯誤類型、對應(yīng)的要素等,便于進(jìn)行后續(xù)的錯誤修改。詳細(xì)接口信息可參考我們的在線API文檔:
http://develop.smaryun.com:81/API/DesktopAPI/MapGISDesktopDNETAPI/index.html#id_813
4.拓?fù)錂z查
通過上面介紹的接口,我們即可通過MapGIS桌面二次開發(fā)SDK實(shí)現(xiàn)GIS中常用的拓?fù)錂z查功能,下圖為單個區(qū)圖層使用部分規(guī)則進(jìn)行拓?fù)錂z查的結(jié)果:

其中,錯誤管理部分展示的內(nèi)容即為從SPTopologyErrorManager對象中獲取的各條拓?fù)溴e誤信息。
如果文章對你有幫助的話,也請你幫我2個忙吧 (*?▽?*)
給這篇文章一鍵三連吧,對我很重要啦~
關(guān)注一下我 @新中地職業(yè)培訓(xùn)學(xué)校,聽說現(xiàn)在關(guān)注的,以后都是尊貴的老粉啦!
獲取更多GIS開發(fā)相關(guān)課程資源V:gis0329