楊秋菊 任海翔 孫進冬 彭春暉
(江蘇省地質測繪院, 江蘇 南京 211100)
地理國情監測是對全國陸地國土及毗鄰海域范圍內地表覆蓋、重要地理要素變化情況監測,形成現勢性強、精度高、全覆蓋的地理國情信息數據庫,服務于耕地種植狀況監測、生態保護修復效果評價、督察執法監管以及自然資源管理宏觀分析等自然資源管理工作,并為各部門和地方政府提供地理國情信息決策支撐[1]。因此,控制地理國情監測數據的質量具有重要意義。而地理國情監測的數據一般是按行政區劃分片生產,導致在數據拼接時邊界處不可避免地會出現空間和屬性不一致的問題。此類問題通過人工接邊檢查的方式來解決,不僅耗時耗力,而且正確性難以保證。
目前,國內存在地理國情監測數據接邊檢查軟件,但大多都是基于ArcEngine平臺二次開發[2],使得軟件都依托于ArcGIS,執行的效率較低。本文基于圖論在Microsoft Visual Studio 2019 編程環境下,實現了地理國情監測數據的接邊算法,并在江蘇省宿遷市2020年地理國情監測數據生產過程中驗證了該方法的有效性,相比人工和ArcEngine平臺二次開發的軟件具有明顯的效率優勢,并且在準確性方面也能有很好的保障。
本次實驗數據包含宿遷市宿城區、宿豫區、泗洪縣、泗陽縣、沭陽縣及徐州市新沂市6個區縣,面積約8 980 km2,地處江蘇省北部,南與淮安市毗連,東與連云港市接壤,北與邳州市相連,西與安徽省交界,處于徐、淮、連的中心地帶,以平原為主,河網密布。
圖論(Graph Theory)也稱拓撲學,是由點和線構成的拓撲結構。本文所用的算法的核心是依據歐拉定理構建一個有效的平面圖(Planar Graph),即一個可靠的拓撲空間結構,這個結構必須滿足式(1)條件
V-E+F=2
(1)
式中,V為頂點數;E為邊數;F為被劃分區域數。
對于線(LineString)、面(Polygon)要素(面要素可以看成是首尾閉合的線要素),在線的起點與終點處,以及三交以上的節點處斷開,構成由節點和線段組成的平面圖,同時創建幾何圖結構(Geometry Graph Struct),有向邊結構(Direct Edge Struct)和節點結構(Node Struct),用來記錄邊界與圖形之間的關系。
如圖1所示,以線要素為例,存在線段A和B,構建幾何圖時,A線段與B線段在節點N1處斷開成有向邊 c、d和e,生成節點N1、N2、N3和N4。

圖1 線要素平面圖
創建幾何圖結構記錄各要素所包含的有向邊,結構示例如下:
public class PlanarGraph///平面圖
{
public IEnumerable< DirectEdge > DirectEdges { get; } ///.Net迭代器,用以遍歷此平面圖中的全部有向邊
public IEnumerable< Node > Nodes { get; } ///.Net迭代器,用以遍歷此平面圖中的全部節點
public GeometryGraph[] Graphs { get; } ///存儲平面圖中全部幾何圖
}
public class GeometryGraph///幾何圖
{
public int ID { get; } ///圖形ID編號
public DirectEdge[] DirectEdges { get; } ///隸屬的有向邊數組
}
有向邊結構記錄具體的坐標數組,方向信息與隸屬信息,結構示例如下:
public class DirectEdge ///有向邊
{
public Coordinate[]Coordinates { get; }///存儲有向邊具體的坐標數組
public Direction[]Owners{ get; }///存儲擁有此有向邊的GeometryGraphID以及此GeometryGraph相對于有向邊的方向
public class Direction
{
public int ID { get;} ///圖形ID編號
public Direction Type {get;} ///圖形相對于DirectedEdge的方向
}
public enum Direction
{
Same,///方向與隸屬DirectedEdge相同
Different,///方向與隸屬DirectedEdge相反
}
}
節點結構記錄具體的節點坐標,節點與邊界的關系,結構示例如下:
public class Node///節點
{
public Coordinate Vertex { get; } ///存儲具體的節點坐標信息
public DirectEdge[] DirectEdges { get; } ///存儲通過此節點的有向邊數組
}
要素的幾何坐標信息只存取一次,減少了數據的冗余。通過兩張關系表記錄要素邊界之間的方向和關系,在接邊過程中,通過關系表即可方便地判斷出是否存在接邊要素,來達到接邊檢查的目的。
本算法與著名開源軟件Geos(Geometry Engine, Open Source)中的GeometryGraph有所不同,本算法中的拓撲空間結構,不記錄Label(空間標簽),只記錄邊線的方向。同時在構建幾何圖過程中,添加了容差因子,使得構建的幾何圖更具有包容性。
地理國情監測數據一般以經緯度坐標系存儲,需將待檢查的數據轉換為平面投影坐標系。
計算待查圖層的空間范圍(Extent),使用四叉樹(QuadTree)方法創建圖層空間索引,加快要素的檢索速度。地理國情監測數據的生產一般按縣區劃分,接邊線是不規則的縣區界。
為了提高接邊檢查的效率,先以接邊線進行空間查詢,獲取待查圖層中與當前接邊線存在相交的要素。將接邊線和查詢出的相交要素融合在一起,共同構建幾何圖P1。
2.2.1面要素檢查
(1)在幾何圖P1中篩選出隸屬于接邊線要素的有向邊,逐一遍歷該方向邊。
(2)對方向邊進行判斷:若方向邊只隸屬于兩個待檢查面要素,且方向相反,則在該段位置上,圖形關系正確,存在接邊要素;若方向邊只隸屬于一個待檢查面要素,則在該段位置上,不存在接邊要素。
以圖2為例,面狀要素和接邊線一起構建幾何圖,生成有向邊a、b…j。其中a至f為在接邊線上的有向邊,遍歷這些有向邊進行檢查。判斷有向邊b在有向邊界表中同時隸屬于三個要素,接邊線、要素PA1和要素PA2,且方向屬性相反,則可認定在接邊線b處,存在需接邊要素,且接邊要素滿足接邊要求,接邊正確。同理接邊線d,也判定為接邊正確,但接邊線e,則只隸屬于兩個要素,接邊線和要素PB2,所以在接邊線e處,判定為未找到接邊要素,接邊有錯誤。

圖2 面狀要素接邊檢查
2.2.2線要素檢查
(1)在幾何圖P1中篩選出隸屬于接邊線要素的頂點(Vertex)。
(2)對頂點進行判斷:若頂點隸屬于兩個或以上待檢查線要素,且方向相反,判斷隸屬的線要素是否在接邊線同一側,若不是,則在該段位置上,圖形關系正確,存在接邊要素;若是,則在該段位置上,不存在接邊要素。若頂點只隸屬于一個待檢查線要素,則在該段位置上,不存在接邊要素。
以圖3為例,線狀要素和接邊線一起構建平面圖,在接邊線上生成節點N1、N2…N5。遍歷接邊線上節點,若節點只隸屬接邊線,則該處不存在待接邊線要素(節點N1和節點N5);若節點只隸屬于一個待接邊要素,則該處接邊存在錯誤(節點N4);若節點隸屬于二個及以上待接邊要素,則需判斷待接邊要素是否在接邊線一側,在同一側的,接邊有可能錯誤(節點N3),列入可疑接邊問題人工核實,不在同一側的為接邊正確。

圖3 線狀要素接邊檢查
屬性的接邊是建立在幾何接邊檢查正確的基礎上,根據檢查的要求,指定的屬性字段應一致,判斷接邊線兩側要素屬性是否一致,若一致,則接邊正確;若不一致,則接邊存在錯誤。
本文論述的接邊檢查方法,應用于江蘇省宿遷市地理國情監測項目,得到了很好的應用價值。項目以區縣為單位生產,接邊線為不規則的區縣界,接邊檢查程序讀取待接邊的兩個區縣和接邊線數據,執行完成,接邊檢查結果以MDB (Message Driven Bean)數據格式展示,可定位修改。
為了驗證本文論述接邊檢查方法的運行效率優勢和準確性,選取了兩個區縣的地理國情數據,人工設定接邊錯誤。將檢查人員分為三組進行檢查,第一組安排一人,采用本文檢查程序檢查;第二組安排一人,采用某基于ArcEngine平臺程序檢查;第三組安排兩人,采用人工方式檢查。最后對檢查結果進行比較分析,結果見表1。

表1 檢查結果對比
表1顯示,三種方法比較,本文方法可靠,在準確率和效率上有明顯優勢,能夠提高地理國情數據的生產效率,保證數據的質量。
本文闡述了基于圖論的接邊算法思路,通過自主開發接邊程序實現了地理國情數據的接邊檢查。該方法具有一定的普適性,能夠提高接邊檢查的準確率和效率,對地理國情的生產具有較好的實用價值。但是,該方法仍有不足之處,檢查只能一次針對兩個接邊區縣;檢查的規則不能定制,無法只針對個別檢查項專查;檢查結果的存儲形式不方便作業人員修改;對于可疑的接邊點,還需要人工判斷。下一步的工作重點是對檢查方法進一步改進,減少人工的參與,完善程序的界面和定制化,使程序能夠操作簡便,適應多樣化的需求。