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

在GIS中,拓?fù)涮幚淼暮诵氖墙⑼負(fù)潢P(guān)系,拓?fù)潢P(guān)系是地理對(duì)象在空間位置上的相互關(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ù)在采集和編輯過(guò)程中,常會(huì)不可避免地出現(xiàn)一些數(shù)據(jù)錯(cuò)誤。例如,同一個(gè)結(jié)點(diǎn)或同一條線被數(shù)字化了兩次;相鄰的面狀幾何對(duì)象在采集過(guò)程中出現(xiàn)了裂縫或者相交;多邊形不封閉;多邊形的邊為懸線等等,導(dǎo)致假結(jié)點(diǎn)、冗余結(jié)點(diǎn)、懸線、重復(fù)線等錯(cuò)誤數(shù)據(jù)的產(chǎn)生。



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

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

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

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