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);

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

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

相关文章

ANR灵魂拷问:四大组件中的onCreate-onReceive方法中Thread-sleep(),会产生几个ANR-

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { sleepTest(); } }); sleepTest方法详情 public void sleepTest(){ new Handler().postDelayed(new Runnable() { Override public void run() { Button but…

Android MVP模式 入门

View&#xff1a;对应于布局文件 Model&#xff1a;业务逻辑和实体模型 Controllor&#xff1a;对应于Activity 看起来的确像那么回事&#xff0c;但是细细的想想这个View对应于布局文件&#xff0c;其实能做的事情特别少&#xff0c;实际上关于该布局文件中的数据绑定的操…

【转型指南】从软件测试到技术多面手

★ 导言 小艺是一位毕业于985的计算机硕士&#xff0c;工作多年&#xff0c;现在某大厂从事软件测试方面的管理工作。目前在工作中游刃有余&#xff0c;但面对技术的飞速变化和职业发展的不确定性&#xff0c;还是难免焦虑&#xff0c;正在积极思考如何进一步提升自己&#xff…

在Android系统中,查看apk安装路径

在Android系统中&#xff0c;应用通常安装在内部存储的特定目录下。要找到已安装应用的路径&#xff0c;可以通过ADB&#xff08;Android Debug Bridge&#xff09;工具来查询。以下是一些步骤和命令&#xff0c;可以帮助你找到应用的安装路径&#xff1a; 使用pm list package…

瑞_MongoDB_MongoDB副本集

文章目录 1 MongoDB副本集-Replica Sets1.1 简介1.2 副本集的三个角色1.3 副本集架构目标1.4 副本集的创建1.4.1 创建主节点1.4.2 创建副本节点1.4.3 创建仲裁节点1.4.4 初始化配置副本集和主节点1.4.5 查看副本集的配置内容 rs.conf()1.4.6 查看副本集状态1.4.7 添加副本从节点…

AIGC时代算法工程师的面试秘籍(2024.5.27-6.9第十五式) |【三年面试五年模拟】

写在前面 【三年面试五年模拟】旨在整理&挖掘AI算法工程师在实习/校招/社招时所需的干货知识点与面试方法&#xff0c;力求让读者在获得心仪offer的同时&#xff0c;增强技术基本面。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&#x1f4aa; 欢迎大家关注Rocky…

ROS话题通信机制实操C++

ROS话题通信机制实操C 创建ROS工程发布方(二狗子)订阅方(翠花)编辑配置文件编译并执行注意订阅的第一条数据丢失 ROS话题通信的理论查阅ROS话题通信流程理论 在ROS话题通信机制实现中&#xff0c;ROS master 不需要实现&#xff0c;且连接的建立也已经被封装了&#xff0c;需要…

JDK17新增语法特征

1、引言 Spring Boot 3.0 开始不再支持 JDK 8&#xff0c;转而支持 JDK 17。 这篇博客我会列举较常用的新语法特性。 2、新增语法特征 2.1 yield关键字 从Java13开始引⼊yield关键字&#xff0c;yield关键字应用于switch语句中&#xff0c;我们可以使用yield来简化代码。 正常的…

2024.06.22【读书笔记】丨生物信息学与功能基因组学(第十七章 人类基因组 第一部分)【AI测试版】

第一部分:人类基因组概述与测序历史(详细版) 摘要: 第十七章深入探讨了人类基因组的复杂性、测序历程以及其对现代科学的意义。人类基因组由约30,000至40,000个蛋白质编码基因组成,这些基因的表达和变异构成了我们生物学特征和疾病倾向的基础。本章节详细回顾了人类基因…

前端算法题----三数求和问题

算法题讲解 真题描述&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案…

Applied Spatial Statistics(七):Python 中的空间回归

Applied Spatial Statistics&#xff08;七&#xff09;&#xff1a;Python 中的空间回归 本笔记本演示了如何使用 pysal 的 spreg 库拟合空间滞后模型和空间误差模型。 OLS空间误差模型空间滞后模型三种模型的比较探索滞后模型中的直接和间接影响 import numpy as np impor…

【html】用html写一个博物馆首页

效果图&#xff1a; 二级导航&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><l…

江协科技51单片机学习- p14 调试LCD1602显示屏

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

算法框架:冷部署实现优雅退出

冷部署实现优雅退出&#xff1a;背景与解决方案 在微服务架构中&#xff0c;服务的更新和部署是日常运维中不可避免的任务。然而&#xff0c;传统的冷部署方法往往会直接停止旧服务并启动新服务&#xff0c;这样会导致正在处理的请求被中断&#xff0c;进而影响用户体验。为了…

RabbitMQ消息队列 安装及基本介绍

一.MQ介绍 Message Queue &#xff08;MQ&#xff09;是一种跨进程的通信机制&#xff0c;用于在系统之间进行传递消息。MQ作为消息中间件&#xff0c;可以进行异步处理请求&#xff0c;从而减少请求响应时间和解耦 1.1 应用场景 1.1.1 系统之间通过MQ进行消息通信&#xff0…

leetcode 二分查找·系统掌握 x的平方根

题目&#xff1a; 题解 这题可以使用~01~泛型查找在0~x/2的范围内查找答案。 int mySqrt(int x) {long l0,rx,mid;while(l<r){mid(lr1)>>1;if(mid*mid>x)rmid-1;else lmid;}//因为一定有答案所以不用判定是否查找失败return l;}

Docker构建多平台镜像

docker的多架构镜像构建 目前很多服务器都是基于arm架构的&#xff0c;而现在大多数的docker镜像都是基于x86架构的。一种情况就是同样的代码编译成业务包做成镜像需要部署在不同架构的服务器上&#xff0c;这个时候我们就可以使用docker的多平台构建了。 以下操作是在centos7.…

数组、正则表达式、排序

数组 定义&#xff1a;在集合当中指定多个元素&#xff0c;元素的类型可以是整数也可以是字符串&#xff0c;也可以是浮点。 作用&#xff1a;可以一次性定义多个元素&#xff0c;可以为变量赋值提供便利。 数组的定义方法&#xff1a; 数组名 &#xff08;a b c&#xff0…

深入探索 Nuxt3 Composables:掌握目录架构与内置API的高效应用

title: 深入探索 Nuxt3 Composables&#xff1a;掌握目录架构与内置API的高效应用 date: 2024/6/23 updated: 2024/6/23 author: cmdragon excerpt: 摘要&#xff1a;“本文深入探讨了Nuxt3 Composables&#xff0c;重点介绍了其目录架构和内置API的高效应用。通过学习本文&…

pcl::PointXYZRGBA造成点云无法显示

如果pcd文件没有rgba信息&#xff0c;使用pcl::PointXYZRGBA类型打开会提示以下信息&#xff1a; Failed to find match for field rgba另外&#xff0c;显示出来的点云是黑色&#xff0c;如果使用默认背景色为黑色&#xff0c;就无法显示点云了。 如果设置其它背景色&#xf…