ArcGIS中多部件线对象,是否有顺序?
工作中遇到的,需要表示湖泊岸线。湖泊岸线由于跨了多个河道,与河口处不应算作湖泊岸线,因此需要打断。这样处理后,湖泊岸线为多部件的线要素。
后续需要对湖泊岸线按照一定的间距进行拆分,发现多部件的线要素,在拆分时产生了跳跃,为了保证每个Path是沿着湖泊的顺序,通过手工的方式,逐个线段合并,也通过开发,将Path按照湖泊范围线排序,再构成IPolyline对象。经过测试发现,多部件线要素的每个Path的顺序并不是设定的顺序,无论怎么调整,似乎Path有固定的顺序,不受合并、添加顺序的影响。
后续需要对湖泊岸线按照一定的间距进行拆分,发现多部件的线要素,在拆分时产生了跳跃,为了保证每个Path是沿着湖泊的顺序,通过手工的方式,逐个线段合并,也通过开发,将Path按照湖泊范围线排序,再构成IPolyline对象。经过测试发现,多部件线要素的每个Path的顺序并不是设定的顺序,无论怎么调整,似乎Path有固定的顺序,不受合并、添加顺序的影响。
2 个回复
jiushidt - AE使用者
赞同来自:
zALPha
赞同来自:
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")
要回复问题请先登录或注册
发起人
相关问题
问题状态