ArcGIS Pro SDK (七)编辑 6 检查器

ArcGIS Pro SDK (七)编辑 6 检查器

目录

  • [ArcGIS Pro SDK (七)编辑 6 检查器](#ArcGIS Pro SDK (七)编辑 6 检查器)
    • [1 将要素从图层加载到检查器中](#1 将要素从图层加载到检查器中)
    • [2 将地图选择加载到检查器中](#2 将地图选择加载到检查器中)
    • [3 获取所选要素的属性值](#3 获取所选要素的属性值)
    • [4 将地图选择加载到检查器并更改属性](#4 将地图选择加载到检查器并更改属性)
    • [5 使用检查器获取图层方案](#5 使用检查器获取图层方案)
    • [6 添加验证](#6 添加验证)

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

1 将要素从图层加载到检查器中

csharp 复制代码
// 获取地图中的第一个要素图层
var firstFeatureLayer = ArcGIS.Desktop.Mapping.MapView.Active.Map.GetLayersAsFlattenedList().
    OfType<ArcGIS.Desktop.Mapping.FeatureLayer>().FirstOrDefault();

// 创建Inspector类的实例
var inspector = new ArcGIS.Desktop.Editing.Attributes.Inspector();
// 将具有ObjectID 'oid' 的要素加载到Inspector中
await inspector.LoadAsync(firstFeatureLayer, oid);

2 将地图选择加载到检查器中

csharp 复制代码
// 获取地图中当前选择的要素
var selectedFeatures = ArcGIS.Desktop.Mapping.MapView.Active.Map.GetSelection();
// 获取第一个图层及其对应的选择要素的OID列表
var firstSelectionSet = selectedFeatures.ToDictionary().First();

// 创建Inspector类的实例
var inspector = new ArcGIS.Desktop.Editing.Attributes.Inspector();
// 使用对象ID列表将选定的要素加载到Inspector中
await inspector.LoadAsync(firstSelectionSet.Key, firstSelectionSet.Value);

3 获取所选要素的属性值

csharp 复制代码
QueuedTask.Run(() =>
               {
                   // 获取地图中当前选择的要素
                   var selectedFeatures = ArcGIS.Desktop.Mapping.MapView.Active.Map.GetSelection();

                   // 获取第一个图层及其对应的选择要素的OID列表
                   var firstSelectionSet = selectedFeatures.ToDictionary().First();

                   // 创建Inspector类的实例
                   var inspector = new ArcGIS.Desktop.Editing.Attributes.Inspector();

                   // 使用对象ID列表将选定的要素加载到Inspector中
                   inspector.Load(firstSelectionSet.Key, firstSelectionSet.Value);

                   // 获取属性值
                   var pscode = inspector["STATE_NAME"];
                   var myGeometry = inspector.Shape;
               });

4 将地图选择加载到检查器并更改属性

csharp 复制代码
// 获取地图中当前选择的要素
var selectedFeatures = ArcGIS.Desktop.Mapping.MapView.Active.Map.GetSelection();
// 获取第一个图层及其对应的选择要素的OID列表
var firstSelectionSet = selectedFeatures.ToDictionary().First();

// 创建Inspector类的实例
var inspector = new ArcGIS.Desktop.Editing.Attributes.Inspector();
// 使用对象ID列表将选定的要素加载到Inspector中
await inspector.LoadAsync(firstSelectionSet.Key, firstSelectionSet.Value);

// 为字段 "Description" 分配新的属性值
// 如果加载了多个要素,更改将应用于所有要素
inspector["Description"] = "The new value.";
// 作为编辑操作应用更改 - 但没有撤销/重做
await inspector.ApplyAsync();

5 使用检查器获取图层方案

csharp 复制代码
QueuedTask.Run(() =>
               {
                   var firstFeatureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<ArcGIS.Desktop.Mapping.FeatureLayer>().FirstOrDefault();

                   // 创建Inspector类的实例
                   var inspector = new ArcGIS.Desktop.Editing.Attributes.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;
                   }
               });

6 添加验证

csharp 复制代码
var insp = new Inspector();
insp.LoadSchema(featLayer);
var attrib = insp.Where(a => a.FieldName == "Mineral").First();

attrib.AddValidate(() =>
                   {
                       if (attrib.CurrentValue.ToString() == "Salt")
                           return Enumerable.Empty<ArcGIS.Desktop.Editing.Attributes.Attribute.ValidationError>();
                       else return new[] { ArcGIS.Desktop.Editing.Attributes.Attribute.ValidationError.Create("Error", ArcGIS.Desktop.Editing.Attributes.Severity.Low) };
                   });
相关推荐
WYH2878 小时前
C#控制台输入(Read()、ReadKey()和ReadLine())
开发语言·c#
hqwest9 小时前
C#WPF实战出真汁06--【系统设置】--餐桌类型设置
c#·.net·wpf·布局·分页·命令·viewmodel
做一位快乐的码农12 小时前
基于.net、C#、asp.net、vs的保护大自然网站的设计与实现
c#·asp.net·.net
DavieLau13 小时前
C#项目WCF接口暴露调用及SOAP接口请求测试(Python版)
xml·服务器·开发语言·python·c#
张人玉13 小时前
C#Encoding
开发语言·c#
hqwest15 小时前
C#WPF实战出真汁05--左侧导航
开发语言·c#·wpf·主界面·窗体设计·视图viewmodel
青山Coding15 小时前
Cesium应用(二):基于heatmap.js 的全球气象可视化实现方案
前端·gis·cesium
小码编匠17 小时前
C# Bitmap 类在工控实时图像处理中的高效应用与避坑
后端·c#·.net
Kyln.Wu20 小时前
【python实用小脚本-187】Python一键批量改PDF文字:拖进来秒出新文件——再也不用Acrobat来回导
python·pdf·c#
hqwest21 小时前
C#WPF实战出真汁01--项目介绍
开发语言·c#·wpf