環境: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";