尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【ArcMap】按属性表复制字段并上移一段距离

【ArcMap】按属性表复制字段并上移一段距离
📅 发布时间:2026/6/23 7:20:53

image

将属性表中 LXMC 为 名称2 的字段复制并上移20米,在py编辑器中插入以下代码:

# -*- coding: utf-8 -*-
import arcpy
import os
import sys# 重新加载sys并设置默认编码
reload(sys)
sys.setdefaultencoding('utf-8')# 设置环境
arcpy.env.overwriteOutput = Truetry:# 获取当前地图文档mxd = arcpy.mapping.MapDocument("CURRENT")df = arcpy.mapping.ListDataFrames(mxd)[0]arcpy.AddMessage("脚本开始执行...")# 查找线图层target_layer = Nonefor layer in arcpy.mapping.ListLayers(mxd):if layer.isFeatureLayer:desc = arcpy.Describe(layer)if desc.shapeType == "Polyline":target_layer = layerbreakif target_layer is None:arcpy.AddError("未找到线图层")sys.exit()arcpy.AddMessage("找到图层: " + target_layer.name)# 检查LXMC字段是否存在field_names = [field.name for field in arcpy.ListFields(target_layer)]if "LXMC" not in field_names:arcpy.AddError("图层中不存在 LXMC 字段")sys.exit()# 先选中LXMC为"名称2"的要素where_clause = "LXMC = '名称2'"arcpy.SelectLayerByAttribute_management(target_layer, "NEW_SELECTION", where_clause)# 检查是否有选中的要素desc = arcpy.Describe(target_layer)if not desc.FIDSet:arcpy.AddError("没有找到LXMC为'名称2'的要素")sys.exit()# 获取选中要素的数量result = arcpy.GetCount_management(target_layer)selected_count = int(result.getOutput(0))arcpy.AddMessage("选中的要素数量: " + str(selected_count))# 获取数据源路径data_source = desc.catalogPatharcpy.AddMessage("数据源: " + data_source)# 获取空间参考spatial_ref = desc.spatialReferencearcpy.AddMessage("坐标系: " + spatial_ref.name)# 获取选中要素的OIDselected_oids = []with arcpy.da.SearchCursor(target_layer, ["OID@"]) as cursor:for row in cursor:selected_oids.append(row[0])arcpy.AddMessage("选中的要素OID: " + str(selected_oids))# 创建查询条件oid_field = arcpy.Describe(target_layer).OIDFieldNamewhere_clause = "{} IN ({})".format(arcpy.AddFieldDelimiters(data_source, oid_field), ",".join(str(oid) for oid in selected_oids))# 获取字段列表field_names = []for field in arcpy.ListFields(target_layer):if field.type not in ["OID", "Geometry"]:field_names.append(field.name)arcpy.AddMessage("将复制的字段: " + str(field_names))# 确定移动距离 - 修改为20米if spatial_ref.type == "Geographic":y_offset = 0.00018  # 大约20米 (1度≈111公里,20米≈0.00018度)else:y_offset = 20.0  # 20米
    arcpy.AddMessage("向上移动距离: " + str(y_offset) + (" 度" if spatial_ref.type == "Geographic" else " 米"))# 开始编辑会话edit = arcpy.da.Editor(os.path.dirname(data_source))edit.startEditing(False, True)edit.startOperation()try:# 使用插入游标将移动后的要素添加到同一图层with arcpy.da.InsertCursor(data_source, ["SHAPE@"] + field_names) as insert_cursor:# 使用搜索游标读取选中的要素with arcpy.da.SearchCursor(data_source, ["SHAPE@"] + field_names, where_clause) as search_cursor:moved_count = 0for row in search_cursor:shape = row[0]attributes = row[1:]if shape:# 创建一个新的数组来存储移动后的点new_parts = arcpy.Array()# 遍历原始几何的每个部分for part in shape:new_part = arcpy.Array()# 遍历每个点for point in part:if point:# 创建新点,Y坐标增加偏移量new_point = arcpy.Point(point.X, point.Y + y_offset)new_part.add(new_point)new_parts.add(new_part)# 创建新的Polyline几何moved_shape = arcpy.Polyline(new_parts, spatial_ref)# 插入移动后的要素到同一图层insert_cursor.insertRow([moved_shape] + list(attributes))moved_count += 1arcpy.AddMessage("已复制并移动要素 " + str(moved_count))# 提交编辑
        edit.stopOperation()edit.stopEditing(True)arcpy.AddMessage("成功复制并移动 " + str(moved_count) + " 个要素到原始图层")# 刷新视图
        arcpy.RefreshActiveView()arcpy.RefreshTOC()# 清除选择集,显示所有要素target_layer.setSelectionSet("NEW", [])arcpy.AddMessage("操作完成! LXMC为'名称2'的要素已复制并向上移动20米")arcpy.AddMessage("原始要素保持不变,新要素已向上移动20米")arcpy.AddMessage("现在图层中有 " + str(selected_count + moved_count) + " 个要素")arcpy.AddMessage("请使用测量工具验证两条线之间的距离是否为20米")arcpy.AddMessage("注意:由于20米距离很小,可能需要放大查看")except Exception as e:# 中止编辑
        edit.stopOperation()edit.stopEditing(False)raise eexcept Exception as e:arcpy.AddError("错误: " + str(e))import tracebackerror_msg = traceback.format_exc()arcpy.AddError(error_msg)

回车后:

image

 

 

 

相关新闻

  • WPF 关闭程序 Aforge摄像头关闭不了 问题
  • 102302139 尚子骐 数据采集与融合作业1
  • CF1152F2 Neko Rules the Catniverse (Large Version) 题解

最新新闻

  • TRAE SOLO模式:模型无关的AI编程指令抽象层
  • IOPaint PowerPaint V2:5分钟学会AI智能修图,从此告别Photoshop烦恼
  • 如何用PasteMangaX打造极致漫画阅读体验?2025年开源神器全攻略
  • 性价比高的金属装饰网厂家有哪些?特尔美金属网值得考虑 - mypinpai
  • Cortex.js常见问题解答:解决开发中遇到的10个典型难题
  • 金属装饰网选购指南,生产商排名与研发能力剖析 - mypinpai

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号