【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"(编辑)模块提供了一系列API和工具,允许开发人员在ArcGIS Pro中实现各种地图数据编辑操作,从简单的要素绘制到复杂的数据集编辑。 下面列举一些常用编辑工具的实现方法。 1、获取所选要素的…...
WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但…...
5.1 web浏览安全
数据参考:CISP官方 目录 Web应用基础浏览器所面临的安全威胁养成良好的Web浏览安全意识如何安全使用浏览器 一、Web应用基础 1、Web应用的基本概念 Web ( World wide Web) 也称为万维网 脱离单机Web应用在互联网上占据了及其重要的地位Web应用的发展…...
(六)Unity开发Vision Pro——词汇表
1.PolySpatial Core (com.unity.polyspatial):基础 PolySpatial 包,初始化和所有设置从这里开始。它执行更改跟踪和处理、序列化/反序列化,并包括 ShaderGraph 到 MaterialX 转换器 2.PolySpatial XR (com.unity.polyspatial.xr):…...
算法随笔:图论问题之割点割边
割点 定义 割点的定义:如果一个点被删除之后会导致整个图不再是一个连通图,那么这个顶点就是这个图的割点。举例: 上图中的点2就是一个割点,如果它被删除,则整个图被分为两个连通分量,不再是一个连通图。…...
【虚幻引擎】UE5数字人的创建
安装插件 在插件里面找到MetaHuman,设置激活,然后重启引擎 找到bridge,并开启,这个需要我们制作完成的metahuman需要在这个插件里下载,unreal5自动安装 创建metahuman 首先添加一个metahuman本体,如果你的插…...
算法:深度优先遍历
文章目录 什么是深搜典型题目积累 本篇主要积累的是深度优先遍历算法 什么是深搜 深度优先搜索英文缩写为 DFS 即Depth First Search 其过程是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次 简单来说就是: 一路走到头,不撞墙…...
Stable Diffusion + Deform制作指南
1.安装sd以及deform插件,更新后记得重启 需要安装ffmpeg https://ffmpeg.org/download.html 选择对应版本然后安装 如果是windows需要解压后将ffmpeg的bin目录配置在电脑的环境变量里面。 2.准备一张初始开始图片 3.填写参数,这里面参数要注意,宽高一定是32的倍数。如果填写…...
ssm+vue网上花店设计源码和论文
ssmvue网上花店设计源码和论文017 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用…...
【leetcode】第一章数组
704. 二分查找 边界值需注意left代表左边界下标值,right代表右边界的下标值当数组只有一个元素时,此时如果找到该元素应该返回下标0,因此条件为left<right当mid的元素值大于target时,此时说明我们想找的target在右边ÿ…...
01|Java中常见错误或不清楚
补充:length vs length() vs size() 1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法. 3.java中的siz…...
递归的用法和例子
b站视频:https://www.bilibili.com/video/BV1iS4y1e7MJ/?spm_id_from333.999.0.0&vd_source1717654b9cbbc6a773c2092070686a95 # 递归的定义:其实就是自己调用自己,一般用函数的形式来进行 """ 特点: 1、一定…...
极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)
目录 template 引用,减少代码冗余,增强 CI/CD 构建扩展性 问题 1:代码冗余,低效实践 问题 2:维护性难,工作量大 ➤ local ➤ file ➤ remote ➤ template 收益 1:一处修改,多…...
springBoot 简单的demo
springBoot 学习开始 场景开发流程1、创建项目2、导入依赖3、创建启动springBoot 项目的主入口程序4、创建业务程序5、在MainApplication文件运行程序6、将文件打包成jar包 遇到的问题未解决 希望大哥们帮忙--本地运行jar包报错 场景 浏览器发送hello请求,返回“he…...
[国产MCU]-BL602开发实例-实时时钟(RTC)
RTC 文章目录 RTC1、RTC介绍2、RTC使用实例RTC(real-time clock)为操作系统中的实时时钟设备,为操作系统提供精准的实时时间和定时报警功能。当设备下电后,通过外置电池供电,RTC继续记录操作系统时间;设备上电后,RTC提供实时时钟给操作系统,确保断电后系统时间的连续性。…...
大数据Flink(六十三):SqlClient工具的使用
文章目录 SqlClient工具的使用 一、入门...
哈威比例多路阀控制放大器
多路比例阀放大器控制负载敏感原理的比例多路换向阀,它用于与负载无关的、无级调节液压执行元件的运动速度。 多个执行元件可以同时和相互无关地进行工作。 这种类型的阀主要用于行走液压机械(例如:起重控制系统)。 通过选择执行元…...
Java bean 是个什么概念?
Java bean可以把它比作一个"智能的容器",它具备封装数据的能力。 Java bean是一种可重用的软件组件,它主要用于在Java应用程序中存储和传递数据。它是一种符合特定规范的Java类,通过封装数据和提供访问方法,使数据的管…...
微服务系列文章之 Springboot+Vue实现登录注册
一、springBoot 创建springBoot项目 分为三个包,分别为controller,service, 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 过程中,设置容器启动后的定时任务 jwensh 2023.08.14 文章目录 如何在设计 dockerfile 过程中,设置容器启动后的定时任务1. 基于 alpine 设计 dockerfile 过程中,设置容器启动后的定时任务2. 基于 CentOS 设计 Dockerf…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
