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

news/2025/10/26 21:51:44/文章来源:https://www.cnblogs.com/shan-gui-yao/p/19167466

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

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/947081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF 关闭程序 Aforge摄像头关闭不了 问题

public static Bitmap StaticBitmap = new Bitmap(100,100); public void Cam_NewFrame(object sender, NewFrameEventArgs eventArgs){lock (StaticHelper.StaticBitmap){using (Bitmap b = (Bitmap)eventArgs.Frame)…

CF1060

题目 C(Hard Version) 因为制造两个2的倍数只需至多两次操作,因此按价格排序后,选择方案只有\(1+i\),\(i\) 和 \(1\) 三种,直接判断即可。\(\Omicron(n\ln{n})\) D 按树的深度进行奇偶分类,从叶节点开始删除,设当前奇…

以专注筑基,以实践致远

以专注筑基,以实践致远——三篇文章带给我的学习启示 细读三篇关于学习与成长的文章,仿佛为我混乱的大学学习状态点亮了一盏明灯。从Scalers强调的课堂专注,到娄老师践行的刻意训练与“做中学”,字里行间的真知灼见…

2025.10.24 测试

2025.10.24 测试提高组模拟赛, shanganze 2h AK me 只会两道,被踩爆了 把简单题想复杂了,写太慢了 1. 谔谔,不知道为什么浪费好长时间 就做个前缀和 然后想用 set 但求不了 个数 然后写了个线段树 2. 一眼 每一列答…

102302139 尚子骐 数据采集与融合作业1

作业一: 1. 完整代码以及运行结果点击查看代码 import requests from bs4 import BeautifulSoup import timedef get_university_ranking(url):try:headers = {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64…

CF1152F2 Neko Rules the Catniverse (Large Version) 题解

\(\text{CF1152F2 Neko Rules the Catniverse (Large Version) 题解}\) 这个题有点意思啊。 我们大胆猜想这个题的 dp 是从每个星球一个一个线性转移的。得到这个结论有两种方式: 法一:发现按照 Neko 飞行的轨迹直接…

Audacity:开源音频编辑器的完整指南

Audacity是一款功能强大的开源音频编辑器和录音软件,支持多轨编辑、多种音频格式导入导出、实时效果处理等专业功能,适用于Windows、macOS和Linux等操作系统。Audacity:开源音频编辑器的完整指南 项目概述 Audacity…

【CI130x】音频传输的数据结构——FreeRTOS的消息队列

一句话概括 xQueueCreate 是 FreeRTOS 实时操作系统中用于动态创建消息队列的函数。它负责分配内存并返回一个可以用于发送和接收数据的队列句柄。详细解释 1. 什么是消息队列? 在深入函数本身之前,理解“队列”的概…

123456789

看到题目条件找一下性质然后将其转化掉。 任何东西都只是方向,不一定是正解。 如果感觉他答案不大并要求输出类似最小步数的时候可以猜一下答案上界。 可以从最特殊的东西入手。 可以适当找一下必要条件或充分条件。 …

#20232408 2025-2026-1 《网络系统与攻防技术》实验三实验报告 - 20232408

北京电子科技学院(BESTI) 实 验 报 告课程名称: 网络与系统攻防技术实验序号: 实验三实验名称: 免杀原理与实践学 号: 20232408姓 名: 李易骋指导老师: 王志强必修/选修: 必修实验日期: 20…

C_结构体学习_1

这里记录一下怎么为结构体成员变量实现内存连续且为动态 #include <iostream> #include <conio.h> #include <stdlib.h> #include <string.h> #include <stdio.h> using namespace std;…

嵌入式音频开发很好的博主

1。 https://xintiaobao.blog.csdn.net/ CSDN 博主:心跳包2。 https://segmentfault.com/u/junyidedalianmao/articles 21ic 博主:启英AI平台

人工智能之编程基础 Python 入门:第一章 Python 的简介和安装

人工智能之编程基础 Python 入门:第一章 Python 的简介和安装人工智能之编程基础 Python 入门 第一章 Python 的简介和安装前言 当前人工智能逐渐成为主流趋势,而python作为主流算法语言之一,也一跃登顶最受欢迎的语…

P5405 [CTS2019] 氪金手游 题解

P5405 [CTS2019] 氪金手游 题解 首先需要发现的是题目给出的条件等价于是限制所有卡形成了一棵树,但树边的方向是不确定的。从其它地方不好入手,不妨先考虑这棵树边全都从父亲指向儿子的情形,换句话说就是根节点要比…

杂记选做 #1

bakas trick 其实就是不带删的尺取。 维护 \(l,mid,r\),开始时从 \(r\) 开始向左扩展 \(l\),记 \(mid=r\),维护 \(p_i\)(\(l\le i\le mid\))是 \([i,mid]\) 的元素的总权值。每次 \(l\) 向右走时如果没超过 \(mid…

20232319 2025-2026-1 《网络与系统攻防技术》实验三实验报告

1.实验内容 1.1实验实践内容 (1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧。 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件 veil,加壳工具 使用C + shellcode编程 (2)通过…

数据采集与融合技术实践第一次作业

作业1 ## 代码以及相关图片点击查看代码 import requests from bs4 import BeautifulSoup#原本想把第一个页面设为base_url,之后以此为根据跳转其他页面的(获取排名31之后的学校信息),可惜未能做到 base_url = htt…

2025.10.26 闲话-单位根反演

2025.10.26 闲话-单位根反演起因正在和 zxk 探讨 k 叉 bostan-mori。 jijidawang:直接单位根反演。所以就来学习单位根反演了。 Part.1 主体 首先引入这样一个问题: 求: \[\sum_{i=0}^{\lfloor\frac{n}{2}\rfloor}{…

题解:B4205 [常州市赛 2021] 特殊字符

题解:B4205 [常州市赛 2021] 特殊字符 前言 题目传送门 思路分析 因为数据范围较大,所以直接暴力构建字符串不仅仅会超时,还会爆空间,所以我们考虑模拟、跳过构建字符串,直接给出答案 我们对于每个特殊字符,从左…