使用ArcPy拓撲檢查的基本步驟


拓撲檢查是GIS的特性,在ArcGIS可使用多種方法進行檢查,包括:

1、在數據集上右鍵按向導建立;

2、使用拓撲工具箱的一系列工具分步建立;

3、創建模型工具,制作專門的拓撲工具;

4、利用ArcPy靈活定制拓撲檢查腳本;

5、使用ITopologyContainer等接口二次開發。

基本步驟

無論使用哪種方式,拓撲檢查都離不開以下的步驟:

創建拓撲:在數據集上新建一個用於拓撲的容器;

添加要素類:必須將需要參與拓撲檢查的要素類添加到同一數據集的拓撲容器中;

設置容差:一般可以不設置,默認地理坐標是0.000000008983153度,投影坐標是0.0002米;

添加規則:根據檢查要素添加點、線、面的拓撲規則;

驗證拓撲:如果前面步驟沒有報錯,表示創建拓撲完成,可以開始驗證了;

查看結果:可能通過拓撲工具條查看拓撲結果,也可以導出為錯誤要素記錄;

修改錯誤:拓撲檢查的目的是修改拓撲錯誤,不同的錯誤有相應的修改方式。

使用示例

下面是一個拓撲檢查的示例,先由模型工具制作后,直接導出ArcPy腳本稍作修改(ESRI是不是很強大)。

# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# Fun   : NcTopology
# Author: gisweis
# Date  : 2019.10.8
# Email : 
# Notes : 
# ---------------------------------------------------------------------------


# Set the necessary product code
import arceditor
import arcpy
import os

# Script arguments
db = arcpy.GetParameterAsText(0)

arcpy.env.workspace = db
arcpy.env.overwriteOutput = True

# Local variables:
StrDataset = "StrDataset"
TraDataset = "TraDataset"
GQ_HOUA="GQ_HOUA"
GQ_BUIA="GQ_BUIA"
GQ_LRDA="GQ_LRDA"
GQ_LRRA="GQ_LRRA"

StrDataset_TP1 = "StrDataset_TP1"
StrDataset_TP1_PATH = StrDataset + os.sep + StrDataset_TP1

Not_Overlap = "Must Not Overlap (Area)"
Not_Gaps="Must Not Have Gaps (Area)"
BeCovered="Must Be Covered By Feature Class Of (Area-Area)"
Not_OverlapWith="Must Not Overlap With (Area-Area)"

# Process1: Create Topology
arcpy.CreateTopology_management(StrDataset, StrDataset_TP1, "")

# Process2: Add FeatureClass
arcpy.AddFeatureClassToTopology_management(StrDataset_TP1_PATH, GQ_HOUA, "1", "1")
arcpy.AddFeatureClassToTopology_management(StrDataset_TP1_PATH, GQ_BUIA, "1", "1")

arcpy.Copy_management(TraDataset + os.sep +GQ_LRDA, StrDataset + os.sep + GQ_LRDA+"_1", "")
arcpy.AddFeatureClassToTopology_management(StrDataset_TP1_PATH, GQ_LRDA+"_1", "1", "1")

arcpy.Copy_management(TraDataset + os.sep +GQ_LRRA, StrDataset + os.sep + GQ_LRRA+"_1", "")
arcpy.AddFeatureClassToTopology_management(StrDataset_TP1_PATH, GQ_LRRA+"_1", "1", "1")

# Process3: Set Tolerance
arcpy.SetClusterTolerance_management(StrDataset_TP1_PATH, "8.98315284119521E-09")

# Process4: Add Rule
arcpy.AddRuleToTopology_management(StrDataset_TP1_PATH, Not_Overlap, GQ_HOUA, "", "", "")
arcpy.AddRuleToTopology_management(StrDataset_TP1_PATH, Not_Overlap, GQ_BUIA, "", "", "")
arcpy.AddRuleToTopology_management(StrDataset_TP1_PATH, BeCovered, GQ_BUIA, "", GQ_HOUA, "")
arcpy.AddRuleToTopology_management(StrDataset_TP1_PATH, Not_OverlapWith, GQ_HOUA, "", GQ_LRDA+"_1", "")
arcpy.AddRuleToTopology_management(StrDataset_TP1_PATH, Not_OverlapWith, GQ_HOUA, "", GQ_LRRA+"_1", "")
# arcpy.AddRuleToTopology_management(StrDataset_TP1_PATH, Not_Gaps, GQ_HOUA, "", "", "")
# arcpy.AddRuleToTopology_management(StrDataset_TP1_PATH, Not_Gaps, GQ_BUIA, "", "", "")

# Process5: Validate Topology
arcpy.ValidateTopology_management(StrDataset_TP1_PATH)

# Process6: Delete
# 
# arcpy.Delete_management( StrDataset + os.sep +GQ_LRDA+"_1")
# arcpy.Delete_management( StrDataset + os.sep +GQ_LRRA+"_1")

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM