在學習GIS專業知識或者從事GIS行業工作時,大家可能經常會接觸到“拓撲”、“空間拓撲關系”、“拓撲檢查”等類似的概念,那么究竟什么是“拓撲”?為什么需要在GIS數據處理的過程中進行拓撲檢查?以及如何通過二次開發實現拓撲檢查的功能?
1.什么是拓撲?
首先,我們簡要介紹下拓撲的基本概念,先看看下面一段定義:
拓撲學是研究幾何圖形或空間在連續改變形狀后還能保持不變的一些性質的一個學科,通過將空間幾何實體抽象成與其大小、形狀無關的點,將連接實體的線路抽象成線,進而研究點、線、面之間的關系。
其實簡單來說,拓撲學屬于數學中幾何學的一個分支,它與通常的平面幾何、立體幾何有所不同,不研究幾何對象的長短、面積等度量性質,而是研究幾何對象之間的關系。
比如著名的哥尼斯堡七橋問題:是否存在這樣的走法,即任意從A、B、C、D出發,走遍七座橋,每個橋只能通過一次,再回到出發點?
圖 1 哥尼斯堡七橋問題
在GIS中,拓撲處理的核心是建立拓撲關系,拓撲關系是地理對象在空間位置上的相互關系,如結點與線、線與面之間的連接關系。空間實體之間的拓撲關系是GIS進行空間分析和決策的基礎之一。
圖 2 空間拓撲關系
2.GIS數據為什么要進行拓撲檢查?
眾所周知,空間數據在采集和編輯過程中,常會不可避免地出現一些數據錯誤。例如,同一個結點或同一條線被數字化了兩次;相鄰的面狀幾何對象在采集過程中出現了裂縫或者相交;多邊形不封閉;多邊形的邊為懸線等等,導致假結點、冗余結點、懸線、重復線等錯誤數據的產生。
圖 3 線中包含重復結點
圖 4 區(多邊形)有空隙
圖 5 區(多邊形)不封閉
這些數據錯誤往往量大,而且比較隱蔽,肉眼不容易識別出來,通過手工方法也不易去除,導致采集的空間數據之間的拓撲關系和實際地物之間的拓撲關系不符合,以致影響后續的數據處理和分析工作,進而影響數據的質量和可用性。因此,需要進行拓撲處理消除這些冗余和錯誤的數據。
3.二次開發實現拓撲檢查
由于拓撲檢查在GIS數據生產與使用過程中起到的關鍵作用,因此在各大GIS軟件中拓撲相關功能也成為必不可少的GIS模塊。其原理往往大同小異,即通過建立不同的拓撲規則對數據進行拓撲檢查。
下面以MapGIS桌面二次開發為例,給大家介紹如何在桌面GIS應用中快速開發實現拓撲檢查功能:
一、實現思路
MapGIS桌面二次開發SDK在MapGIS.SpatialAnalysis程序集中封裝了專門的拓撲檢查類SPTopologyChecker,用于實現拓撲檢查功能。基本實現思路如下:
圖 6 拓撲檢查實現思路
二、接口詳解
設置拓撲規則,通過AddTopologyRule方法可以設置拓撲檢查時的規則;MapGIS將多種不同類型的拓撲規則封裝為枚舉類型供該方法作為參數設置,滿足不同情況下的拓撲檢查需求。
圖 7 部分拓撲規則
設置拓撲檢查數據,SetCheckSfcls方法可以設置要進行拓撲檢查的矢量數據,其中第二個數據對象為參考數據,即是否為兩個數據之間的拓撲檢查,若僅為單個數據本身的拓撲,第二個對象傳入空值null即可。
拓撲檢查,值得注意的是CheckTopology方法包含了兩個參數,分別是SPTopologyCheckParameter拓撲檢查參數對象和SPTopologyErrorManager拓撲錯誤管理對象,顧名思義分別是用于設置拓撲查詢的參數和管理拓撲錯誤的。簡單來說,拓撲參數對象可以設置拓撲檢查時的容差、最小長度、面積等檢查指標,而錯誤管理對象則保存檢查處的錯誤結果,包括錯誤類型、對應的要素等,便于進行后續的錯誤修改。詳細接口信息可參考我們的在線API文檔:
三、拓撲檢查
通過上面介紹的接口,我們即可通過MapGIS桌面二次開發SDK實現GIS中常用的拓撲檢查功能,下圖為單個區圖層使用部分規則進行拓撲檢查的結果:
圖 8 拓撲檢查結果
其中,錯誤管理部分展示的內容即為從SPTopologyErrorManager對象中獲取的各條拓撲錯誤信息。
以上是本次為大家分享的MapGIS二次開發實現拓撲檢查功能的全部內容,如果大家想要更深入的了解這部分內容或者對MapGIS平臺提供的其他二次開發功能感興趣,歡迎通過4008809970熱線或司馬云云聽聯系我們。
同時,我們在司馬云開發世界中提供了全套的開發資源供大家免費獲取,幫助大家快速上手二次開發。
圖 9 MapGIS 桌面開發包
圖 10 MapGIS桌面二次開發示例
圖 11 云聽社區
隨著GIS產品的不斷創新發展,GIS平臺二次開發技能需求愈發凸顯。未來,中地數碼將始終踐行以“GIS平臺+生態發展”的融合創新戰略打造GIS生態圈,積極擁抱業內合作伙伴,聚焦二次開發服務,為用戶帶來更加高效的二次開發技能培訓及實戰演練,滿足用戶“簡便、易用、高效”的二次開發訴求。