ArcGIS Pro 3.4 二次开发 - 内容

发布于:2025-05-20 ⋅ 阅读:(21) ⋅ 点赞:(0)

环境:ArcGIS Pro SDK 3.4 + .NET 8

文章目录

内容

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

网站公告

今日签到

点亮在社区的每一天
去签到