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

【ArcGIS Pro二次开发】(60):按图层导出布局

在使用布局导图时,会遇到如下问题:

为了切换图层和导图方便,一般情况下,会把相关图层做成图层组。

在导图的时候,如果想要按照图层组进行分开导图,如上图,想导出【现状图、规划图、管控边界】3张图,系统并没有方便的工具。

于是就自己做一个。


一、要实现的功能

 

如上图所示,在【综合应用】组—【制图相关】面板下,点击【按图层导出布局】工具。

在弹出的工具框中,分别输入参数:

1、导出图片的文件夹位置。有记忆功能,会保留上次你填入的路径。

【2、3】、2和3是配合使用的,点击2的下拉框,会列出当前地图的所有图层组和图层,但不包括图层组下的子图层。选择结果会添加到3中。

4、选择3中的选项,点击4,可以将其从3中移除。

5、选择布局视图。默认为工程中的第一个布局,可以修改。

6、图片类型。目前有3种可选。有记忆功能,会保留上次的选择。

7、图片分辨率。有记忆功能,会保留上次你填入的数据。

生成结果如下:


二、实现流程

核心代码如下:

首先需要将当前地图中所有图层的显示信息保存一下,因为工具运行结束后需要恢复图层显示。特别是当你的地图图层非常多的时候,这点尤为重要。

这里需要注意的是,有可能一个同名图层会放在不同的图层组中,如上面的【永久基本农田】就放在了2个图层组中,这里需要获取它的父对象,也就是图层组,一并保存下来。

// 获取当前所有图层显示信息
public static Dictionary<string, bool> GetLayerVisible()
{Dictionary<string, bool> dic = new Dictionary<string, bool>();// 获取当前地图Map map = MapView.Active.Map;// 获取所有要素图层var lys = map.GetLayersAsFlattenedList().ToList();foreach (var ly in lys){if (ly.Parent is Map){dic.Add(ly.Name, ly.IsVisible);}else{dic.Add($"{ly.Parent}+++{ly.Name}", ly.IsVisible);}}return dic;
}

然后获取列表框中选定的所有图层和图层组,进行打印。

这里关于布局导出的详细说明在之前的文章也有提到,就不再细说,注释也写得很清楚了。

foreach (string item in listBox_layer.Items)
{pw.AddProcessMessage(20, time_base, "导出图层:" + item);// 去掉标签string modifyLayer = item.Replace("【组】", "");// 获取layout Layout layout = layoutProjectItem.GetLayout();// 控制图层显示ToolManager.ControlLayer(modifyLayer);// JPG图片属性JPEGFormat JPG = new JPEGFormat(){HasWorldFile = true,Resolution = dpi,               // 分辨率OutputFileName = outputPath + @"\" + modifyLayer + @".jpg",      // 输出路径};// PNG图片属性PNGFormat PNG = new PNGFormat(){HasWorldFile = true,Resolution = dpi,               // 分辨率OutputFileName = outputPath + @"\" + modifyLayer + @".png",      // 输出路径};// PDF图片属性PDFFormat PDF = new PDFFormat(){OutputFileName = outputPath + @"\" + modifyLayer + @".pdf",      // 输出路径Resolution = dpi,               // 分辨率DoCompressVectorGraphics = true,   // 是否压缩矢量图形DoEmbedFonts = true,            // 是否执行嵌入字体         HasGeoRefInfo = true,             // 是否具有地理参考信息ImageCompression = ImageCompression.Adaptive,   // 图形压缩.自适应ImageQuality = ImageQuality.Best,           // 图形质量LayersAndAttributes = LayersAndAttributes.LayersAndAttributes   // 图层  属性};// 导出JPGif (pic_type == "jpg"){layout.Export(JPG);}// 导出PNGif (pic_type == "png"){layout.Export(PNG);}// 导出PDFif (pic_type == "pdf"){layout.Export(PDF);}
}

其中控制图层显示的方法如下:

// 图层(组)显示控制【选定显示,其它关闭】
public static void ControlLayer(string lyName)
{// 获取当前地图Map map = MapView.Active.Map;// 获取所有要素图层var lys = map.GetLayersAsFlattenedList().ToList();// 获取输入的指定图层var initLayer = map.GetLayersAsFlattenedList().FirstOrDefault(item => item.Name.Equals(lyName));foreach (var ly in lys){// 如果是指定的图层,或指定图层的子图层,就显示if (ly.Name == lyName || ly.Parent == initLayer){ly.SetVisibility(true);}else{ly.SetVisibility(false);}}
}

打印完成后,最后一步就是还原图层的显示信息,打印前是怎么显示的还怎么显示。

// 设置当前所有图层显示信息
public static void SetLayerVisible(Dictionary<string, bool> dic)
{// 获取当前地图Map map = MapView.Active.Map;// 获取所有要素图层var lys = map.GetLayersAsFlattenedList().ToList();foreach (var ly in lys){if (ly.Parent is Map){ly.SetVisibility(dic[ly.Name]);}else{string paName = $"{ly.Parent}+++{ly.Name}";ly.SetVisibility(dic[paName]);}}
}

三、工具文件分享

我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:

【ArcGIS Pro二次开发】:CC工具箱https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

相关文章:

【ArcGIS Pro二次开发】(60):按图层导出布局

在使用布局导图时&#xff0c;会遇到如下问题&#xff1a; 为了切换图层和导图方便&#xff0c;一般情况下&#xff0c;会把相关图层做成图层组。 在导图的时候&#xff0c;如果想要按照图层组进行分开导图&#xff0c;如上图&#xff0c;想导出【现状图、规划图、管控边界】3…...

docker-desktop数据目录迁移

1.退出docker-desktop后执行 wsl --list -v 如下 NAME STATE VERSION * docker-desktop Stopped 2docker-desktop-data Stopped 22.执行以下命令进行数据导出&#xff1a;&#xff08;需要等待命令执行完成&#xff09…...

03.利用Redis实现缓存功能---解决缓存穿透版

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis实现添加缓存功能解决缓存穿透版 学习产出&#xff1a; 缓存穿透讲解图&#xff1a; 解决方案&#xff1a; 采用缓存空对象采用布隆过滤器 解决方案流程图&#xff1a; 1. 准备pom环境 <dependency><gro…...

全景图!最近20年,自然语言处理领域的发展

夕小瑶科技说 原创 作者 | 小戏、Python 最近这几年&#xff0c;大家一起共同经历了 NLP&#xff08;写一下全称&#xff0c;Natural Language Processing&#xff09; 这一领域井喷式的发展&#xff0c;从 Word2Vec 到大量使用 RNN、LSTM&#xff0c;从 seq2seq 再到 Attenti…...

Mybatis参数传递

Map传参, #{}里的key要一一对应不能乱写&#xff0c;如果不存在则会填充NULL&#xff0c;不会报错 Map<String, Object> map new HashMap<>(); // 让key的可读性增强 map.put("carNum", "103"); map.put("brand", "奔驰E300L&…...

手动实现 Spring 底层机制 实现任务阶段一编写自己 Spring 容器-准备篇【2】

&#x1f600;前言 手动实现 Spring 底层机制的第2篇 实现了任务阶段一编写自己 Spring 容器-准备篇【2】 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…...

部署模型并与 TVM 集成

本篇文章译自英文文档 Deploy Models and Integrate TVM tvm 0.14.dev0 documentation 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架&#xff0c;适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 本节介绍如何将 TVM 部署到各种平台&…...

Android Navigation 导航切换fragment用法

对于Android Navigation组件的导航到Fragment&#xff0c;您可以按照以下步骤操作&#xff1a; 首先&#xff0c;在您的项目的build.gradle文件中添加Navigation依赖&#xff1a; dependencies {def nav_version "2.3.4"implementation "androidx.navigation…...

Anaconda Prompt使用pip安装PyQt5-tools后无法打开Spyder或闪退

艹&#xff01;MLGBZD! 真TMD折腾人&#xff01; 出现原因&#xff1a; 首次安装完Anaconda3-2023.07-1-Windows-x86_64.exe后首次打开Spyder&#xff0c;此时是没有问题的&#xff0c;然后打开Anaconda Prompt&#xff0c;查看有哪些包&#xff0c;pip list 这时候开始首次安…...

【jvm】jvm整体结构(hotspot)

目录 一、说明二、java代码的执行流程三、jvm的架构模型3.1 基于栈式架构的特点3.2 基于寄存器架构的特点 一、说明 1.hotspot vm是目前市场上高性能虚拟机的代表作之一 2.hotspot采用解释器与即时编译器并存的架构 3.java虚拟机是用来解释运行字节码文件的&#xff0c;入口是字…...

通达信波段选股公式,使用钱德动量摆动指标(CMO)

钱德动量摆动指标(CMO)是由图莎尔钱德发明的&#xff0c;取值范围在-100到100之间&#xff0c;是捕捉价格动量的技术指标。该指标计算近期涨幅之和与近期跌幅之和的差值&#xff0c;然后将计算结果除以同期所有价格波动的总和。本文的波段选股公式使用均线识别趋势&#xff0c;…...

家电维修小程序开发指南:从零搭建到上线

随着科技的发展和人们生活水平的提高&#xff0c;家电已经成为人们生活中不可或缺的一部分。然而&#xff0c;随之而来的是家电维修门店业务的繁忙和效率的考验。为了提高家电维修门店的效率和服务质量&#xff0c;建立一个便捷高效的小程序已成为必要的选择。 本文将介绍一个简…...

玩赚音视频开发高阶技术——FFmpeg

随着移动互联网的普及&#xff0c;人们对音视频内容的需求也不断增加。无论是社交媒体平台、电商平台还是在线教育&#xff0c;都离不开音视频的应用。这就为音视频开发人员提供了广阔的就业机会。根据这些年来网站上的音视频开发招聘需求来看&#xff0c;音视频开发人员的需求…...

python 变量赋值 修改之后 原值改变

python 是一种动态语言&#xff0c;因此变量的类型和值 在运行时均可改变。当我们将一个变量赋值给另一个变量时&#xff0c;实际上是将变量的引用地址传递给新的变量&#xff0c;这意 味着新旧变量将指向同一个位置。因此&#xff0c;在更改其中一个变量的值时&#xff0c;另一…...

拂袖一挥,zipfile秒列zip包内容

使用wxpython列出文件夹中的zip文件及内容 最近在做一个文件管理的小工具,需要列出选择的文件夹下的所有zip压缩文件,并在点击某个zip文件时能够显示其中的内容。为此我使用了wxpython来实现这个功能。 1. 导入需要的模块 首先导入程序需要的模块: import wx import os imp…...

InnoDB文件物理结构解析2 - FIL_PAGE_INDEX

1. 关于索引组织表 InnoDB使用的是索引组织表(IOT)的方式存储表记录&#xff0c;索引组织表以主键构建一个B-tree的数据结构来存储行记录&#xff0c;行记录存储在树的叶节点内。这与Oracle数据库是不同的&#xff0c;Oracle数据库默认创建的表是堆组织表(HOT)&#xff0c;HOT…...

XML-BEANS compiled schema: Could not locate compiled schema resource 异常处理

使用poi5.2.2生成ppt&#xff0c;生成堆叠图&#xff0c;设置值时抛出异常 XML-BEANS compiled schema: Could not locate compiled schema resource org/apache/poi/schemas/ooxml/system/ooxml/stoverlappercent872etype.xsb (org.apache.poi.schemas.ooxml.system.ooxml.st…...

IOC容器 - Autofac

DI&#xff08;依赖注入&#xff09;&#xff1a;DI&#xff08;Dependency Injection&#xff09;是一种实现松耦合和可测试性的软件设计模式。它的核心思想是将依赖关系的创建与管理交给外部容器&#xff0c;使得对象之间只依赖于接口而不直接依赖于具体实现类。通过依赖注入…...

用i18n 实现vue2+element UI的国际化多语言切换详细步骤及代码

一、i18n的安装 这个地方要注意自己的vue版本和i1n8的匹配程度&#xff0c;如果是vue2点几&#xff0c;记得安装i18n的8版本&#xff0c;不然会自动安装的最新版本&#xff0c;后面会报错哦&#xff0c;查询了下资料&#xff0c;好像最新版本是适配的vue3。 npm install vue-…...

Vue3 :Pinia入门

Vue3 &#xff1a;Pinia入门 Date: May 11, 2023 Sum: Pinia概念、实现counter、getters、异步action、storeToRefs保持响应式解构 什么是Pinia Pinia 是 Vue 的专属状态管理库&#xff0c;可以实现跨组件或页面共享状态&#xff0c;是 vuex 状态管理工具的替代品&#xff0c…...

GORM微服务通信:10个高效数据交换方案终极指南

GORM微服务通信&#xff1a;10个高效数据交换方案终极指南 【免费下载链接】gorm The fantastic ORM library for Golang, aims to be developer friendly 项目地址: https://gitcode.com/gh_mirrors/gor/gorm GORM是Golang生态中一款开发者友好的ORM库&#xff0c;专为…...

基于Next.js与React的AI智能体开发平台AgentBay深度解析

1. 项目概述&#xff1a;一个基于Next.js与React的AI智能体开发平台最近在折腾AI智能体&#xff08;AI Agents&#xff09;的开发&#xff0c;发现市面上虽然有不少框架&#xff0c;但要么过于复杂&#xff0c;要么生态不够完善&#xff0c;对于想快速构建一个具备特定技能、能…...

PR曲线绘制超简单

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 PR曲线绘制超简单&#xff1a;从入门到自动化实战指南 目录 PR曲线绘制超简单&#xff1a;从入门到自动化实战指南 引言&#xff…...

期望、方差与协方差:概率论核心概念与NumPy实践

1. 概率论三剑客&#xff1a;期望、方差与协方差的核心概念第一次接触期望值这个概念是在大学概率论课上&#xff0c;教授用赌场的轮盘游戏举例&#xff1a;长期来看每个数字出现的概率相等&#xff0c;庄家通过设置赔率让期望值对自己有利。这个例子让我意识到&#xff0c;期望…...

SSCom串口调试助手:Linux和macOS下的高效串口通信终极指南

SSCom串口调试助手&#xff1a;Linux和macOS下的高效串口通信终极指南 【免费下载链接】sscom Linux/Mac版本 串口调试助手 项目地址: https://gitcode.com/gh_mirrors/ss/sscom SSCom是一款专为Linux和macOS系统设计的免费串口调试工具&#xff0c;它为嵌入式开发者、物…...

为什么92%的AI PoC项目因容器隔离失效被叫停?Docker Sandbox 6步硬核配置手册(含GPU透传避坑指南)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker Sandbox 运行 AI 代码隔离技术配置总览 Docker Sandbox 是一种轻量级、可复现的容器化运行环境&#xff0c;专为安全执行第三方 AI 代码而设计。它通过命名空间&#xff08;namespaces&#xff…...

从操作数到智能体:构建可执行任务AI系统的核心架构与实践

1. 项目概述&#xff1a;从“操作数”到“智能体”的范式跃迁最近在跟几个做AI应用落地的朋友聊天&#xff0c;大家普遍有个感觉&#xff1a;单纯调用大模型API做个聊天界面&#xff0c;或者用RAG&#xff08;检索增强生成&#xff09;做个知识库问答&#xff0c;已经越来越“卷…...

不花一分钱,10分钟搞定,2026销售录音总结怎么写每月省18小时多拿18成单率

我测评过不下20款AI录音转写总结工具&#xff0c;针对销售做每月客户拜访录音总结这个场景&#xff0c;听脑AI是同类工具中最值得用的。不花一分钱就能上手核心功能&#xff0c;10分钟就能搞定过去大半天的活&#xff0c;我接触过的几十位销售朋友反馈&#xff0c;用了之后每月…...

基于LLM的智能笔记生成器:从原理到工程实践

1. 项目概述&#xff1a;一个能“思考”的笔记生成器最近在折腾个人知识管理&#xff0c;发现一个挺有意思的痛点&#xff1a;我们每天会接触大量信息&#xff0c;比如技术文章、会议记录、代码片段&#xff0c;但要把这些零散的信息整理成结构清晰、便于回顾的笔记&#xff0c…...

解锁学术新秘籍:书匠策AI,期刊论文的“智慧引擎”

在学术探索的征途中&#xff0c;期刊论文无疑是每位研究者展示智慧结晶、推动学科进步的重要舞台。然而&#xff0c;面对繁琐的写作流程、海量的文献筛选以及严谨的格式要求&#xff0c;许多学者常常感到力不从心。别怕&#xff0c;今天就让我们一起走进书匠策AI的世界&#xf…...