【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介

此工具要实现的功能是:将内容框中当前选定的图层移到最顶层或最底层。

主要技术要点包括:

1、Config.daml文件设置(UI设置)

2、按钮的图片和位置设置

3、当前选定图层的获取

4、图层在内容列表中位置的获取和移动


二、前端

1、UI界面的初步搭建

创建一个ArcGIS Pro模块加载项,注意是C#,不是下面那个VB的类型。

在项目中,右键点击【项目】,添加1个【新建项】:

添加2个【ArcGIS Pro按钮】,分别命名为【btn_front.cs】和【btn_back.cs】。

打开【Config.daml】,对UI界面做一个设置。

<tabs>是标签栏,里面的内容默认是被注释掉的。将其选择后,按【Ctrl+K+U】将注释取消。

(快速注释的快捷键是【Ctrl+K+C】)

然后将caption(即标签栏的文字)改一个值,如【二次开发实例】。

<groups>是标签栏下的分组栏,刚才创建的2个Button默认就放在第1个group里。

将这个group的caption改为【初级教程】。

appearsOnAddInTab属性为是否将group放在系统默认的1个标签栏里,一般就改为【false】。

初步设置完毕,点击【调试】,VS会自动打开ArcGIS Pro。

在打开的ArcGIS Pro工程里查看,会发现1个【二次开发实例】标签栏,下面有1个【初级教程】分组栏,里面有2个按钮【btn_front.cs】和【btn_back.cs】。

2、按钮图标设置

下面要对按钮做一下设置,目前按钮的图标是默认的,我们用自己的图片替换一下。

先准备好图片,格式为PNG,需要2种尺寸,32*32和16*16。

一个小TIPS,Arcgis软件安装后,本地就有一些图片可以用。

在当前工程下的【Images】文件夹,把需要的png放进去,方便管理。

下面是比较关键的一步,在VS里多选这几张图片,在属性栏中,将生成操作设置为【内容】。

回到【Config.daml】中,找到<controls>,新建的2个button在这里,顺便修改一下它们的caption。

然后将它们的smallImage和LargeImage分别设置为图片在工程中的相对路径。

因为VS调试的热重载对UI部分的变化不会起作用。因此需要关闭刚才启用的调试,并再次点击调试。

点击调试后,在启动的ArcGIS Pro里查看,已更新成我们自己设置的图片:

3、把按钮的启动位置设置到图层的右键菜单里

这个工具的功能是设置图层的位置,因此将按钮的启动位置整合到图层的右键菜单里更为方便一些。

打开【Config.daml】,在<insertModule>后面插入一个<updateModule>模板,refID设为【esri_mapping】。(建议这部分直接抄一下我的源代码,再手动修改。)

添加2个<updateMenu>,refID分别为【esri_mapping_layerContextMenu】和【esri_mapping_unregisteredLayerContextMenu】,分别代表的是数据库要素和SHP要素的右键菜单,二者都不可缺少。

<updateMenu>下面放置<insertButton>,refID设置为我们添加的2个按钮的id即可。

insert和placeWith是为了控制按钮在菜单中的位置,截图中设置的结果是放在ID为【esri_mapping_copySelectedLayersButton】的【复制】按键前面。这个可自行设置。

设置完成,再次重新调试,可以看到结果如上。

至此,前端UI部分的工作已经完成。


三、后端

1、后置按钮的点击事件

打开【btn_back.cs】,在OnClick事件下写我们的主要代码。

ArcGIS Pro SDK的大部分接口都需要异步执行。

(异步的知识点可以看下这个:ArcGIS Pro中的多线程)。

因此,我习惯于把所有代码都放在QueuedTask下,如果遇到UI部分的内容再单独处理。

同时OnClick事件上需要加一个修饰符async表示异步:

主流程部分比较简单,先获取工程当前地图中的所有选定的图层,再把图层逐个移动到最底层即可。

protected override async void OnClick()
{await QueuedTask.Run(() =>{// 获取工程的当前地图Map map = MapView.Active.Map;// 获取工程当前地图中的所有选定的图层// 并返回一个图层列表List<Layer> lys = MapView.Active.GetSelectedLayers().ToList();// 对列表循环处理foreach (Layer ly in lys){// 把图层移动到最底层,index参数为-1map.MoveLayer(ly, -1);}});
}

2、前置按钮的点击事件

前置按钮的代码基本上差不多,不过有一点要注意,需要对图层列表进行一个倒排,因为将选定的多个图层一个一个移动到顶层时,结果顺序是反的,所以要先倒排一下列表再移动。

protected override async void OnClick()
{await QueuedTask.Run(() =>{// 获取工程的当前地图Map map = MapView.Active.Map;// 获取工程当前地图中的所有选定的图层// 并返回一个图层列表List<Layer> lys = MapView.Active.GetSelectedLayers().ToList();// 对图层列表进行一个倒排// 因为将选定的多个图层一个一个移动到顶层时,结果顺序是反的,所以要先倒排一下列表再移动lys.Reverse();// 对列表循环处理foreach (Layer ly in lys){// 把图层移动到最顶层,index参数为0map.MoveLayer(ly, 0);}});
}

四、调试

点击调试,如图所示,选定【图层2和图层3】,右键点击后置:

点击前置:

完美。


五、工程文件下载

工程文件地址如下,在文件夹中找到【要素图层的前置后置】下载即可。

【ArcGIS Pro二次开发实例教程】原代码合集icon-default.png?t=O83Ahttps://pan.baidu.com/s/1HuS7engSHi1uK1sl70xtAQ?pwd=d6ji

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

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

相关文章

2023最新版IDEA创建一个SpringBoot项目 (详细教程)

在IDEA中创建一个SpringBoot项目 springboot是我们java开发中最流行的框架之一&#xff0c;下面我们看看如何在idea中创建一个springboot项目。 文章目录 在IDEA中创建一个SpringBoot项目一、springboot简单介绍二、快速开始1.新建项目2.配置Maven3.测试 总结 一、springboot简…

Spring SpEL表达式由浅入深

标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…

Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题

Compose 中的主题内的代码大量定义了 CompositionLocal&#xff0c;因此在学习主题之前&#xff0c;先学习 CompositionLocal 铺垫好基础。 1、CompositionLocal 1.1 显式传参与隐式传参 显式传参需要依赖函数的调用&#xff0c;层层传递&#xff1b;隐式传参通过创建全局变量…

利用webworker解决性能瓶颈案例

目录 js单线程的问题webworker的基本使用webworker的常见应用可视化优化导出Excel js单线程的问题 众所周知&#xff0c;js不擅长计算&#xff0c;计算是同步的&#xff0c;大规模的计算会让js主线程阻塞&#xff0c;导致界面完成卡死。比如有一个600多亿次的计算&#xff0c;…

【数据结构05】排序

系列文章目录 【数据结构05】排序 . 【算法思想04】二分查找 文章目录 系列文章目录[toc] 1. 基本思想与实现1.1 插入类排序1.1.1 直接插入排序&#xff08;*&#xff09;1.1.2 折半插入排序1.1.3 希尔排序&#xff08;*&#xff09; 1.2 交换类排序1.2.1 冒泡排序&#xff08…

数据挖掘——概论

数据挖掘——概论 数据、信息和知识的关联和联系数据挖掘数据挖掘定义数据挖掘的步骤数据挖掘的主要内容 数据、信息和知识的关联和联系 数据、信息和知识是知识工作者感知和认识客观事物的3个连贯的阶段。 数据无处不在&#xff0c;聚合/集成后转化为信息&#xff0c;结构化后…

Hello 2025

Hello 2025 A. MEX Table 题意&#xff1a; 给出 0 到 n ∗ m − 1 的数字&#xff0c;排列成 n m 的表格&#xff0c;最大化 ∑ i 1 n mex ⁡ ( { a i , 1 , a i , 2 , … , a i , m } ) ∑ j 1 m mex ⁡ ( { a 1 , j , a 2 , j , … , a n , j } ) 给出0到n*m-1的数字&…

[答疑]用例规约:系统请求3dsMax创建体块

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2024-12-22 12:39 潘老师&#xff0c;请教一个问题&#xff1a;在需求工作流书写系统用例规约时&#xff0c;这个“计算”&#xff08;改变&#xff09;可不可以写多个内容&…

第431场周赛:最长乘积等价子数组、计算字符串的镜像分数、收集连续 K 个袋子可以获得的最多硬币数量、不重叠区间的最大得分

Q1、最长乘积等价子数组 1、题目描述 给你一个由 正整数 组成的数组 nums。 如果一个数组 arr 满足 prod(arr) lcm(arr) * gcd(arr)&#xff0c;则称其为 乘积等价数组 &#xff0c;其中&#xff1a; prod(arr) 表示 arr 中所有元素的乘积。gcd(arr) 表示 arr 中所有元素的…

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…

Uniapp Android 本地离线打包(详细流程)

一、简介 App 离线 SDK 暂时不支持 Kotlin&#xff0c;未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案&#xff0c;云打包 需要排队且还有次数限制&#xff0c;本地打包 则就没有这些限制&#xff0c;而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…

GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线

文章目录 零、前言一、授权码登录体验优化&#xff1a;一步直达聊天界面二、全新“项目”功能&#xff1a;让工作更有条理三、语音功能升级&#xff1a;全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥&#xff0c;目标是带十万人玩转ChatGPT。 亲爱的用户&…

音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介

一、引言 本文对MPEG2-PS格式进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的&#xff0c;ISO/IEC是付费的&#xff0c;所以我们主要阅读ITU提供的官方文档&#xff0c;比如较新…

概述(讲讲python基本语法和第三方库)

我是北子&#xff0c;这是我自己写的python教程&#xff0c;主要是记录自己的学习成果方便自己日后复习&#xff0c; 我先学了C/C&#xff0c;所以这套教程中可能会将很多概念和C/C去对比&#xff0c;所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…

Java jni调用nnom rnn-denoise 降噪

介绍&#xff1a;https://github.com/majianjia/nnom/blob/master/examples/rnn-denoise/README_CN.md 默认提供了一个wav的例子 #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h>#include …

【软考网工笔记】计算机基础理论与安全——网络规划与设计

HFC 混合光纤同轴电缆网 HFC: Hybrid Fiber - Coaxial 的缩写&#xff0c;即混合光纤同轴电缆网。是一种经济实用的综合数字服务宽带网接入技术。 HFC 通常由光纤干线、同轴电缆支线和用户配线网络三部分组成&#xff0c;从有线电视台出来的节目信号先变成光信号在干线上传输…

记录一次电脑被入侵用来挖矿的过程(Trojan、Miner、Hack、turminoob)

文章目录 0、总结1、背景2、端倪3、有个微软的系统更新&#xff0c;就想着更新看看&#xff08;能否冲掉问题&#xff09;4、更新没成功&#xff0c;自动重启电脑5、风险文件&#xff08;好家伙命名还挺规范&#xff0c;一看名字就知道出问题了&#xff09;6、开机有一些注册表…

Qt 5.14.2 学习记录 —— 일 新项目

文章目录 1、创建2、查看代码 ---- main.cpp3、查看代码 ---- widgt.h4、查看代码 ---- widgt.cpp和widget.ui5、查看代码 ---- Empty.pro6、运行产生的中间文件 1、创建 左上角的文件&#xff0c;新建文件或项目。如果要写一个GUI程序&#xff0c;应当选择Application&#x…

vscode如何离线安装插件

在没有网络的时候,如果要安装插件,就会麻烦一些,需要通过离线安装的方式进行。下面记录如何在vscode离线安装插件。 一、下载离线插件 在一台能联网的电脑中,下载好离线插件,拷贝到无法联网的电脑上。等待安装。 vscode插件商店地址:https://marketplace.visualstudio.co…

数据仓库中的指标体系模型介绍

数据仓库中的指标体系介绍 文章目录 数据仓库中的指标体系介绍前言什么是指标体系指标体系设计有哪些模型?1. 指标分层模型2. 维度模型3. 指标树模型4. KPI&#xff08;关键绩效指标&#xff09;模型5. 主题域模型6.平衡计分卡&#xff08;BSC&#xff09;模型7.数据指标框架模…