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

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.lryc.cn/news/380809.html

相关文章:

  • 【ai】初识pytorch
  • pcl::PointXYZRGBA造成点云无法显示
  • 【论文精读】分类扩散模型:重振密度比估计(Revitalizing Density Ratio Estimation)
  • kubesphere踩过的坑,持续更新....
  • 做Android开发怎么才能不被淘汰?
  • 异步爬虫:aiohttp 异步请求库使用:
  • 代码随想录算法训练营第四十七天|LeetCode123 买卖股票的最佳时机Ⅲ
  • 将知乎专栏文章转换为 Markdown 文件保存到本地
  • 【notes2】并发,IO,内存
  • Python题目
  • Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南
  • 关于小程序内嵌H5页面交互的问题?
  • Linux下手动查杀木马与Rootkit的实战指南
  • 电商爬虫API的定制开发:满足个性化需求的解决方案
  • nuc马原复习资料
  • Node.js是什么(基础篇)
  • 淘客返利平台的微服务架构实现
  • 【database1】mysql:DDL/DML/DQL,外键约束/多表/子查询,事务/连接池
  • 模拟木马程序自动运行:Linux下的隐蔽攻击技术
  • vuex的配置主要内容
  • VBA技术资料MF164:列出文件夹中的所有文件和创建日期
  • linux 简单使用 sftp 和 lftp命令
  • 2.超声波测距模块
  • C语言之常用标准库介绍
  • Spring响应式编程之Reactor核心接口
  • 【HTTPS云证书部署】SpingBoot部署证书
  • React的状态提升和组合
  • 示例:推荐一个基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器
  • Python: create object
  • OpenSSL命令手册