环境:ArcGIS Pro SDK 3.4 + .NET 8
文章目录
- 内容
- 1 工程
- 1.1 创建一个空工程
- 1.2 使用指定名称创建新工程
- 1.3 使用Pro的默认设置创建新工程
- 1.4 使用自定义模板文件创建新工程
- 1.5 使用 ArcGIS Pro 提供的模板创建工程
- 1.6 打开现有工程
- 1.7 获取当前工程
- 1.8 获取当前工程的位置
- 1.9 获取工程的默认地理数据库路径
- 1.10 保存工程
- 1.11 检查工程是否需要保存
- 1.12 另存为工程
- 1.13 关闭工程
- 1.14 如何向工程中添加新地图
- 1.15 获取最近的工程
- 1.16 清除最近工程
- 1.17 移除最近的工程
- 1.18 获取已固定的工程
- 1.19 清除固定工程
- 1.20 固定/取消固定工程
- 1.21 获取最近的工程模板
- 1.22 清除最近的工程模板
- 1.23 移除最近的工程模板
- 1.24 获取固定的工程模板
- 1.25 清除固定的工程模板
- 1.26 固定/取消固定工程模板
- 2 工程项
- 2.1 向当前工程添加文件夹连接项
- 2.2 获取所有工程项
- 2.3 获取工程的所有“MapProjectItems”
- 2.4 获取特定的“地图工程”
- 2.5 获取所有 "StyleProjectItems"
- 2.6 获取特定的 "StyleProjectItem"
- 2.7 获取“收藏”样式工程
- 2.8 获取所有 "GDBProjectItems"
- 2.9 获取特定的 "GDBProjectItem"
- 2.10 获取所有“ServerConnectionProjectItems”
- 2.11 获取特定的“ServerConnectionProjectItem”
- 2.12 获取工程中的所有文件夹连接
- 2.13 获取特定文件夹连接
- 2.14 移除特定文件夹连接
- 2.15 获取特定的 "LayoutProjectItem"
- 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 在目录窗格中选择工程
- 3 Geodatabase Content
- 3.1 从浏览对话框获取地理数据库内容
- 3.2 从目录选择中获取地理数据库内容
- 4 Favorites
- 4.1 添加收藏 - 文件夹
- 4.2 插入收藏 - 地理数据库路径
- 4.3 添加收藏 - 样式项目项
- 4.4 切换收藏项的 IsAddedToAllNewProjects 标志
- 4.5 获取收藏集合并遍历
- 4.6 移除所有收藏
- 4.7 收藏夹变更事件
- 5 Metadata
- 5.1 项目:获取其 IMetadata 接口
- 5.2 项目:获取项目的元数据:GetXML
- 5.3 项目:设置项目的元数据:SetXML
- 5.4 项:检查元数据是否可以编辑:CanEdit
- 5.5 项目:使用项目的当前属性更新元数据:同步
- 5.6 项目:从源项目的元数据中复制元数据:CopyMetadataFromItem
- 5.7 项目:从当前项目的元数据中删除特定内容:DeleteMetadataContent
- 5.8 项目:使用导入的元数据更新元数据 - 输入路径可以是带有元数据的项目路径,或指向 XML 文件的 URI:ImportMetadata
- 5.9 项目:使用导入的元数据更新元数据:ImportMetadata
- 5.10 项目:导出当前选中项目的元数据:ExportMetadata
- 5.11 项目:导出当前选中项目的元数据:ExportMetadata
- 5.12 项目:将当前项目的元数据保存为XML:SaveMetadataAsXML
- 5.13 项目:将当前项目的元数据保存为HTML:SaveMetadataAsHTML
- 5.14 项目:使用自定义XSLT保存当前项目的元数据:SaveMetadataAsUsingCustomXSLT
- 5.15 项目:升级当前项目的元数据:UpgradeMetadata
- 6 Project Units
- 6.1 获取所有可用单位格式的完整列表
- 6.2 获取当前项目的单位格式列表
- 6.3 获取当前项目的特定单位格式列表
- 6.4 获取当前项目的默认格式列表
- 6.5 获取当前项目的特定默认单位格式
- 6.6 为当前项目设置特定的单位格式列表
- 6.7 设置项目单位格式的默认值
- 6.8 更新项目的单位格式
- 7 Application Options
- 7.1 获取通用选项
- 7.2 设置 GeneralOptions 使用自定义设置
- 7.3 设置 GeneralOptions 使用默认值
- 7.4 获取下载选项
- 7.5 设置共享和发布的暂存位置
- 7.6 设置PPKX的下载选项
- 7.7 为UnpackOther设置下载选项
- 7.8 设置离线地图的下载选项
- 7.9 门户项目选项
内容
1 工程
1.1 创建一个空工程
// 创建一个空工程。工程将在默认文件夹中创建
// 工程将被命名为 MyProject1、MyProject2 或类似的名称...
await Project.CreateAsync();
1.2 使用指定名称创建新工程
//用于创建新工程的设置
CreateProjectSettings projectSettings = new CreateProjectSettings()
{
//设置将要创建的工程的名称
Name = @"C:\Data\MyProject1\MyProject1.aprx"
};
//创建新工程
await Project.CreateAsync(projectSettings);
1.3 使用Pro的默认设置创建新工程
// 获取Pro的默认工程设置
var defaultProjectSettings = Project.GetDefaultProjectSettings();
// 使用默认工程设置创建新工程
await Project.CreateAsync(defaultProjectSettings);
1.4 使用自定义模板文件创建新工程
// 用于创建新工程的设置
CreateProjectSettings projectSettings = new CreateProjectSettings()
{
// 设置工程的名称
Name = "New Project",
// 新工程存储的路径
LocationPath = @"C:\Data\NewProject",
// 设置用于创建新工程的工程模板
TemplatePath = @"C:\Data\MyProject1\CustomTemplate.aptx"
};
// 创建新工程
await Project.CreateAsync(projectSettings);
1.5 使用 ArcGIS Pro 提供的模板创建工程
// 用于创建新工程的设置
CreateProjectSettings proTemplateSettings = new CreateProjectSettings()
{
// 设置工程的名称
Name = "New Project",
// 新工程存储的路径
LocationPath = @"C:\Data\NewProject",
// 选择要使用的 Pro 模板
TemplateType = TemplateType.Catalog
// TemplateType = TemplateType.LocalScene
// TemplateType = TemplateType.GlobalScene
// TemplateType = TemplateType.Map
};
// 创建新工程
await Project.CreateAsync(proTemplateSettings);
1.6 打开现有工程
// 打开一个现有的工程或工程包
await Project.OpenAsync(@"C:\Data\MyProject1\MyProject1.aprx");
1.7 获取当前工程
// 获取当前工程
var project = Project.Current;
1.8 获取当前工程的位置
// 获取当前工程的位置,即当前工程文件(*.aprx)的路径
string projectPath = Project.Current.URI;
1.9 获取工程的默认地理数据库路径
var projGDBPath = Project.Current.DefaultGeodatabasePath; // 获取当前工程的默认地理数据库路径
1.10 保存工程
// 保存工程
await Project.Current.SaveAsync();
1.11 检查工程是否需要保存
// 工程的脏状态表示对工程所做的更改尚未保存。
bool isProjectDirty = Project.Current.IsDirty;
1.12 另存为工程
// 将当前工程文件 (*.aprx) 的副本保存到指定位置,并使用指定的文件名,
// 然后打开新的工程文件
await Project.Current.SaveAsAsync(@"C:\Data\MyProject1\MyNewProject1.aprx");
1.13 关闭工程
//无法使用 ArcGIS Pro API 关闭工程。
//只有在打开另一个工程、创建新工程或关闭应用程序时,工程才会关闭。
1.14 如何向工程中添加新地图
await QueuedTask.Run(() =>
{
//注意:也可以参考 ArcGIS.Desktop.Mapping 中的 MapFactory
var map = MapFactory.Instance.CreateMap("新地图", MapType.Map, MapViewingMode.Map, Basemap.Oceans);
ProApp.Panes.CreateMapPaneAsync(map);
});
1.15 获取最近的工程
var recentProjects = ArcGIS.Desktop.Core.Project.GetRecentProjects(); // 获取最近打开的工程列表
1.16 清除最近工程
ArcGIS.Desktop.Core.Project.ClearRecentProjects(); // 清除最近打开的工程列表
1.17 移除最近的工程
// 使用 ArcGIS.Desktop.Core.Project 类的 RemoveRecentProject 方法移除指定路径的工程
ArcGIS.Desktop.Core.Project.RemoveRecentProject(projectPath);
1.18 获取已固定的工程
var pinnedProjects = ArcGIS.Desktop.Core.Project.GetPinnedProjects(); // 获取所有已固定的工程
1.19 清除固定工程
ArcGIS.Desktop.Core.Project.ClearPinnedProjects(); // 清除所有固定的工程
1.20 固定/取消固定工程
ArcGIS.Desktop.Core.Project.PinProject(projectPath); // 固定指定路径的工程
ArcGIS.Desktop.Core.Project.UnpinProject(projectPath2); // 取消固定指定路径的工程
1.21 获取最近的工程模板
var recentTemplates = ArcGIS.Desktop.Core.Project.GetRecentProjectTemplates();
// 获取最近使用的工程模板列表
1.22 清除最近的工程模板
ArcGIS.Desktop.Core.Project.ClearRecentProjectTemplates(); // 清除最近使用的工程模板列表
1.23 移除最近的工程模板
ArcGIS.Desktop.Core.Project.RemoveRecentProjectTemplate(templatePath); // 移除指定路径的最近工程模板
1.24 获取固定的工程模板
var pinnedTemplates = ArcGIS.Desktop.Core.Project.GetPinnedProjectTemplates(); // 获取所有固定的工程模板
1.25 清除固定的工程模板
// 调用方法清除所有固定的工程模板
ArcGIS.Desktop.Core.Project.ClearPinnedProjectTemplates();
1.26 固定/取消固定工程模板
ArcGIS.Desktop.Core.Project.PinProjectTemplate(templatePath); // 固定指定路径的工程模板
ArcGIS.Desktop.Core.Project.UnpinTemplateProject(templatePath2); // 取消固定指定路径的工程模板
2 工程项
2.1 向当前工程添加文件夹连接项
// 添加文件夹连接
string folderPath = "@C:\\myDataFolder";
var folder = await QueuedTask.Run(() =>
{
// 创建文件夹连接工程项
var item = ItemFactory.Instance.Create(folderPath) as IProjectItem;
// 如果成功添加到工程,返回该项,否则返回null
return Project.Current.AddItem(item) ? item as FolderConnectionProjectItem : null;
});
// 添加地理数据库:
string gdbPath = "@C:\\myDataFolder\\myData.gdb";
var newlyAddedGDB = await QueuedTask.Run(() =>
{
// 创建文件地理数据库工程项
var item = ItemFactory.Instance.Create(gdbPath) as IProjectItem;
// 如果成功添加到工程,返回该项,否则返回null
return 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 获取特定的“地图工程”
// 从当前工程中获取名称为"EuropeMap"的第一个地图工程
MapProjectItem mapProjItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(item => item.Name.Equals("EuropeMap"));
2.5 获取所有 “StyleProjectItems”
IEnumerable<StyleProjectItem> newStyleItemsContainer = null;
// 从当前工程中获取所有类型为 StyleProjectItem 的工程
newStyleItemsContainer = Project.Current.GetItems<StyleProjectItem>();
// 遍历每个 StyleProjectItem
foreach (var styleItem in newStyleItemsContainer)
{
// 对样式进行处理
}
2.6 获取特定的 “StyleProjectItem”
// 获取当前工程中的所有 StyleProjectItem 对象
var container = Project.Current.GetItems<StyleProjectItem>();
// 查找名称为 "ArcGIS 3D" 的 StyleProjectItem 对象
StyleProjectItem testStyle = container.FirstOrDefault(style => (style.Name == "ArcGIS 3D"));
// 初始化一个 StyleItem 对象
StyleItem cone = null;
// 如果找到了 "ArcGIS 3D" 的 StyleProjectItem 对象
if (testStyle != null)
// 查找类型为 PointSymbol,名称为 "Cone_Volume_3" 的 StyleItem 对象
cone = testStyle.LookupItem(StyleItemType.PointSymbol, "Cone_Volume_3");
2.7 获取“收藏”样式工程
var fav_style_item = await QueuedTask.Run(() =>
{
// 获取当前工程中的“Style”容器
var containerStyle = Project.Current.GetProjectItemContainer("Style");
// 从容器中获取所有样式工程,并筛选出类型为“personal_style”的第一个工程
return containerStyle.GetItems().OfType<StyleProjectItem>().First(item => item.TypeID == "personal_style");
});
2.8 获取所有 “GDBProjectItems”
IEnumerable<GDBProjectItem> newGDBItemsContainer = null; // 初始化一个用于存储GDB工程项的容器
newGDBItemsContainer = Project.Current.GetItems<GDBProjectItem>(); // 从当前工程中获取所有GDB工程项
foreach (var GDBItem in newGDBItemsContainer)
{
// 对每个GDB工程项执行某些操作
}
2.9 获取特定的 “GDBProjectItem”
// 从当前工程中获取名为 "myGDB" 的 GDBProjectItem 对象
GDBProjectItem GDBProjItem = Project.Current.GetItems<GDBProjectItem>().FirstOrDefault(item => item.Name.Equals("myGDB"));
2.10 获取所有“ServerConnectionProjectItems”
IEnumerable<ServerConnectionProjectItem> newServerConnections = null;
// 从工程中获取所有ServerConnectionProjectItem类型的项
newServerConnections = project.GetItems<ServerConnectionProjectItem>();
foreach (var serverItem in newServerConnections)
{
// 对每个服务器连接执行操作
}
2.11 获取特定的“ServerConnectionProjectItem”
// 从当前工程中获取所有ServerConnectionProjectItem,并查找名称为"myServer"的第一个工程
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”
// 从当前工程中获取所有 LayoutProjectItem 类型的项,并查找名称为 "myLayout" 的第一项
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 获取特定的“地理处理工程项”
// 从当前工程中获取名为"myToolbox"的地理处理工程项
GeoprocessingProjectItem GPProjItem = Project.Current.GetItems<GeoprocessingProjectItem>().FirstOrDefault(item => item.Name.Equals("myToolbox"));
2.18 获取工程中的所有地理处理工程项
// 获取当前工程中的所有地理处理工程项
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)
{
// 遍历所有找到的FolderConnectionProjectItems
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)
{
// 如果未设置,工程将保存在用户的“我的文档\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 = ...
//检查是否需要在主线程中调用Refresh()
if (contentItem.IsMainThreadRequired)
{
//如果item.IsMainThreadRequired返回true,必须使用QueuedTask.Run
QueuedTask.Run(() => contentItem.Refresh());
}
else
{
//如果item.IsMainThreadRequired返回false,可以在任何线程中调用Refresh(),
//但推荐使用BackgroundTask
contentItem.Refresh();
//或者通过BackgroundTask调用
ArcGIS.Core.Threading.Tasks.BackgroundTask.Run(() =>
contentItem.Refresh(), ArcGIS.Core.Threading.Tasks.BackgroundProgressor.None);
}
2.22 获取工程类别
// 获取与工程关联的ItemCategories
Item gdb = ItemFactory.Instance.Create(@"E:\CurrentProject\RegionalPolling\polldata.gdb");
List<ItemCategory> gdbItemCategories = gdb.ItemCategories;
2.23 使用工程类别
// 使用ItemCategory作为过滤器浏览工程
IEnumerable<Item> gdbContents = gdb.GetItems();
// 过滤出包含ItemCategoryDataSet类型的工程
IEnumerable<Item> filteredGDBContents1 = gdbContents.Where(item => item.ItemCategories.OfType<ItemCategoryDataSet>().Any());
// 使用ItemCategoryDataSet实例过滤工程
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"); // 获取路径为 "FolderConnection" 的文件夹容器
var gdbContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "GDB"); // 获取路径为 "GDB" 的地理数据库容器
var mapContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "Map"); // 获取路径为 "Map" 的地图容器
var layoutContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "Layout"); // 获取路径为 "Layout" 的布局容器
var toolboxContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "GP"); // 获取路径为 "GP" 的工具箱容器
// 等等
// 或者...使用 Project.Current.GetProjectItemContainer
folderContainer = Project.Current.GetProjectItemContainer("FolderConnection"); // 获取路径为 "FolderConnection" 的文件夹容器
gdbContainer = Project.Current.GetProjectItemContainer("GDB"); // 获取路径为 "GDB" 的地理数据库容器
mapContainer = Project.Current.GetProjectItemContainer("Map"); // 获取路径为 "Map" 的地图容器
layoutContainer = Project.Current.GetProjectItemContainer("Layout"); // 获取路径为 "Layout" 的布局容器
toolboxContainer = Project.Current.GetProjectItemContainer("GP"); // 获取路径为 "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");
//FindItem 使用目录路径查找工程。路径可以是文件或数据集
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();
//例如,在工程中查找一个工具箱
string gpName = "Interacting with Maps.tbx";
var toolbox = Project.Current.GetItems<GeoprocessingProjectItem>().FirstOrDefault(tbx => tbx.Name == gpName);
//在工具箱下选择它
projectWindow.SelectItemAsync(toolbox, true, true, null);//null表示在第一个容器中选择 - 可选择等待
//注意:Project.Current.GetProjectItemContainer("GP") 可以获取工具箱容器...
//假设工具箱也在文件夹容器下。在文件夹下选择它,而不是在工具箱下
var foldersContainer = Project.Current.ProjectItemContainers.First(c => c.Path == "FolderConnection");
//我们必须指定容器,因为文件夹在工具箱之后
projectWindow.SelectItemAsync(toolbox, true, true, foldersContainer);//可选择等待
//查找一个地图并选择它
var mapItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(m => m.Name == "Map");
//地图只出现在“地图”下,因此不需要指定容器
projectWindow.SelectItemAsync(mapItem, true, false, null);
3 Geodatabase Content
3.1 从浏览对话框获取地理数据库内容
var openDlg = new OpenItemDialog
{
Title = "选择一个要素类", // 设置对话框标题
InitialLocation = @"C:\Data", // 设置初始路径
MultiSelect = false, // 禁止多选
BrowseFilter = BrowseProjectFilter.GetFilter(ArcGIS.Desktop.Catalog.ItemFilters.GeodatabaseItems_All) // 设置浏览过滤器
};
// 显示浏览对话框
bool? ok = openDlg.ShowDialog();
if (!ok.HasValue || openDlg.Items.Count() == 0)
return; // 未选择任何内容
await QueuedTask.Run(() =>
{
// 获取选中的项
var item = openDlg.Items.First();
// 检查该项是否包含数据集
if (ItemFactory.Instance.CanGetDataset(item))
{
// 获取数据集
using (var ds = ItemFactory.Instance.GetDataset(item))
{
// 访问一些属性
var name = ds.GetName(); // 获取数据集名称
var path = ds.GetPath(); // 获取数据集路径
// 如果数据集是要素类
if (ds is ArcGIS.Core.Data.FeatureClass fc)
{
// 创建图层
var featureLayerParams = new FeatureLayerCreationParams(fc)
{
MapMemberIndex = 0
};
var layer = LayerFactory.Instance.CreateLayer<FeatureLayer>(featureLayerParams, MapView.Active.Map);
// 继续操作
}
}
}
});
3.2 从目录选择中获取地理数据库内容
// 订阅事件
ProjectWindowSelectedItemsChangedEvent.Subscribe(async (ProjectWindowSelectedItemsChangedEventArgs args) =>
{
if (args.IProjectWindow.SelectionCount > 0)
{
// 获取第一个选中的项目
var selectedItem = args.IProjectWindow.SelectedItems.First();
await QueuedTask.Run(() =>
{
// 获取数据集类型
var dataType = ItemFactory.Instance.GetDatasetType(selectedItem);
// 获取数据集定义
if (ItemFactory.Instance.CanGetDefinition(selectedItem))
{
using (var def = ItemFactory.Instance.GetDefinition(selectedItem))
{
if (def is ArcGIS.Core.Data.FeatureClassDefinition fcDef)
{
var oidField = fcDef.GetObjectIDField(); // 获取对象ID字段
var shapeField = fcDef.GetShapeField(); // 获取形状字段
var shapeType = fcDef.GetShapeType(); // 获取形状类型
}
else if (def is ArcGIS.Core.Data.Parcels.ParcelFabricDefinition pfDef)
{
string ver = pfDef.GetSchemaVersion(); // 获取模式版本
bool enabled = pfDef.GetTopologyEnabled(); // 获取拓扑是否启用
}
// 其他类型处理
}
}
// 获取数据集
if (ItemFactory.Instance.CanGetDataset(selectedItem))
{
using (var ds = ItemFactory.Instance.GetDataset(selectedItem))
{
if (ds is ArcGIS.Core.Data.FeatureDataset fds)
{
// 打开要素数据集中的要素类
// var fcPoint = fds.OpenDataset<FeatureClass>("Point");
// var fcPolyline = fds.OpenDataset<FeatureClass>("Polyline");
}
else if (ds is FeatureClass fc)
{
var name = fc.GetName() + "_copy"; // 获取要素类名称并添加后缀
// 创建要素图层
var featureLayerParams = new FeatureLayerCreationParams(fc)
{
Name = name,
MapMemberIndex = 0
};
LayerFactory.Instance.CreateLayer<FeatureLayer>(featureLayerParams, MapView.Active.Map);
}
else if (ds is Table table)
{
var name = table.GetName() + "_copy"; // 获取表名称并添加后缀
var tableParams = new StandaloneTableCreationParams(table)
{
Name = name
};
// 创建独立表
StandaloneTableFactory.Instance.CreateStandaloneTable(tableParams, MapView.Active.Map);
}
}
}
});
}
});
4 Favorites
4.1 添加收藏 - 文件夹
var itemFolder = ItemFactory.Instance.Create(@"d:\data"); // 创建文件夹项
// 检查文件夹项是否已经是收藏
var fav = FavoritesManager.Current.GetFavorite(itemFolder);
if (fav == null)
{
if (FavoritesManager.Current.CanAddAsFavorite(itemFolder)) // 检查是否可以添加为收藏
{
fav = FavoritesManager.Current.AddFavorite(itemFolder); // 添加为收藏
}
}
4.2 插入收藏 - 地理数据库路径
string gdbPath = "@C:\\myDataFolder\\myData.gdb"; // 定义地理数据库路径
var itemGDB = ItemFactory.Instance.Create(gdbPath); // 创建地理数据库项
// 检查该项是否已经是收藏
var fav = FavoritesManager.Current.GetFavorite(itemGDB);
// 如果不是收藏,则将其添加为收藏,并将IsAddedToAllNewProjects设置为true
if (fav != null)
{
if (FavoritesManager.Current.CanAddAsFavorite(itemGDB))
FavoritesManager.Current.InsertFavorite(itemGDB, 1, true);
}
4.3 添加收藏 - 样式项目项
// 获取当前项目中名为 "ArcGIS 3D" 的样式项目项
StyleProjectItem styleItem = Project.Current.GetItems<StyleProjectItem>().
FirstOrDefault(style => (style.Name == "ArcGIS 3D"));
// 检查该样式项目项是否可以被添加到收藏夹
if (FavoritesManager.Current.CanAddAsFavorite(styleItem))
{
// 将该样式项目项添加到收藏夹,IsAddedToAllNewProjects 设置为 false
FavoritesManager.Current.AddFavorite(styleItem);
}
4.4 切换收藏项的 IsAddedToAllNewProjects 标志
var itemFolder = ItemFactory.Instance.Create(@"d:\data");
// 检查文件夹项是否已经是收藏项
var fav = FavoritesManager.Current.GetFavorite(itemFolder);
if (fav != null)
{
if (fav.IsAddedToAllNewProjects)
// 如果已添加到所有新项目,则清除该标志
FavoritesManager.Current.ClearIsAddedToAllNewProjects(fav.Item);
else
// 如果未添加到所有新项目,则设置该标志
FavoritesManager.Current.SetIsAddedToAllNewProjects(fav.Item);
}
4.5 获取收藏集合并遍历
var favorites = FavoritesManager.Current.GetFavorites(); // 获取当前收藏集合
foreach (var favorite in favorites) // 遍历每个收藏项
{
bool isAddedToAllProjects = favorite.IsAddedToAllNewProjects; // 检查是否已添加到所有新项目
// 获取收藏项的基础项
Item item = favorite.Item;
// 获取项的属性
var itemType = item.TypeID; // 获取项的类型ID
var path = item.Path; // 获取项的路径
// 如果项是文件夹连接项目项
if (item is FolderConnectionProjectItem)
{
}
// 如果项是地理数据库项目项
else if (item is GDBProjectItem)
{
}
// 其他情况
}
4.6 移除所有收藏
var favorites = FavoritesManager.Current.GetFavorites(); // 获取当前所有收藏项
foreach (var favorite in favorites) // 遍历每个收藏项
FavoritesManager.Current.RemoveFavorite(favorite.Item); // 移除当前收藏项
4.7 收藏夹变更事件
ArcGIS.Desktop.Core.Events.FavoritesChangedEvent.Subscribe((args) =>
{
// 收藏夹已变更
int count = FavoritesManager.Current.GetFavorites().Count;
});
5 Metadata
5.1 项目:获取其 IMetadata 接口
// 使用 ItemFactory 实例创建一个 GDB 项目,路径为 @"C:\projectAlpha\GDBs\regionFive.gdb"
Item gdbItem = ItemFactory.Instance.Create(@"C:\projectAlpha\GDBs\regionFive.gdb");
// 将 gdbItem 转换为 IMetadata 接口类型
IMetadata gdbMetadataItem = gdbItem as IMetadata;
5.2 项目:获取项目的元数据:GetXML
string gdbXMLMetadataXmlAsString = string.Empty; // 初始化一个空字符串用于存储元数据
gdbXMLMetadataXmlAsString = await QueuedTask.Run(() => gdbMetadataItem.GetXml()); // 异步获取元数据并转换为字符串
// 检查是否成功返回元数据
if (!string.IsNullOrEmpty(gdbXMLMetadataXmlAsString))
{
// 使用元数据
}
5.3 项目:设置项目的元数据:SetXML
await QueuedTask.Run(() =>
{
var xml = System.IO.File.ReadAllText(@"E:\Data\Metadata\MetadataForFeatClass.xml");
//如果无法更改元数据,将抛出InvalidOperationException
//因此首先检查"CanEdit"
if (featureClassMetadataItem.CanEdit())
featureClassMetadataItem.SetXml(xml);
});
5.4 项:检查元数据是否可以编辑:CanEdit
bool canEdit1;
//在调用SetXml之前调用CanEdit
await QueuedTask.Run(() => canEdit1 = metadataItemToCheck.CanEdit());
5.5 项目:使用项目的当前属性更新元数据:同步
string syncedMetadataXml = string.Empty; // 初始化一个空字符串,用于存储同步后的元数据XML
await QueuedTask.Run(() => syncedMetadataXml = metadataItemToSync.Synchronize()); // 在队列任务中执行同步操作,并将结果赋值给syncedMetadataXml
5.6 项目:从源项目的元数据中复制元数据:CopyMetadataFromItem
// 创建一个项目实例,指向源要素类的位置
Item featureClassItem = ItemFactory.Instance.Create(@"C:\projectAlpha\GDBs\regionFive.gdb\SourceFeatureClass");
// 在队列任务中执行元数据复制操作
await QueuedTask.Run(() => metadataItemImport.CopyMetadataFromItem(featureClassItem));
5.7 项目:从当前项目的元数据中删除特定内容:DeleteMetadataContent
Item featureClassWithMetadataItem = ItemFactory.Instance.Create(@"C:\projectBeta\GDBs\regionFive.gdb\SourceFeatureClass");
// 从项目的元数据中删除缩略图内容
await QueuedTask.Run(() => featureClassWithMetadataItem.DeleteMetadataContent(MDDeleteContentOption.esriMDDeleteThumbnail));
5.8 项目:使用导入的元数据更新元数据 - 输入路径可以是带有元数据的项目路径,或指向 XML 文件的 URI:ImportMetadata
// 输入路径可以是带有元数据的项目路径,或指向 XML 文件的 URI
IMetadata metadataItemImport1 = null;
await QueuedTask.Run(() => metadataItemImport1.ImportMetadata(@"E:\YellowStone.gdb\MyDataset\MyFeatureClass", MDImportExportOption.esriCurrentMetadataStyle));
5.9 项目:使用导入的元数据更新元数据:ImportMetadata
// 输入路径可以是带有元数据的项目路径,或指向 XML 文件的 URI
await QueuedTask.Run(() => metadataItemImport2.ImportMetadata(@"E:\YellowStone.gdb\MyDataset\MyFeatureClass", MDImportExportOption.esriCustomizedStyleSheet, @"E:\StyleSheets\Import\MyImportStyleSheet.xslt"));
5.10 项目:导出当前选中项目的元数据:ExportMetadata
await QueuedTask.Run(() => metadataItemExport1.ExportMetadata(@"E:\Temp\OutputXML.xml", MDImportExportOption.esriCurrentMetadataStyle, MDExportRemovalOption.esriExportExactCopy));
// 使用 QueuedTask.Run 在后台任务中执行元数据导出操作
// metadataItemExport1.ExportMetadata 方法用于导出元数据
// 第一个参数 @"E:\Temp\OutputXML.xml" 指定导出文件的路径
// 第二个参数 MDImportExportOption.esriCurrentMetadataStyle 指定使用当前的元数据样式
// 第三个参数 MDExportRemovalOption.esriExportExactCopy 指定导出为精确副本
5.11 项目:导出当前选中项目的元数据:ExportMetadata
await QueuedTask.Run(() => metadataItemExport2.ExportMetadata(@"E:\Temp\OutputXML.xml", MDImportExportOption.esriCustomizedStyleSheet, MDExportRemovalOption.esriExportExactCopy, @"E:\StyleSheets\Export\MyExportStyleSheet.xslt"));
// 使用QueuedTask.Run异步执行元数据导出操作
// 参数1:导出的XML文件路径
// 参数2:导入导出选项,此处使用自定义样式表
// 参数3:导出移除选项,此处导出精确副本
// 参数4:自定义样式表路径
5.12 项目:将当前项目的元数据保存为XML:SaveMetadataAsXML
await QueuedTask.Run(() => metadataItemToSaveAsXML.SaveMetadataAsXML(@"E:\Temp\OutputXML.xml", MDSaveAsXMLOption.esriExactCopy));
// 使用异步任务将元数据项保存为XML文件,路径为E:\Temp\OutputXML.xml,保存选项为精确复制
5.13 项目:将当前项目的元数据保存为HTML:SaveMetadataAsHTML
await QueuedTask.Run(() => metadataItemToSaveAsHTML.SaveMetadataAsHTML(@"E:\Temp\OutputHTML.htm", MDSaveAsHTMLOption.esriCurrentMetadataStyle));
// 使用异步任务队列运行,将元数据项保存为HTML文件,路径为E:\Temp\OutputHTML.htm,保存选项为当前元数据样式
5.14 项目:使用自定义XSLT保存当前项目的元数据:SaveMetadataAsUsingCustomXSLT
await QueuedTask.Run(() => metadataItemToSaveAsUsingCustomXSLT.SaveMetadataAsUsingCustomXSLT(@"E:\Data\Metadata\CustomXSLT.xsl", @"E:\Temp\OutputXMLCustom.xml"));
// 使用自定义XSLT文件将元数据保存到指定路径的XML文件中
5.15 项目:升级当前项目的元数据:UpgradeMetadata
// 使用ItemFactory创建指定路径的地理数据库项目
var fgdcItem = ItemFactory.Instance.Create(@"C:\projectAlpha\GDBs\testData.gdb");
// 在队列任务中异步执行元数据升级操作,指定升级选项为FGDC CSDGM格式
await QueuedTask.Run(() => fgdcItem.UpgradeMetadata(MDUpgradeOption.esriUpgradeFgdcCsdgm));
6 Project Units
6.1 获取所有可用单位格式的完整列表
//必须在 QueuedTask.Run() 中执行
var unit_formats = Enum.GetValues(typeof(UnitFormatType))
.OfType<UnitFormatType>().ToList(); // 获取所有单位格式类型并转换为列表
System.Diagnostics.Debug.WriteLine("所有可用单位\r\n"); // 输出标题
foreach (var unit_format in unit_formats) // 遍历每种单位格式类型
{
var units = DisplayUnitFormats.Instance.GetPredefinedProjectUnitFormats(unit_format); // 获取预定义的项目单位格式
System.Diagnostics.Debug.WriteLine(unit_format.ToString()); // 输出单位格式类型名称
foreach (var display_unit_format in units) // 遍历每种单位格式
{
var line = $"{display_unit_format.DisplayName}, {display_unit_format.UnitCode}"; // 格式化显示名称和单位代码
System.Diagnostics.Debug.WriteLine(line); // 输出格式化后的信息
}
System.Diagnostics.Debug.WriteLine(""); // 输出空行以分隔不同单位格式类型
}
6.2 获取当前项目的单位格式列表
//必须在 QueuedTask.Run() 中执行
var unit_formats = Enum.GetValues(typeof(UnitFormatType))
.OfType<UnitFormatType>().ToList(); //获取所有单位格式类型并转换为列表
System.Diagnostics.Debug.WriteLine("Project units\r\n"); //输出项目单位信息
foreach (var unit_format in unit_formats) //遍历每种单位格式类型
{
var units = DisplayUnitFormats.Instance.GetProjectUnitFormats(unit_format); //获取当前单位格式类型下的所有单位
System.Diagnostics.Debug.WriteLine(unit_format.ToString()); //输出当前单位格式类型
foreach (var display_unit_format in units) //遍历当前单位格式类型下的所有单位
{
var line = $"{display_unit_format.DisplayName}, {display_unit_format.UnitCode}"; //生成单位名称和单位代码的字符串
System.Diagnostics.Debug.WriteLine(line); //输出单位名称和单位代码
}
System.Diagnostics.Debug.WriteLine(""); //输出空行以分隔不同单位格式类型
}
6.3 获取当前项目的特定单位格式列表
//必须在 QueuedTask.Run() 中执行
//UnitFormatType.Angular(角度), UnitFormatType.Area(面积), UnitFormatType.Distance(距离),
//UnitFormatType.Direction(方向), UnitFormatType.Location(位置), UnitFormatType.Page(页面)
//UnitFormatType.Symbol2D(2D符号), UnitFormatType.Symbol3D(3D符号)
var units = DisplayUnitFormats.Instance.GetProjectUnitFormats(UnitFormatType.Distance);
6.4 获取当前项目的默认格式列表
//必须在 QueuedTask.Run() 中执行
var unit_formats = Enum.GetValues(typeof(UnitFormatType))
.OfType<UnitFormatType>().ToList(); //获取所有单位格式类型并转换为列表
System.Diagnostics.Debug.WriteLine("Default project units\r\n"); //输出默认项目单位信息
foreach (var unit_format in unit_formats)
{
var default_unit = DisplayUnitFormats.Instance.GetDefaultProjectUnitFormat(unit_format); //获取指定单位格式的默认项目单位
var line = $"{unit_format.ToString()}: {default_unit.DisplayName}, {default_unit.UnitCode}"; //格式化输出信息
System.Diagnostics.Debug.WriteLine(line); //输出格式化信息
}
System.Diagnostics.Debug.WriteLine(""); //输出空行
6.5 获取当前项目的特定默认单位格式
//必须在 QueuedTask.Run() 中执行
//UnitFormatType.Angular, UnitFormatType.Area, UnitFormatType.Distance,
//UnitFormatType.Direction, UnitFormatType.Location, UnitFormatType.Page
//UnitFormatType.Symbol2D, UnitFormatType.Symbol3D
var default_unit = DisplayUnitFormats.Instance.GetDefaultProjectUnitFormat(
UnitFormatType.Distance);
6.6 为当前项目设置特定的单位格式列表
//必须在 QueuedTask.Run() 中执行
//UnitFormatType.Angular, UnitFormatType.Area, UnitFormatType.Distance,
//UnitFormatType.Direction, UnitFormatType.Location
//获取所有可用的位置单位的完整列表
var all_units = DisplayUnitFormats.Instance.GetPredefinedProjectUnitFormats(
UnitFormatType.Location);
//保留工厂代码为偶数的单位
var list_units = all_units.Where(du => du.UnitCode % 2 == 0).ToList();
//将它们设置为新的位置单位集合,不指定新的默认值
DisplayUnitFormats.Instance.SetProjectUnitFormats(list_units);
//将它们设置为新的位置单位集合,并指定新的默认值
DisplayUnitFormats.Instance.SetProjectUnitFormats(
list_units, list_units.First());
//注意:UnitFormatType.Page, UnitFormatType.Symbol2D, UnitFormatType.Symbol3D
//无法设置。
6.7 设置项目单位格式的默认值
//必须在 QueuedTask.Run() 中执行
var unit_formats = Enum.GetValues(typeof(UnitFormatType)).OfType<UnitFormatType>().ToList();
foreach (var unit_type in unit_formats)
{
var current_default = DisplayUnitFormats.Instance.GetDefaultProjectUnitFormat(unit_type);
//任意选择每个单位格式列表中的最后一个单位
var replacement = DisplayUnitFormats.Instance.GetProjectUnitFormats(unit_type).Last();
DisplayUnitFormats.Instance.SetDefaultProjectUnitFormat(replacement);
var line = $"{current_default.DisplayName}, {current_default.UnitName}, {current_default.UnitCode}";
var line2 = $"{replacement.DisplayName}, {replacement.UnitName}, {replacement.UnitCode}";
System.Diagnostics.Debug.WriteLine($"Format: {unit_type.ToString()}");
System.Diagnostics.Debug.WriteLine($" Current default: {line}");
System.Diagnostics.Debug.WriteLine($" Replacement default: {line2}");
}
6.8 更新项目的单位格式
//UnitFormatType.Angular, UnitFormatType.Area, UnitFormatType.Distance,
//UnitFormatType.Direction, UnitFormatType.Location
var angle_units = DisplayUnitFormats.Instance.GetProjectUnitFormats(UnitFormatType.Angular); // 获取项目中角度类型的单位格式
// 编辑每个单位的显示名称 - 添加缩写
foreach (var unit in angle_units)
{
unit.DisplayName = $"{unit.DisplayName} ({unit.Abbreviation})"; // 在显示名称后添加缩写
}
// 将更改应用到单位格式,并将默认单位设置为第一个条目
DisplayUnitFormats.Instance.SetProjectUnitFormats(angle_units, angle_units.First()); // 设置项目单位格式并指定默认单位
// 必须保存项目以使更改持久化...
7 Application Options
7.1 获取通用选项
var startMode = ApplicationOptions.GeneralOptions.StartupOption; // 获取启动模式
var aprx_path = ApplicationOptions.GeneralOptions.StartupProjectPath; // 获取启动项目路径
var hf_option = ApplicationOptions.GeneralOptions.HomeFolderOption; // 获取主文件夹选项
var folder = ApplicationOptions.GeneralOptions.CustomHomeFolder; // 获取自定义主文件夹
var gdb_option = ApplicationOptions.GeneralOptions.DefaultGeodatabaseOption; // 获取默认地理数据库选项
var def_gdb = ApplicationOptions.GeneralOptions.CustomDefaultGeodatabase; // 获取自定义默认地理数据库
var tbx_option = ApplicationOptions.GeneralOptions.DefaultToolboxOption; // 获取默认工具箱选项
var def_tbx = ApplicationOptions.GeneralOptions.CustomDefaultToolbox; // 获取自定义默认工具箱
var create_in_folder = ApplicationOptions.GeneralOptions.ProjectCreateInFolder; // 获取项目创建文件夹
7.2 设置 GeneralOptions 使用自定义设置
//设置应用程序使用自定义项目、主文件夹、地理数据库和工具箱
//在每种情况下,必须先设置自定义路径,然后再设置“选项”。
//这确保应用程序保持一致性状态。这与 Pro UI 的行为相同。
if (string.IsNullOrEmpty(ApplicationOptions.GeneralOptions.StartupProjectPath))
ApplicationOptions.GeneralOptions.StartupProjectPath = @"D:\data\usa.aprx";//先设置自定义项目路径
ApplicationOptions.GeneralOptions.StartupOption = StartProjectMode.WithDefaultProject;//再设置使用它的选项
if (string.IsNullOrEmpty(ApplicationOptions.GeneralOptions.CustomHomeFolder))
ApplicationOptions.GeneralOptions.CustomHomeFolder = @"D:\home_folder";//先设置自定义主文件夹路径
ApplicationOptions.GeneralOptions.HomeFolderOption = OptionSetting.UseCustom;//再设置使用它的选项
if (string.IsNullOrEmpty(ApplicationOptions.GeneralOptions.CustomDefaultGeodatabase))
ApplicationOptions.GeneralOptions.CustomDefaultGeodatabase = @"D:\data\usa.gdb";//先设置自定义地理数据库路径
ApplicationOptions.GeneralOptions.DefaultGeodatabaseOption = OptionSetting.UseCustom;//再设置使用它的选项
if (string.IsNullOrEmpty(ApplicationOptions.GeneralOptions.CustomDefaultToolbox))
ApplicationOptions.GeneralOptions.CustomDefaultToolbox = @"D:\data\usa.tbx";//先设置自定义工具箱路径
ApplicationOptions.GeneralOptions.DefaultToolboxOption = OptionSetting.UseCustom;//再设置使用它的选项
7.3 设置 GeneralOptions 使用默认值
//无论“companion”路径(指向项目、文件夹、地理数据库、工具箱等)的值如何,都可以设置默认选项。
//如果选项设置不使用该路径值,则忽略该路径值。这与 Pro UI 上的行为相同。
ApplicationOptions.GeneralOptions.StartupOption = StartProjectMode.ShowStartPage;
ApplicationOptions.GeneralOptions.HomeFolderOption = OptionSetting.UseDefault;
ApplicationOptions.GeneralOptions.DefaultGeodatabaseOption = OptionSetting.UseDefault;
ApplicationOptions.GeneralOptions.DefaultToolboxOption = OptionSetting.UseDefault; //首先设置默认选项
//如果“companion”选项设置为默认选项,则(可选)将路径值设置(回)为 null。
if (ApplicationOptions.GeneralOptions.StartupOption != StartProjectMode.WithDefaultProject)
ApplicationOptions.GeneralOptions.StartupProjectPath = null;
if (ApplicationOptions.GeneralOptions.HomeFolderOption == OptionSetting.UseDefault)
ApplicationOptions.GeneralOptions.CustomHomeFolder = null;
if (ApplicationOptions.GeneralOptions.DefaultGeodatabaseOption == OptionSetting.UseDefault)
ApplicationOptions.GeneralOptions.CustomDefaultGeodatabase = null;
if (ApplicationOptions.GeneralOptions.DefaultToolboxOption == OptionSetting.UseDefault)
ApplicationOptions.GeneralOptions.CustomDefaultToolbox = null;
7.4 获取下载选项
var staging = ApplicationOptions.DownloadOptions.StagingLocation; // 获取暂存位置
var ppkx_loc = ApplicationOptions.DownloadOptions.UnpackPPKXLocation; // 获取解压PPKX文件的位置
var ask_ppkx_loc = ApplicationOptions.DownloadOptions.AskForUnpackPPKXLocation; // 获取是否询问解压PPKX文件的位置
var other_loc = ApplicationOptions.DownloadOptions.UnpackOtherLocation; // 获取解压其他文件的位置
var ask_other_loc = ApplicationOptions.DownloadOptions.AskForUnpackOtherLocation; // 获取是否询问解压其他文件的位置
var use_proj_folder = ApplicationOptions.DownloadOptions.UnpackOtherToProjectLocation; // 获取是否将其他文件解压到项目位置
var offline_loc = ApplicationOptions.DownloadOptions.OfflineMapsLocation; // 获取离线地图的位置
var ask_offline_loc = ApplicationOptions.DownloadOptions.AskForOfflineMapsLocation; // 获取是否询问离线地图的位置
var use_proj_folder_offline = ApplicationOptions.DownloadOptions.OfflineMapsToProjectLocation; // 获取是否将离线地图保存到项目位置
7.5 设置共享和发布的暂存位置
// 设置下载选项中的暂存位置为"D:\data\staging"
ApplicationOptions.DownloadOptions.StagingLocation = @"D:\data\staging";
7.6 设置PPKX的下载选项
//选项是互斥的。
//设置 ApplicationOptions.DownloadOptions.AskForUnpackPPKXLocation = true
//会覆盖 ApplicationOptions.DownloadOptions.UnpackPPKXLocation 中的任何值
//并在解压时提示用户。ApplicationOptions.DownloadOptions.UnpackPPKXLocation 的值将不受影响
//并被忽略。这与Pro UI中的行为相同。
ApplicationOptions.DownloadOptions.AskForUnpackPPKXLocation = true;//覆盖位置
//默认位置通常是 <My Documents>\ArcGIS\Packages
//将 ApplicationOptions.DownloadOptions.UnpackPPKXLocation 设置为任何
//位置会覆盖 ApplicationOptions.DownloadOptions.AskForUnpackPPKXLocation
//并将其设置为 false。这与Pro UI中的行为相同。
ApplicationOptions.DownloadOptions.UnpackPPKXLocation = @"D:\data\for_ppkx";
//或者,如果 ApplicationOptions.DownloadOptions.UnpackPPKXLocation 已经
//包含一个有效路径,显式将 ApplicationOptions.DownloadOptions.AskForUnpackPPKXLocation
//设置为 false 以使用 UnpackPPKXLocation
if (!string.IsNullOrEmpty(ApplicationOptions.DownloadOptions.UnpackPPKXLocation))
ApplicationOptions.DownloadOptions.AskForUnpackPPKXLocation = false;
7.7 为UnpackOther设置下载选项
// UnpackOther设置控制除ppkx或aptx之外的其他文件的解压。选项是互斥的。
// 显式设置ApplicationOptions.DownloadOptions.UnpackOtherLocation以切换
// ApplicationOptions.DownloadOptions.AskForUnpackOtherLocation和
// ApplicationOptions.DownloadOptions.UnpackOtherToProjectLocation为false
// 注意:默认值通常是<我的文档>\ArcGIS\Packages,而不是null。
// 这与Pro UI的行为相同。
ApplicationOptions.DownloadOptions.UnpackOtherLocation = @"D:\data\for_other";
// 或者...要使用已存储在UnpackOtherLocation中的位置作为默认值而不更改它,
// 显式设置ApplicationOptions.DownloadOptions.AskForUnpackOtherLocation和
// ApplicationOptions.DownloadOptions.UnpackOtherToProjectLocation为false。
// 这与Pro UI的行为相同。
if (!string.IsNullOrEmpty(ApplicationOptions.DownloadOptions.UnpackOtherLocation))
{
ApplicationOptions.DownloadOptions.AskForUnpackOtherLocation = false;
ApplicationOptions.DownloadOptions.UnpackOtherToProjectLocation = false;
}
// 将ApplicationOptions.DownloadOptions.AskForUnpackOtherLocation设置为true
// 会覆盖任何UnpackOtherLocation值,并将
// ApplicationOptions.DownloadOptions.UnpackOtherToProjectLocation设置为false。
// 这与Pro UI的行为相同。
ApplicationOptions.DownloadOptions.AskForUnpackOtherLocation = true;
// 将ApplicationOptions.DownloadOptions.UnpackOtherToProjectLocation设置为true
// 会覆盖任何UnpackOtherLocation值,并将
// ApplicationOptions.DownloadOptions.AskForUnpackOtherLocation设置为false。
// 这与Pro UI的行为相同。
ApplicationOptions.DownloadOptions.UnpackOtherToProjectLocation = false;
7.8 设置离线地图的下载选项
//离线地图设置控制离线地图内容在本地机器上复制到的位置。选项是互斥的。
//显式设置 ApplicationOptions.DownloadOptions.OfflineMapsLocation 以切换
//ApplicationOptions.DownloadOptions.AskForOfflineMapsLocation 和
//ApplicationOptions.DownloadOptions.OfflineMapsToProjectLocation 为 false
//注意:默认值通常为 <我的文档>\ArcGIS\OfflineMaps,而不是 null。
//这与 Pro UI 的行为相同。
ApplicationOptions.DownloadOptions.OfflineMapsLocation = @"D:\data\for_offline";
//或者...为了使用已存储在 OfflineMapsLocation 中的位置作为默认值而不更改它,
//显式设置 ApplicationOptions.DownloadOptions.AskForOfflineMapsLocation 和
//ApplicationOptions.DownloadOptions.OfflineMapsToProjectLocation 为 false。
if (!string.IsNullOrEmpty(ApplicationOptions.DownloadOptions.OfflineMapsLocation))
{
ApplicationOptions.DownloadOptions.AskForOfflineMapsLocation = false;
ApplicationOptions.DownloadOptions.OfflineMapsToProjectLocation = false;
}
//将 ApplicationOptions.DownloadOptions.AskForOfflineMapsLocation 设置为
//true 会覆盖任何 OfflineMapsLocation 值,并将
//ApplicationOptions.DownloadOptions.OfflineMapsToProjectLocation 设置为 false。
//这与 Pro UI 的行为相同。
ApplicationOptions.DownloadOptions.AskForOfflineMapsLocation = true;
//将 ApplicationOptions.DownloadOptions.OfflineMapsToProjectLocation 设置为
//true 会覆盖任何 OfflineMapsLocation 值,并将
//ApplicationOptions.DownloadOptions.AskForOfflineMapsLocation 设置为 false。
//这与 Pro UI 的行为相同。
ApplicationOptions.DownloadOptions.OfflineMapsToProjectLocation = true;
7.9 门户项目选项
// 访问当前选项
var def_home = ApplicationOptions.GeneralOptions.PortalProjectCustomHomeFolder;
var def_gdb = ApplicationOptions.GeneralOptions.PortalProjectCustomDefaultGeodatabase;
var def_tbx = ApplicationOptions.GeneralOptions.PortalProjectCustomDefaultToolbox;
var deleteOnClose = ApplicationOptions.GeneralOptions.PortalProjectDeleteLocalCopyOnClose;
var def_location = ApplicationOptions.GeneralOptions.PortalProjectDownloadLocation;
// 设置选项
ApplicationOptions.GeneralOptions.PortalProjectCustomHomeFolder = @"E:\data";
ApplicationOptions.GeneralOptions.PortalProjectCustomDefaultGeodatabase = @"E:\data\usa.gdb";
ApplicationOptions.GeneralOptions.PortalProjectCustomDefaultToolbox = @"E:\data\usa.tbx";
ApplicationOptions.GeneralOptions.PortalProjectDeleteLocalCopyOnClose = false;
ApplicationOptions.GeneralOptions.PortalProjectDownloadLocation = @"E:\data";