ArcGIS Pro SDK (五)内容 2 工程项
ArcGIS Pro SDK (五)内容 2 地图工程
目录
- ArcGIS Pro SDK (五)内容 2 地图工程
- 1 将文件夹连接项添加到当前工程
- 2.2 获取所有工程项
- 2.3 获取工程的所有“MapProjectItems”
- 2.4 获取特定的“MapProjectItem”
- 2.5 获取所有“样式工程项”
- 2.6 获取特定的“样式工程项”
- 2.7 获取“收藏夹”样式工程项
- 2.8 获取所有“GDBProjectItems”
- 2.9 获取特定的“GDBProjectItem”
- 2.10 获取所有“服务器连接工程项”
- 2.11 获取特定的“服务器连接工程项”
- 2.12 获取工程中的所有文件夹连接
- 2.13 获取特定文件夹连接
- 2.14 删除特定文件夹连接
- 2.15 获取特定的“布局工程项”
- 2.16 获取工程中的所有布局
- 2.17 获取特定的“地理处理工程项”
- 2.18 获取工程中的所有地理处理工程项
- 2.19 在工程中搜索特定工程
- 2.20 获取默认工程文件夹
- 2.21 刷新文件夹连接项的子项
- 2.22 获取工程类别
- 2.23 使用工程类别
- 2.24 使用模板创建工程
- 2.25 选择工程容器 - 用于 SelectItemAsync
- 2.26 工程项:获取项或查找项
- 2.27 在目录窗格中选择一个工程
环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0
1 将文件夹连接项添加到当前工程
//添加文件夹连接
string folderPath = "@C:\\myDataFolder";
var folder = await QueuedTask.Run(() =>{//创建文件夹连接工程项var item = ItemFactory.Instance.Create(folderPath) as IProjectItem;//如果成功添加到程项中返回文件夹连接工程项,否则返回nullreturn Project.Current.AddItem(item) ? item as FolderConnectionProjectItem : null;});//添加GDB
string gdbPath = "@C:\\myDataFolder\\myData.gdb";
var newlyAddedGDB = await QueuedTask.Run(() =>{//创建GDB工程项var item = ItemFactory.Instance.Create(gdbPath) as IProjectItem;//如果成功添加到程项中返回GDB工程项,否则返回nullreturn Project.Current.AddItem(item) ? item as GDBProjectItem : null;});
2.2 获取所有工程项
IEnumerable<Item> allProjectItems = Project.Current.GetItems<Item>();
foreach (var pi in allProjectItems)
{//功能代码...
}
2.3 获取工程的所有“MapProjectItems”
IEnumerable<MapProjectItem> newMapItemsContainer = project.GetItems<MapProjectItem>();await QueuedTask.Run(() =>{foreach (var mp in newMapItemsContainer){//对地图做点什么。例如:Map myMap = mp.GetMap();}});
2.4 获取特定的“MapProjectItem”
MapProjectItem mapProjItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(item => item.Name.Equals("EuropeMap"));
2.5 获取所有“样式工程项”
IEnumerable<StyleProjectItem> newStyleItemsContainer = null;
newStyleItemsContainer = Project.Current.GetItems<StyleProjectItem>();
foreach (var styleItem in newStyleItemsContainer)
{//对样式做点什么。
}
2.6 获取特定的“样式工程项”
var container = Project.Current.GetItems<StyleProjectItem>();
StyleProjectItem testStyle = container.FirstOrDefault(style => (style.Name == "ArcGIS 3D"));
StyleItem cone = null;
if (testStyle != null)cone = testStyle.LookupItem(StyleItemType.PointSymbol, "Cone_Volume_3");
2.7 获取“收藏夹”样式工程项
var fav_style_item = await QueuedTask.Run(() =>{var containerStyle = Project.Current.GetProjectItemContainer("Style");return containerStyle.GetItems().OfType<StyleProjectItem>().First(item => item.TypeID == "personal_style");});
2.8 获取所有“GDBProjectItems”
IEnumerable<GDBProjectItem> newGDBItemsContainer = null;
newGDBItemsContainer = Project.Current.GetItems<GDBProjectItem>();
foreach (var GDBItem in newGDBItemsContainer)
{//对GDB做点什么
}
2.9 获取特定的“GDBProjectItem”
GDBProjectItem GDBProjItem = Project.Current.GetItems<GDBProjectItem>().FirstOrDefault(item => item.Name.Equals("myGDB"));
2.10 获取所有“服务器连接工程项”
IEnumerable<ServerConnectionProjectItem> newServerConnections = null;
newServerConnections = project.GetItems<ServerConnectionProjectItem>();
foreach (var serverItem in newServerConnections)
{//对server做点什么
}
2.11 获取特定的“服务器连接工程项”
ServerConnectionProjectItem serverProjItem = Project.Current.GetItems<ServerConnectionProjectItem>().FirstOrDefault(item => item.Name.Equals("myServer"));
2.12 获取工程中的所有文件夹连接
//获取当前工程中的所有文件夹连接
var projectFolders = Project.Current.GetItems<FolderConnectionProjectItem>();
foreach (var FolderItem in projectFolders)
{//对文件夹连接做点什么
}
2.13 获取特定文件夹连接
//获取当前工程中的特定文件夹连接
FolderConnectionProjectItem myProjectFolder = Project.Current.GetItems<FolderConnectionProjectItem>().FirstOrDefault(folderPI => folderPI.Name.Equals("myDataFolder"));
2.14 删除特定文件夹连接
// 从工程中删除文件夹连接;未删除本地磁盘或网络上的文件夹
FolderConnectionProjectItem folderToRemove = Project.Current.GetItems<FolderConnectionProjectItem>().FirstOrDefault(myfolder => myfolder.Name.Equals("PlantSpecies"));
if (folderToRemove != null)Project.Current.RemoveItem(folderToRemove as IProjectItem);
2.15 获取特定的“布局工程项”
LayoutProjectItem layoutProjItem = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(item => item.Name.Equals("myLayout"));
2.16 获取工程中的所有布局
//获取当前项目中的所有布局
var projectLayouts = Project.Current.GetItems<LayoutProjectItem>();
foreach (var layoutItem in projectLayouts)
{//对布局做点什么
}
2.17 获取特定的“地理处理工程项”
GeoprocessingProjectItem GPProjItem = Project.Current.GetItems<GeoprocessingProjectItem>().FirstOrDefault(item => item.Name.Equals("myToolbox"));
2.18 获取工程中的所有地理处理工程项
//获取当前项目中的所有GeoprocessingProjectItem
var GPItems = Project.Current.GetItems<GeoprocessingProjectItem>();
foreach (var tbx in GPItems)
{//对工具箱做点什么
}
2.19 在工程中搜索特定工程
List<Item> _mxd = new List<Item>();
//获取当前工程中的所有文件夹连接
var allFoldersItem = Project.Current.GetItems<FolderConnectionProjectItem>();
if (allFoldersItem != null)
{//遍历找到的所有文件夹连接项foreach (var folderItem in allFoldersItem){//在该文件夹连接中搜索mxd文件,并将其添加到List<T>//注意:ArcGIS Pro在构建和使用工程时自动创建和动态更新可搜索索引。//将项添加到工程时,它们将被编入索引。//第一次索引文件夹或数据库时,如果它包含大量项目,则索引可能需要一段时间。//创建索引时,搜索不会返回任何结果。_mxd.AddRange(folderItem.GetItems());}
}
2.20 获取默认工程文件夹
//获取Pro的默认项目设置。
var defaultSettings = Project.GetDefaultProjectSettings();
var defaultProjectPath = defaultSettings.LocationPath;
if (defaultProjectPath == null)
{// 如果没有设置,项目将保存在用户的...\My Documents\ArcGIS\Projects文件夹中;// 如果该文件夹不存在,则创建该文件夹。defaultProjectPath = System.IO.Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),@"ArcGIS\Projects");
}
2.21 刷新文件夹连接项的子项
var contentItem = Project.Current.GetItems<FolderConnectionProjectItem>().First();
//var contentItem = ...
//Check if the MCT is required for Refresh()
//检查刷新是否需要使用MCT线程
if (contentItem.IsMainThreadRequired)
{//如果item.IsMainThreadRequired为true,必须使用QueuedTask.Run()//返回trueQueuedTask.Run(() => contentItem.Refresh());
}
else
{//如果item.IsMainThreadRequired为false,任何线程都可以调用Refresh(),但首选BackgroundTask。contentItem.Refresh();//或者通过BackgroundTaskArcGIS.Core.Threading.Tasks.BackgroundTask.Run(() =>contentItem.Refresh(), ArcGIS.Core.Threading.Tasks.BackgroundProgressor.None);
}
2.22 获取工程类别
//获取与项关联的项目类别
Item gdb = ItemFactory.Instance.Create(@"E:\CurrentProject\RegionalPolling\polldata.gdb");
List<ItemCategory> gdbItemCategories = gdb.ItemCategories;
2.23 使用工程类别
//使用ItemCategory作为筛选器浏览项目
IEnumerable<Item> gdbContents = gdb.GetItems();
IEnumerable<Item> filteredGDBContents1 = gdbContents.Where(item => item.ItemCategories.OfType<ItemCategoryDataSet>().Any());
IEnumerable<Item> filteredGDBContents2 = new ItemCategoryDataSet().Items(gdbContents);
2.24 使用模板创建工程
var projectFolder = System.IO.Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),@"ArcGIS\Projects");CreateProjectSettings ps = new CreateProjectSettings()
{Name = "MyProject",LocationPath = projectFolder,TemplatePath = @"C:\data\my_templates\custom_template.aptx"
};var project = await Project.CreateAsync(ps);
2.25 选择工程容器 - 用于 SelectItemAsync
//使用 Project.Current.ProjectItemContainers
var folderContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "FolderConnection");
var gdbContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "GDB");
var mapContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "Map");
var layoutContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "Layout");
var toolboxContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "GP");//或者使用 Project.Current.GetProjectItemContainerfolderContainer = Project.Current.GetProjectItemContainer("FolderConnection");
gdbContainer = Project.Current.GetProjectItemContainer("GDB");
mapContainer = Project.Current.GetProjectItemContainer("Map");
layoutContainer = Project.Current.GetProjectItemContainer("Layout");
toolboxContainer = Project.Current.GetProjectItemContainer("GP");
2.26 工程项:获取项或查找项
//GetItems搜索项内容
var map = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(m => m.Name == "Map1");
var layout = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(m => m.Name == "Layout1");
var folders = Project.Current.GetItems<FolderConnectionProjectItem>();
var style = Project.Current.GetItems<StyleProjectItem>().FirstOrDefault(s => s.Name == "ArcGIS 3D");//“查找项”使用目录路径。路径可以是文件或数据集
var fcPath = @"C:\Pro\CommunitySampleData\Interacting with Maps\Interacting with Maps.gdb\Crimes";
var pdfPath = @"C:\Temp\Layout1.pdf";
var imgPath = @"C:\Temp\AddinDesktop16.png";var fc = Project.Current.FindItem(fcPath);
var pdf = Project.Current.FindItem(pdfPath);
var img = Project.Current.FindItem(imgPath);
2.27 在目录窗格中选择一个工程
//获取目录窗格
ArcGIS.Desktop.Core.IProjectWindow projectWindow = Project.GetCatalogPane();
//或者获取活动目录视图……
//ArcGIS.Desktop.Core.IProjectWindow projectWindow = Project.GetActiveCatalogWindow();//eg 在工程中找到一个工具箱
string gpName = "Interacting with Maps.tbx";
var toolbox = Project.Current.GetItems<GeoprocessingProjectItem>().FirstOrDefault(tbx => tbx.Name == gpName);
//在“工具箱”下选择它
projectWindow.SelectItemAsync(toolbox, true, true, null);//Null在第一个容器中选择它-可选的await
//注意:Project.Current.GetProjectItemContainer(“GP”)将得到toolbox container…//假设toolbox也在文件夹容器下。在文件夹下而不是工具箱下选择它
var foldersContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "FolderConnection");
//必须指定容器,因为文件夹排在第二位(在工具箱之后)。
projectWindow.SelectItemAsync(toolbox, true, true, foldersContainer);//optionally await//找到一张地图并选择它
var mapItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(m => m.Name == "Map");
//Map只出现在“Maps”下,因此不需要指定容器
projectWindow.SelectItemAsync(mapItem, true, false, null);
相关文章:
ArcGIS Pro SDK (五)内容 2 工程项
ArcGIS Pro SDK (五)内容 2 地图工程 目录 ArcGIS Pro SDK (五)内容 2 地图工程1 将文件夹连接项添加到当前工程2.2 获取所有工程项2.3 获取工程的所有“MapProjectItems”2.4 获取特定的“MapProjectItem”2.5 获取所有“样式工程…...
【ai】初识pytorch
初识PyTorch 大神的例子运行: 【ai】openai-quickstart 配置pycharm工程 简单例子初识一下Pytorch 好像直接点击下载比较慢? 大神的代码 在这个例子中,首先定义一个线性模型,该模型有一个输入特征和一个输出特征。然后定义一个损失函数和一个优化器,接着生成一些简单的线性…...
pcl::PointXYZRGBA造成点云无法显示
如果pcd文件没有rgba信息,使用pcl::PointXYZRGBA类型打开会提示以下信息: Failed to find match for field rgba另外,显示出来的点云是黑色,如果使用默认背景色为黑色,就无法显示点云了。 如果设置其它背景色…...
【论文精读】分类扩散模型:重振密度比估计(Revitalizing Density Ratio Estimation)
文章目录 一、文章概览(一)问题的提出(二)文章工作 二、理论背景(一)密度比估计DRE(二)去噪扩散模型 三、方法(一)推导分类和去噪之间的关系(二&a…...
kubesphere踩过的坑,持续更新....
踩过的坑 The connection to the server lb.kubesphere.local:6443 was refused - did you specify the right host… 另一篇文档中 dashboard 安装 需要在浏览器中输入thisisunsafe,即可进入登录页面 ingress 安装的问题 问题描述: 安装后通过命令 kubectl g…...
做Android开发怎么才能不被淘汰?
多学一项技能,可能就会成为你升职加薪的利器。经常混迹于各复杂业务线的人,才能跳出重复工作、不断踩坑的怪圈。而一个成熟的码农在于技术过关后,更突出其他技能对专业技术的附加值。 毋须讳言的是,35岁以后你的一线coding能力一…...
异步爬虫:aiohttp 异步请求库使用:
使用requests 请求库虽然可以完成爬虫业务,但是对于异步任务来说,它是做不到的, 这时候我们需要借助 aiohttp 异步请求库来完成异步爬虫的编写: 话不多说,直接看示例: 注意:楼主使用的python版…...
代码随想录算法训练营第四十七天|LeetCode123 买卖股票的最佳时机Ⅲ
题1: 指路:123. 买卖股票的最佳时机 III - 力扣(LeetCode) 思路与代码: 买卖股票专题中三者不同的是Ⅰ为只买卖一次,Ⅱ可多次买卖,Ⅲ最多可买卖两次。那么我们将买买卖行为分为五个状态部分(…...
将知乎专栏文章转换为 Markdown 文件保存到本地
一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地,利用代码为GitHub:https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…...
【notes2】并发,IO,内存
文章目录 1.线程/协程/异步:并发对应硬件资源是cpu,线程是操作系统如何利用cpu资源的一种抽象2.并发:cpu,线程2.1 可见性:volatile2.2 原子性(读写原子):AtomicInteger/synchronized…...
Python题目
实例 3.1 兔子繁殖问题(斐波那契数列) 兔子从出生后的第三个月开始,每月都会生一对兔子,小兔子成长到第三个月后也会生一对独自。初始有一对兔子,假如兔子都不死,那么计算并输出1-n个月兔子的数量 n int…...
Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
文章目录 在Tez上优化Hive查询的指南调优指南理解Tez中的并行化理解mapper数量理解reducer数量 并发案例1:未指定队列名称案例2:指定队列名称并发的指南/建议 容器复用和预热容器容器复用预热容器 一般Tez调优参数 在Tez上优化Hive查询的指南 在Tez上优…...
关于小程序内嵌H5页面交互的问题?
有木有遇到?有木有遇到。 小程序内嵌了H5,然后H5某个按钮,需要打开小程序某个页面进行信息完善或登记,登记后要返回H5页面,而H5页面要动态显示刚才在小程序页面登记的信息。 操作流程是这样: 方案1&#…...
Linux下手动查杀木马与Rootkit的实战指南
模拟木马程序的自动运行 黑客可以通过多种方式让木马程序自动运行,包括: 计划任务 (crontab):通过设置定时任务来周期性地执行木马脚本。开机启动:在系统的启动脚本中添加木马程序,确保系统启动时木马也随之运行。替…...
电商爬虫API的定制开发:满足个性化需求的解决方案
一、引言 随着电子商务的蓬勃发展,电商数据成为了企业决策的重要依据。然而,电商数据的获取并非易事,特别是对于拥有个性化需求的企业来说,更是面临诸多挑战。为了满足这些个性化需求,电商爬虫API的定制开发成为了解决…...
nuc马原复习资料
哲学:世界观的理论形态,或者说是系统化、理论化的世界观;世界观和方法论的统一。马克思主义哲学:辩证唯物主义和历史唯物主义,关于自然。社会和思维发展的普遍规律的学说,无产阶级世界观的理论体系。世界观…...
Node.js是什么(基础篇)
前言 Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台JavaScript运行时环境,主要用于开发服务器端应用程序。它的特点是非阻塞I/O模型,使其在处理高并发请求时表现出色。 一、Node JS到底是什么 1、Node JS是什么 Node.js不是一种独立的编程…...
淘客返利平台的微服务架构实现
淘客返利平台的微服务架构实现 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨淘客返利平台的微服务架构设计与实现,旨在提高系统的灵…...
【database1】mysql:DDL/DML/DQL,外键约束/多表/子查询,事务/连接池
文章目录 1.mysql安装:存储:集合(内存:临时),IO流(硬盘:持久化)1.1 服务端:双击mysql-installer-community-5.6.22.0.msi1.2 客户端:命令行输入my…...
模拟木马程序自动运行:Linux下的隐蔽攻击技术
模拟木马程序自动运行:Linux下的隐蔽攻击技术 在网络安全领域,木马程序是一种常见的恶意软件,它能够悄无声息地在受害者的系统中建立后门,为攻击者提供远程访问权限。本文将探讨攻击者如何在Linux系统中模拟木马程序的自动运行&a…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
