ArcGIS Pro SDK (七)编辑 12 编辑模版

ArcGIS Pro SDK (七)编辑 12 编辑模版

文章目录

  • ArcGIS Pro SDK (七)编辑 12 编辑模版
    • 1 在图层上按名称查找编辑模板
    • 2 查找属于独立表的表模板
    • 3 当前模板
    • 4 更改模板的默认编辑工具
    • 5 隐藏或显示模板上的编辑工具
    • 6 使用图层创建新模板
    • 7 使用表创建新表模板
    • 8 更新表模板
    • 9 创建注释模板
    • 10 删除表模板
    • 11 活动模板已更改

环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 在图层上按名称查找编辑模板

ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>{// 获取模板var map = ArcGIS.Desktop.Mapping.MapView.Active.Map;if (map == null)return;var mainTemplate = map.FindLayers("main").FirstOrDefault()?.GetTemplate("Distribution");var mhTemplate = map.FindLayers("Manhole").FirstOrDefault()?.GetTemplate("Active");});

2 查找属于独立表的表模板

ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>{var map = ArcGIS.Desktop.Mapping.MapView.Active.Map;if (map == null)return;// 获取特定的表模板var tableTemplate = map.FindStandaloneTables("Address Points").FirstOrDefault()?.GetTemplate("Residences");// 获取独立表的所有模板var ownersTableTemplates = map.FindStandaloneTables("Owners").FirstOrDefault()?.GetTemplates();var statisticsTableTemplates = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().First(l => l.Name.Equals("Trading Statistics")).GetTemplates();});

3 当前模板

EditingTemplate template = EditingTemplate.Current;

4 更改模板的默认编辑工具

public Task ChangeTemplateDefaultToolAsync(ArcGIS.Desktop.Mapping.FeatureLayer flayer,string toolContentGUID, string templateName)
{return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>{// 通过名称从图层中检索编辑模板var template = flayer?.GetTemplate(templateName) as ArcGIS.Desktop.Editing.Templates.EditingTemplate;// 获取图层的定义var layerDef = flayer?.GetDefinition() as ArcGIS.Core.CIM.CIMFeatureLayer;if ((template == null) || (layerDef == null))return;if (template.DefaultToolID != this.ID){bool updateLayerDef = false;if (layerDef.AutoGenerateFeatureTemplates){layerDef.AutoGenerateFeatureTemplates = false;updateLayerDef = true;}// 检索 CIM 编辑模板定义var templateDef = template.GetDefinition();// 分配工具 DAML 定义中的 GUID,例如// <tool id="TestConstructionTool_SampleSDKTool" categoryRefID="esri_editing_construction_polyline" ….>//   <tooltip heading="">Tooltip text<disabledText /></tooltip>//   <content guid="e58239b3-9c69-49e5-ad4d-bb2ba29ff3ea" />// </tool>// 然后 toolContentGUID 将是 "e58239b3-9c69-49e5-ad4d-bb2ba29ff3ea"// 在 2.x 版本中 -//templateDef.ToolProgID = toolContentGUID;templateDef.DefaultToolGUID = toolContentGUID;// 设置定义template.SetDefinition(templateDef);// 也更新图层定义if (updateLayerDef)flayer.SetDefinition(layerDef);}});
}

5 隐藏或显示模板上的编辑工具

QueuedTask.Run(() =>{// 隐藏图层上的所有工具,除了线工具var featLayer = MapView.Active.Map.FindLayers("Roads").First();var editTemplates = featLayer.GetTemplates();var newCIMEditingTemplates = new List<CIMEditingTemplate>();foreach (var et in editTemplates){// 初始化模板,通过激活默认工具et.ActivateDefaultToolAsync();var cimEditTemplate = et.GetDefinition();// 获取此模板上的可见工具var allTools = et.ToolIDs.ToList();// 添加此模板上的隐藏工具allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());// 隐藏所有工具,然后允许线工具// 在 2.x 版本中 -//allTools.AddRange(cimEditTemplate.GetExcludedToolDamlIds().ToList());allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());// 在 2.x 版本中 - //cimEditTemplate.SetExcludedToolDamlIds(allTools.ToArray());//cimEditTemplate.AllowToolDamlID("esri_editing_SketchLineTool");cimEditTemplate.SetExcludedToolIDs(allTools.ToArray());cimEditTemplate.AllowToolID("esri_editing_SketchLineTool");newCIMEditingTemplates.Add(cimEditTemplate);}// 更新图层模板var layerDef = featLayer.GetDefinition() as CIMFeatureLayer;// 将 AutoGenerateFeatureTemplates 设置为 false 以使模板更改生效layerDef.AutoGenerateFeatureTemplates = false;layerDef.FeatureTemplates = newCIMEditingTemplates.ToArray();featLayer.SetDefinition(layerDef);});

6 使用图层创建新模板

var layer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault();
if (layer == null)return;
QueuedTask.Run(() =>{var insp = new Inspector();insp.LoadSchema(layer);insp["Field1"] = value1;insp["Field2"] = value2;insp["Field3"] = value3;var tags = new[] { "Polygon", "tag1", "tag2" };// 使用 daml-id 设置默认工具 string defaultTool = "esri_editing_SketchCirclePolygonTool";// 工具过滤器是要过滤掉的工具var toolFilter = new[] { "esri_editing_SketchTracePolygonTool" };// 创建一个新模板  var newTemplate = layer.CreateTemplate("My new template", "description", insp, defaultTool, tags, toolFilter);});

7 使用表创建新表模板

var table = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().FirstOrDefault();
if (table == null)return;
QueuedTask.Run(() =>{var tableTemplate = table.GetTemplate("Template1");var definition = tableTemplate.GetDefinition();definition.Description = "New definition";definition.Name = "New name";// 使用此定义创建新表模板table.CreateTemplate(definition);// 也可以使用此扩展方法创建新表模板。可以像使用 layer.CreateTemplate 方法一样使用此方法。table.CreateTemplate("New template name", "Template description", tags: new string[] { "tag 1", "tag 2" });});

8 更新表模板

QueuedTask.Run(() =>{var tableTemplate = table.GetTemplate("Template1");var definition = tableTemplate.GetDefinition();definition.Description = "New definition";definition.Name = "New name";// 更新定义tableTemplate.SetDefinition(definition);});

9 创建注释模板

// 获取注释图层
AnnotationLayer annoLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<AnnotationLayer>().FirstOrDefault();
if (annoLayer == null)return;QueuedTask.Run(() =>{Inspector insp = null;// 获取注释要素类var fc = annoLayer.GetFeatureClass() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClass;// 获取包含标签、符号的要素类 CIM 定义var cimDefinition = fc.GetDefinition() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClassDefinition;var labels = cimDefinition.GetLabelClassCollection();var symbols = cimDefinition.GetSymbolCollection();// 确保有标签和符号if ((labels.Count == 0) || (symbols.Count == 0))return;// 查找所需的标签类// 通常会使用子类型名称或其他特征// 在此情况下,只使用第一个var label = labels[0];// 每个标签都有一个 textSymbol// symbolName 应该是要使用的 symbolIDvar symbolName = label.TextSymbol.SymbolName;int symbolID = -1;if (!int.TryParse(symbolName, out symbolID)){// int.TryParse 失败 - 尝试在符号集合中查找 symbolNameforeach (var symbol in symbols){if (symbol.Name == symbolName){symbolID = symbol.ID;break;}}}// 没有符号?if (symbolID == -1)return;// 加载架构insp = new Inspector();insp.LoadSchema(annoLayer);// 可以使用 inspector[fieldName] 方法分配这些字段// 这些字段在注释架构中保证存在insp["AnnotationClassID"] = label.ID;insp["SymbolID"] = symbolID;// 设置一些附加的注释属性AnnotationProperties annoProperties = insp.GetAnnotationProperties();annoProperties.FontSize = 36;annoProperties.TextString = "My Annotation feature";annoProperties.VerticalAlignment = VerticalAlignment.Top;annoProperties.HorizontalAlignment = HorizontalAlignment.Justify;insp.SetAnnotationProperties(annoProperties);var tags = new[] { "Annotation", "tag1", "tag2" };// 使用 daml-id 而不是 guidstring defaultTool = "esri_editing_SketchStraightAnnoTool";// 工具过滤器是要过滤掉的工具var toolFilter = new[] { "esri_editing_SketchCurvedAnnoTool" };// 创建一个新模板var newTemplate = annoLayer.CreateTemplate("new anno template", "description", insp, defaultTool, tags, toolFilter);});

10 删除表模板

var table = MapView.Active.Map.GetStandaloneTablesAsFlattenedList().FirstOrDefault();
if (table == null)return;
QueuedTask.Run(() =>{var tableTemplate = table.GetTemplate("Template1");// 删除表模板table.RemoveTemplate(tableTemplate);// 通过名称删除模板table.RemoveTemplate("Template2");});

11 活动模板已更改

ArcGIS.Desktop.Editing.Events.ActiveTemplateChangedEvent.Subscribe(OnActiveTemplateChanged);async void OnActiveTemplateChanged(ArcGIS.Desktop.Editing.Events.ActiveTemplateChangedEventArgs args)
{// 如果传入的模板为空则返回if (args.IncomingTemplate == null)return;// 为图层地图中的 Freeway 模板激活两点线工具if (args.IncomingTemplate.Name == "Freeway" && args.IncomingMapView.Map.Name == "Layers")await args.IncomingTemplate.ActivateToolAsync("esri_editing_SketchTwoPointLineTool");
}

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

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

相关文章

how to use Xcode

Xcode IDE概览 Xcode 页面主要分为以下四个部分&#xff1a; 工具栏&#xff08;ToolBar area&#xff09;&#xff1a;主要负责程序运行调试&#xff0c;编辑器功能区域的显示 / 隐藏&#xff1b;编辑区&#xff08;Editor area&#xff09;&#xff1a;代码编写区域&#xf…

140. 好二叉树(卡码网周赛第二十四期(23年腾讯音乐笔试真题))

140. 好二叉树&#xff08;卡码网周赛第二十四期&#xff08;23年腾讯音乐笔试真题&#xff09;&#xff09; 题目描述 小红定义一个二叉树为“好二叉树”&#xff0c;当且仅当该二叉树所有节点的孩子数量为偶数(0 或者 2)。 小红想知道&#xff0c;n&#xff08;1< n <…

vue table表格 ( parseTime-格式化时间)

<el-table-column label"发布时间" width"420px" prop"bidPublishDatetime"><template slot-scope"scope"><span>{{ parseTime(scope.row.bidPublishDatetime, {y}-{m}-{d}) }}</span></template></…

若依代码生成

在若依框架中&#xff0c;以下是这些代码的作用及它们在程序运行中的关联方式&#xff1a; 1. domain.java&#xff1a;通常用于定义实体类&#xff0c;它描述了与数据库表对应的对象结构&#xff0c;包含属性和对应的访问方法。作用是封装数据&#xff0c;为数据的操作提供基…

Richtek立锜科技车规级器件选型

芯片按照应用场景&#xff0c;通常可以分为消费级、工业级、车规级和军工级四个等级&#xff0c;其要求依次为军工>车规>工业>消费。 所谓“车规级元器件”--即通过AEC-Q认证 汽车不同于消费级产品&#xff0c;会运行在户外、高温、高寒、潮湿等苛刻的环境&#xff0c…

澳蓝荣耀时刻,6款产品入选2024年第一批《福州市名优产品目录》

近日&#xff0c;福州市工业和信息化局公布2024年第一批《福州市名优产品目录》&#xff0c;澳蓝自主研发生产的直接蒸发冷却空调、直接蒸发冷却组合式空调机组、间接蒸发冷水机组、高效间接蒸发冷却空调机、热泵式热回收型溶液调湿新风机组、防火湿帘6款产品成功入选。 以上新…

飞利浦的台灯值得入手吗?书客、松下多维度横评大分享!

随着生活品质的持续提升&#xff0c;人们对于健康的追求日益趋向精致与高端化。在这一潮流的推动下&#xff0c;护眼台灯以其卓越的护眼功效与便捷的操作体验&#xff0c;迅速在家电领域崭露头角&#xff0c;更成为了众多家庭书房中不可或缺的视力守护者。这些台灯以其精心设计…

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE 解决方法&#xff1a;在命令后面加上 -legacy-peer-deps结果&#xff1a; 解决参考&#xff1a;https://blog.csdn.net/qq_43799531/article/details/131403987

【C语言】指针剖析(完结)

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 回调函数概念回调函数的使用 - qsort函数 sizeof/strlen深度理解概念手脑并用1.sizeof-数组/指针专题2.strlen-数组/指针专题 指针面试题专题 回调函…

云服务器linux系统安装配置docker

在我们拿到一个纯净的linux系统时&#xff0c;我需要进行一些基础环境的配置 &#xff08;如果是云服务器可以用XShell远程连接&#xff0c;如果连接不上可能是服务器没开放22端口&#xff09; 下面是配置环境的步骤 sudo -s进入root权限&#xff1a;退出使用exit sudo -i进入…

process.env.VUE_APP_BASE_API

前端&#xff1a;process.env.VUE_APP_BASE_API 在Vue.js项目中&#xff0c;特别是使用Vue CLI进行配置的项目&#xff0c;process.env.VUE_APP_BASE_API 是一个环境变量的引用。Vue CLI允许开发者在不同环境下配置不同的环境变量&#xff0c;这对于管理API基础路径、切换开发…

MySQL调优的五个方向

客户端与连接层的优化&#xff1a;调整客户端DB连接池的参数和DB连接层的参数。MySQL结构的优化&#xff1a;合理的设计库表结构&#xff0c;表中字段根据业务选择合适的数据类型、索引。MySQL参数优化&#xff1a;调整参数的默认值&#xff0c;根据业务将各类参数调整到合适的…

【leetcode78-81贪心算法、技巧96-100】

贪心算法【78-81】 技巧【96-100】

谷粒商城-个人笔记(集群部署篇二)

前言 ​学习视频&#xff1a;​Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强​学习文档&#xff1a; 谷粒商城-个人笔记(基础篇一)谷粒商城-个人笔记(基础篇二)谷粒商城-个人笔记(基础篇三)谷粒商城-个人笔记(高级篇一)谷粒商城-个…

【数据结构】02.顺序表

一、顺序表的概念与结构 1.1线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0…

GEE计算遥感生态指数RSEI

目录 RESI湿度绿度热度干度源代码归一化函数代码解释整体的代码功能解释:导出RSEI计算结果参考文献RESI RSEI = f (Greenness,Wetness,Heat,Dryness)其遥感定义为: RSEI = f (VI,Wet,LST,SI)式中:Greenness 为绿度;Wetness 为湿度;Thermal为热度;Dryness 为干度;VI 为植被指数…

【多媒体】Java实现MP4和MP3音视频播放器【JavaFX】【音视频播放】

在Java中播放音视频可以使用多种方案&#xff0c;最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过&#xff0c;JMF已经不再被推荐使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不适用于跨平台。而且上述方案都需要使用第三方库…

拒绝信息差!一篇文章说清Stable Diffusion 3到底值不值得冲

前言 就在几天前&#xff0c;Stability AI正式开源了Stable Diffusion 3 Medium&#xff08;以下简称SD3M&#xff09;模型和适配CLIP文件。这家身处风雨飘摇中的公司&#xff0c;在最近的一年里一直处于破产边缘&#xff0c;就连创始人兼CEO也顶不住压力提桶跑路。 即便这样&…

[leetcode]minimum-absolute-difference-in-bst 二叉搜索树的最小绝对差

. - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(null…

java如何在字符串中间插入字符串

java在字符串中插入字符串&#xff0c;需要用到insert语句 语法格式为 sbf.insert(offset,str) 其中,sbf是任意字符串 offset是插入的索引 str是插入的字符串 public class Insert {public static void main(String[] args) {// 将字符串插入到指定索引StringBuffer sbfn…