ArcGIS中多部件线对象,是否有顺序?

工作中遇到的,需要表示湖泊岸线。湖泊岸线由于跨了多个河道,与河口处不应算作湖泊岸线,因此需要打断。这样处理后,湖泊岸线为多部件的线要素。
后续需要对湖泊岸线按照一定的间距进行拆分,发现多部件的线要素,在拆分时产生了跳跃,为了保证每个Path是沿着湖泊的顺序,通过手工的方式,逐个线段合并,也通过开发,将Path按照湖泊范围线排序,再构成IPolyline对象。经过测试发现,多部件线要素的每个Path的顺序并不是设定的顺序,无论怎么调整,似乎Path有固定的顺序,不受合并、添加顺序的影响。
已邀请:

jiushidt - AE使用者

赞同来自:

在pro中,绘制部件的顺序即是部件存储的顺序。使用pro sdk创建,也是类似。不知道你是怎么做的处理。

zALPha

赞同来自:

同碰到上述问题,已通过arcpy解决。代码如下:
 
 
import arcpy
import json

fc = r"D:\XXXX\multipart line"
target_oid = 198      # multpart line 对应的objectid

# 你定义的重排顺序
order = [0,1,2,4,5,3]

with arcpy.da.UpdateCursor(fc, ["OID@", "SHAPE@"]) as cursor:
    for oid, geom in cursor:
        # 只处理指定 OBJECTID
        if oid != target_oid:
            continue

        print(f"Processing OBJECTID {oid}, partCount = {geom.partCount}")

        # 获取几何的 Esri JSON 字符串,并解析为字典
        json_str = geom.JSON
        json_dict = json.loads(json_str)

        # 判断几何是否包含曲线:有 "curvePaths" 键说明带曲线,否则用普通 "paths"
        if "curvePaths" in json_dict:
            paths_key = "curvePaths"
        else:
            paths_key = "paths"

        parts = json_dict[paths_key]

        # 检查部件数量是否与 order 长度一致
        if len(parts) != len(order):
            raise ValueError(
                f"OBJECTID {oid} 有 {len(parts)} 个部件,"
                f"但 order 需要 {len(order)} 个"
            )

        # 按 order 重新排列部件
        new_parts = [parts[i] for i in order]
        json_dict[paths_key] = new_parts

        # 从修改后的 Esri JSON 重建几何(第二个参数 True 表示输入为 Esri JSON)
        new_geom = arcpy.AsShape(json_dict, True)

        # 更新几何
        cursor.updateRow((oid, new_geom))

        print(f"OBJECTID {oid} reordered successfully")

要回复问题请先登录注册