当前位置: 首页 > news >正文

【ArcGIS Pro二次开发】(59):Editing(编辑)模块

ArcGIS Pro SDK中的"Editing"(编辑)模块提供了一系列API和工具,允许开发人员在ArcGIS Pro中实现各种地图数据编辑操作,从简单的要素绘制到复杂的数据集编辑。

下面列举一些常用编辑工具的实现方法。


1、获取所选要素的属性及赋值

// 获取当前所选择的要素
var selectedFeatures = MapView.Active.Map.GetSelection();
// 获取所选要素中的第一个(取单个要素)
var firstSelectionSet = selectedFeatures.ToDictionary().First();
// 创建【inspector】实例
var inspector = new Inspector();
// 将选定要素加载到【inspector】实例
inspector.LoadAsync(firstSelectionSet.Key, firstSelectionSet.Value);
// 获取要素属性或字段值
string xzmc = inspector["XZMC"].ToString();
var myGeometry = inspector.Shape;
// 给字段赋值
inspector["XZMC"] = "清凉镇";
// 执行编辑操作
inspector.ApplyAsync();

2、通过【inspector】获取字段属性

// 获取所选要素
var firstFeatureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault();
// 创建【inspector】实例
var inspector = new Inspector();
// 将选定要素加载到【inspector】实例
inspector.LoadSchema(firstFeatureLayer);// 查看属性
foreach (var attribute in inspector)
{var fldName = attribute.FieldName;  // 字段名称var fldAlias = attribute.FieldAlias;  // 字段别名var fldType = attribute.FieldType;  // 字段类型int idxFld = attribute.FieldIndex;  // 字段序号var fld = attribute.GetField();  // 字段var isNullable = attribute.IsNullable;  // 是否可为空var isEditable = attribute.IsEditable;  // 是否可编辑var isVisible = attribute.IsVisible;  // 是否可见var isSystemField = attribute.IsSystemField;  // 是否系统字段var isGeometryField = attribute.IsGeometryField;  // 是否几何属性字段var fldLength = attribute.Length;  // 字段长度
}

3、裁剪面

// 创建编辑器
var clipFeatures = new EditOperation();
clipFeatures.Name = "Clip Features";
// 执行
clipFeatures.Clip(featureLayer, oid, clipPoly, ClipMode.PreserveArea);
if (!clipFeatures.IsEmpty)
{var result = clipFeatures.Execute();
}

4、用线分割面

// 获取分割线
var select = MapView.Active.SelectFeatures(clipPoly);
// 创建编辑器
var cutFeatures = new EditOperation();
cutFeatures.Name = "Cut Features";// 执行(要素类通过oid选择出要素)
cutFeatures.Split(featureLayer, oid, cutLine);
// 执行(要素则直接使用)
cutFeatures.Split(sset, cutLine);if (!cutFeatures.IsEmpty)
{var result = cutFeatures.Execute();
}

5、对所选的线要素进行平行复制

// 找到图层,作模板用
var roadsLayer = MapView.Active.Map.FindLayers("Roads").FirstOrDefault();// 建立【平行复制生成器】,并设置参数
var parOffsetBuilder = new ParallelOffset.Builder()
{Selection = MapView.Active.Map.GetSelection(),     // 所选要素Template = roadsLayer.GetTemplate("Freeway"),     // 模板(可以不选)Distance = 200,     // 偏移距离Side = ParallelOffset.SideType.Both,         // 偏移方式(左,右,两侧)Corner = ParallelOffset.CornerType.Mitered,  // 拐角处理方式(圆角,斜接角,斜面角)Iterations = 1,            // 重复偏移的次数AlignConnected = false,              // 是否对齐连接线的方向CopyToSeparateFeatures = false,          // 是否复制到独立要素RemoveSelfIntersectingLoops = true          // 是否移除自相交环
};// 创建编辑器并执行
var parallelOp = new EditOperation();
parallelOp.Create(parOffsetBuilder);
if (!parallelOp.IsEmpty)
{var result = parallelOp.Execute(); 
}

6、删除要素

var deleteFeatures = new EditOperation();
deleteFeatures.Name = "Delete Features";
// 删除表中的某一行
var table = MapView.Active.Map.StandaloneTables[0];
deleteFeatures.Delete(table, oid);// 删除所选要素
var selection = MapView.Active.SelectFeatures(polygon);
deleteFeatures.Delete(selection);if (!deleteFeatures.IsEmpty)
{var result = deleteFeatures.Execute();
}

7、全属性复制一个要素并移位

// 创建编辑器
var duplicateFeatures = new EditOperation();
duplicateFeatures.Name = "Duplicate Features";
// 创建【inspector】实例
var insp2 = new Inspector();
// 加载
insp2.Load(featureLayer, oid);
// 获取几何
var geom = insp2["SHAPE"] as Geometry;
// 复制要素
var rtoken = duplicateFeatures.Create(insp2.MapMember, insp2.ToDictionary(a => a.FieldName, a => a.CurrentValue));
if (!duplicateFeatures.IsEmpty)
{if (duplicateFeatures.Execute()){// 移动位置var modifyOp = duplicateFeatures.CreateChainedOperation();modifyOp.Modify(featureLayer, (long)rtoken.ObjectID, GeometryEngine.Instance.Move(geom, 100.0, 100.0));if (!modifyOp.IsEmpty){var result = modifyOp.Execute();}}
}

8、炸开多部件

var explodeFeatures = new EditOperation();
explodeFeatures.Name = "Explode Features";
// 执行
explodeFeatures.Explode(featureLayer, new List<long>() { oid }, true);
if (!explodeFeatures.IsEmpty)
{var result = explodeFeatures.Execute(); 
}

9、合并要素

var mergeFeatures = new EditOperation();
mergeFeatures.Name = "Merge Features";// 创建【inspector】实例
var inspector = new Inspector();
// 加载
inspector.Load(featureLayer, oid);
// 执行
mergeFeatures.Merge(featureLayer, new List<long>() { 5, 6, 7 }, inspector);if (!mergeFeatures.IsEmpty)
{var result = mergeFeatures.Execute(); 
}

10、更新单个要素

var modifyFeature = new EditOperation();
modifyFeature.Name = "Modify a feature";// 创建【inspector】实例
var modifyInspector = new Inspector();
// 加载
modifyInspector.Load(featureLayer, oid);// 更改属性【包括几何属性】
modifyInspector["SHAPE"] = polygon;
modifyInspector["NAME"] = "Updated name";
// 更新
modifyFeature.Modify(modifyInspector);// 涉及更改几何要素的情况
var featureAttributes = new Dictionary<string, object>();
featureAttributes["NAME"] = "Updated name";// 更改属性
modifyFeature.Modify(featureLayer, oid, polygon, featureAttributes);if (!modifyFeature.IsEmpty)
{var result = modifyFeature.Execute(); 
}

11、更新多个要素

// 通过筛选获取要更新的要素
var queryFilter = new QueryFilter();
queryFilter.WhereClause = "OBJECTID < 1000000";
// 获取筛选结果的oid
var oidSet = new List<long>();
using (var rc = featureLayer.Search(queryFilter))
{while (rc.MoveNext()){using (var record = rc.Current){oidSet.Add(record.GetObjectID());}}
}// 创建编辑器
var modifyFeatures = new EditOperation();
modifyFeatures.Name = "Modify features";
modifyFeatures.ShowProgressor = true;
// 创建【inspector】实例
var muultipleFeaturesInsp = new Inspector();
muultipleFeaturesInsp.Load(featureLayer, oidSet);
muultipleFeaturesInsp["MOMC"] = 24;
// 更新
modifyFeatures.Modify(muultipleFeaturesInsp);
if (!modifyFeatures.IsEmpty)
{var result = modifyFeatures.ExecuteAsync();
}

12、筛选要素并更新

// 筛选
var filter = new ArcGIS.Core.Data.QueryFilter();
filter.WhereClause = "CONTRACTOR = 'KCGM'";
// 获取所选的oid
var oids = new List<long>();
using (var rc = disLayer.Search(filter))
{while (rc.MoveNext()){using (var record = rc.Current){oidSet.Add(record.GetObjectID());}}
}var modifyOp = new ArcGIS.Desktop.Editing.EditOperation();
modifyOp.Name = "Update date";// 执行
var dateInsp = new ArcGIS.Desktop.Editing.Attributes.Inspector();
dateInsp.Load(disLayer, oids);
dateInsp["InspDate"] = "9/21/2013";modifyOp.Modify(insp);
if (!modifyOp.IsEmpty)
{var result = modifyOp.Execute();
}

相关文章:

【ArcGIS Pro二次开发】(59):Editing(编辑)模块

ArcGIS Pro SDK中的"Editing"&#xff08;编辑&#xff09;模块提供了一系列API和工具&#xff0c;允许开发人员在ArcGIS Pro中实现各种地图数据编辑操作&#xff0c;从简单的要素绘制到复杂的数据集编辑。 下面列举一些常用编辑工具的实现方法。 1、获取所选要素的…...

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息&#xff0c;但默认HTTP协议只支持请求响应模式&#xff0c;这样做可以简化Web服务器&#xff0c;减少服务器的负担&#xff0c;加快响应速度&#xff0c;因为服务器不需要与客户端长时间建立一个通信链接&#xff0c;但…...

5.1 web浏览安全

数据参考&#xff1a;CISP官方 目录 Web应用基础浏览器所面临的安全威胁养成良好的Web浏览安全意识如何安全使用浏览器 一、Web应用基础 1、Web应用的基本概念 Web ( World wide Web) 也称为万维网 脱离单机Web应用在互联网上占据了及其重要的地位Web应用的发展&#xf…...

(六)Unity开发Vision Pro——词汇表

1.PolySpatial Core (com.unity.polyspatial)&#xff1a;基础 PolySpatial 包&#xff0c;初始化和所有设置从这里开始。它执行更改跟踪和处理、序列化/反序列化&#xff0c;并包括 ShaderGraph 到 MaterialX 转换器 2.PolySpatial XR (com.unity.polyspatial.xr)&#xff1a…...

算法随笔:图论问题之割点割边

割点 定义 割点的定义&#xff1a;如果一个点被删除之后会导致整个图不再是一个连通图&#xff0c;那么这个顶点就是这个图的割点。举例&#xff1a; 上图中的点2就是一个割点&#xff0c;如果它被删除&#xff0c;则整个图被分为两个连通分量&#xff0c;不再是一个连通图。…...

【虚幻引擎】UE5数字人的创建

安装插件 在插件里面找到MetaHuman&#xff0c;设置激活&#xff0c;然后重启引擎 找到bridge&#xff0c;并开启&#xff0c;这个需要我们制作完成的metahuman需要在这个插件里下载&#xff0c;unreal5自动安装 创建metahuman 首先添加一个metahuman本体&#xff0c;如果你的插…...

算法:深度优先遍历

文章目录 什么是深搜典型题目积累 本篇主要积累的是深度优先遍历算法 什么是深搜 深度优先搜索英文缩写为 DFS 即Depth First Search 其过程是对每一个可能的分支路径深入到不能再深入为止&#xff0c;而且每个节点只能访问一次 简单来说就是: 一路走到头&#xff0c;不撞墙…...

Stable Diffusion + Deform制作指南

1.安装sd以及deform插件,更新后记得重启 需要安装ffmpeg https://ffmpeg.org/download.html 选择对应版本然后安装 如果是windows需要解压后将ffmpeg的bin目录配置在电脑的环境变量里面。 2.准备一张初始开始图片 3.填写参数,这里面参数要注意,宽高一定是32的倍数。如果填写…...

ssm+vue网上花店设计源码和论文

ssmvue网上花店设计源码和论文017 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xf…...

【leetcode】第一章数组

704. 二分查找 边界值需注意left代表左边界下标值&#xff0c;right代表右边界的下标值当数组只有一个元素时&#xff0c;此时如果找到该元素应该返回下标0&#xff0c;因此条件为left<right当mid的元素值大于target时&#xff0c;此时说明我们想找的target在右边&#xff…...

01|Java中常见错误或不清楚

补充&#xff1a;length vs length() vs size() 1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法. 3.java中的siz…...

递归的用法和例子

b站视频&#xff1a;https://www.bilibili.com/video/BV1iS4y1e7MJ/?spm_id_from333.999.0.0&vd_source1717654b9cbbc6a773c2092070686a95 # 递归的定义&#xff1a;其实就是自己调用自己&#xff0c;一般用函数的形式来进行 """ 特点&#xff1a; 1、一定…...

极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)

目录 template 引用&#xff0c;减少代码冗余&#xff0c;增强 CI/CD 构建扩展性 问题 1&#xff1a;代码冗余&#xff0c;低效实践 问题 2&#xff1a;维护性难&#xff0c;工作量大 ➤ local ➤ file ➤ remote ➤ template 收益 1&#xff1a;一处修改&#xff0c;多…...

springBoot 简单的demo

springBoot 学习开始 场景开发流程1、创建项目2、导入依赖3、创建启动springBoot 项目的主入口程序4、创建业务程序5、在MainApplication文件运行程序6、将文件打包成jar包 遇到的问题未解决 希望大哥们帮忙--本地运行jar包报错 场景 浏览器发送hello请求&#xff0c;返回“he…...

[国产MCU]-BL602开发实例-实时时钟(RTC)

RTC 文章目录 RTC1、RTC介绍2、RTC使用实例RTC(real-time clock)为操作系统中的实时时钟设备,为操作系统提供精准的实时时间和定时报警功能。当设备下电后,通过外置电池供电,RTC继续记录操作系统时间;设备上电后,RTC提供实时时钟给操作系统,确保断电后系统时间的连续性。…...

大数据Flink(六十三):SqlClient工具的使用

文章目录 SqlClient工具的使用 一、​​​​​​​入门...

哈威比例多路阀控制放大器

多路比例阀放大器控制负载敏感原理的比例多路换向阀&#xff0c;它用于与负载无关的、无级调节液压执行元件的运动速度。 多个执行元件可以同时和相互无关地进行工作。 这种类型的阀主要用于行走液压机械&#xff08;例如&#xff1a;起重控制系统&#xff09;。 通过选择执行元…...

Java bean 是个什么概念?

Java bean可以把它比作一个"智能的容器"&#xff0c;它具备封装数据的能力。 Java bean是一种可重用的软件组件&#xff0c;它主要用于在Java应用程序中存储和传递数据。它是一种符合特定规范的Java类&#xff0c;通过封装数据和提供访问方法&#xff0c;使数据的管…...

微服务系列文章之 Springboot+Vue实现登录注册

一、springBoot 创建springBoot项目 分为三个包&#xff0c;分别为controller&#xff0c;service&#xff0c; dao以及resource目录下的xml文件。 UserController.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 …...

【Docker】如何在设计 dockerfile 过程中,设置容器启动后的定时任务

如何在设计 dockerfile 过程中&#xff0c;设置容器启动后的定时任务 jwensh 2023.08.14 文章目录 如何在设计 dockerfile 过程中&#xff0c;设置容器启动后的定时任务1. 基于 alpine 设计 dockerfile 过程中&#xff0c;设置容器启动后的定时任务2. 基于 CentOS 设计 Dockerf…...

别光看教程!用mdadm管理软RAID时,这5个运维坑我帮你踩过了

别光看教程&#xff01;用mdadm管理软RAID时&#xff0c;这5个运维坑我帮你踩过了在虚拟化环境和物理服务器中&#xff0c;软RAID因其成本效益和灵活性成为许多企业的首选方案。然而&#xff0c;从创建到长期运维&#xff0c;mdadm管理的软RAID阵列隐藏着诸多教科书上不会提及的…...

Unity Addressable资源管理系统实战指南

1. 这不是“换个加载方式”&#xff0c;而是重构资源交付链路的起点Unity Addressable系统刚发布那会儿&#xff0c;我正带一个横跨三端&#xff08;iOS/Android/PC&#xff09;的AR互动项目。美术团队每天提交200张高清贴图、50个FBX模型&#xff0c;打包后APK体积飙到1.8GB—…...

ATLO-ML:自适应时序预测窗口与采样率优化框架详解

1. 项目概述&#xff1a;为什么时序预测的“窗口”和“节奏”如此重要&#xff1f;在机器学习的时间序列预测任务中&#xff0c;我们常常会陷入一个看似简单、实则充满陷阱的环节&#xff1a;如何设置模型的“输入窗口”&#xff1f;具体来说&#xff0c;就是应该用过去多长时间…...

高能物理实时触发系统:HGQ与LGN算法在FPGA上的极致优化实践

1. 项目概述&#xff1a;当粒子对撞遇见实时AI在大型强子对撞机&#xff08;LHC&#xff09;每秒数千万次的质子对撞中&#xff0c;CMS探测器会捕获海量的高维数据。第一级触发系统&#xff08;L1T&#xff09;的任务&#xff0c;是在3.8微秒的极短时间内&#xff0c;将事件率从…...

如何为sync-settings开发自定义存储位置插件:完整开发者指南

如何为sync-settings开发自定义存储位置插件&#xff1a;完整开发者指南 【免费下载链接】sync-settings Synchronize all your settings and packages across atom instances 项目地址: https://gitcode.com/gh_mirrors/sy/sync-settings 你是否想要为Atom的sync-setti…...

不只是配置:在AutoDL上为你的深度学习项目打造可复现、可迁移的专属环境(Python 3.8 + CUDA 11.3)

不只是配置&#xff1a;在AutoDL上为你的深度学习项目打造可复现、可迁移的专属环境&#xff08;Python 3.8 CUDA 11.3&#xff09;深度学习项目的成功往往始于一个稳定、可复现的环境配置。对于在AutoDL平台上工作的开发者而言&#xff0c;如何超越基础的环境搭建&#xff0c…...

AhMyth短信管理器:远程读取和发送短信的终极技术指南 [特殊字符]

AhMyth短信管理器&#xff1a;远程读取和发送短信的终极技术指南 &#x1f680; 【免费下载链接】AhMyth Cross-Platform Android Remote Administration Tool | The only maintained version of AhMyth on github | A revival of the original repository at https://GitHub.c…...

别再死记硬背F=G+H了!用Unity手搓一个A*寻路,从DFS、BFS到Dijkstra一步步讲透

从零构建A*寻路&#xff1a;用Unity可视化算法演进之路当我在开发第一个2D策略游戏时&#xff0c;遇到了一个经典问题&#xff1a;如何让单位智能地绕过障碍物找到最短路径&#xff1f;像许多初学者一样&#xff0c;我直接跳到了A*算法的实现&#xff0c;却被那个神秘的FGH公式…...

Linux系统启动卡住了?手把手教你用systemd-analyze和dmesg诊断UEFI启动各阶段耗时

Linux系统启动卡住了&#xff1f;手把手教你用systemd-analyze和dmesg诊断UEFI启动各阶段耗时当你的Linux服务器在凌晨三点突然启动失败&#xff0c;或是开发工作站卡在GRUB界面无法继续时&#xff0c;那种焦虑感每个运维工程师都深有体会。启动过程就像多米诺骨牌——任何一个…...

WSL2终端颜值与效率双飞:保姆级oh-my-zsh配置指南(含autojump、语法高亮插件)

WSL2终端颜值与效率双飞&#xff1a;保姆级oh-my-zsh配置指南&#xff08;含autojump、语法高亮插件&#xff09;在开发者的日常工作中&#xff0c;终端是使用频率最高的工具之一。一个高效、美观的终端环境不仅能提升工作效率&#xff0c;还能让枯燥的命令行操作变得愉悦。对于…...