ArcGIS Pro 3.4 二次開發 - 內容

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81505.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python-Day 15】深入探索 Python 字典 (下):常用方法、遍歷、推導式與嵌套實戰

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

31、魔法生物圖鑒——React 19 Web Workers

一、守護神協議&#xff08;核心原理&#xff09; 1. 靈魂分裂術&#xff08;線程架構&#xff09; // 主組件中初始化Workerconst workerRef useRef(null);?useEffect(() > {workerRef.current new Worker(new URL(./creatureWorker.js, import.meta.url));workerRef.…

Spark SQL 之 Antlr grammar 具體分析

src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseLexer.g4 BACKQUOTED_IDENTIFIER: ` ( ~` | `` )* `;src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4 queryPrimary:

低功耗:XILINX FPGA如何優化功耗?

優化Xilinx FPGA及其外圍電路的功耗需要從硬件設計、軟件配置和系統級優化三個層面綜合考慮。以下是具體的優化策略&#xff0c;涵蓋硬件和軟件方面&#xff1a; 一、硬件層面的功耗優化 選擇低功耗FPGA型號 選擇Xilinx低功耗系列芯片&#xff0c;如7系列中的Artix-7&#xff…

深入理解 ZAB:ZooKeeper 原子廣播協議的工作原理

目錄 ZAB 協議&#xff1a;ZooKeeper 如何做到高可用和強一致&#xff1f;&#x1f512;ZAB 協議的核心目標 &#x1f3af;ZAB 協議的關鍵概念 &#x1f4a1;ZAB 協議的運行階段 &#x1f3ac;階段一&#xff1a;Leader 選舉 (Leader Election) &#x1f5f3;?階段二&#xff…

OpenHarmony外設驅動使用 (五),Fingerprint_auth

OpenHarmony外設驅動使用 &#xff08;五&#xff09; Fingerprint_auth 概述 功能簡介 指紋認證是端側設備不可或缺的功能&#xff0c;為設備提供用戶認證能力&#xff0c;可應用于設備解鎖、支付、應用登錄等身份認證場景。用戶注冊指紋后&#xff0c;指紋認證模塊就可為設…

前端(vue)學習筆記(CLASS 6):路由進階

1、路由的封裝抽離 將之前寫在main.js文件中的路由配置與規則抽離出來&#xff0c;放置在router/index.js文件中&#xff0c;再將其導入回main.js文件中&#xff0c;即可實現路由的封裝抽離 例如 //index.js import { createMemoryHistory, createRouter } from vue-routerim…

前后端交互中的絕對路徑和相對路徑

前端 <form action"hello" method"post"> 1. 不加斜杠 &#xff08;相對路徑&#xff0c;如 action"hello"&#xff09; 解析規則&#xff1a;基于當前頁面的 URL 路徑部分 進行拼接。 假設當前頁面 URL 是 http://域名:端口/應用上下文…

在Odoo 18中創建進度條指南

在Odoo 18中創建進度條指南 一、創建進度條模板 首先在名為 progress_bar_widget.xml 的文件中定義一個名為 ProgressBarWidget 的新模板。該模板使用兩個CSS類&#xff1a;progress-bar-inner 用于樣式化進度條&#xff0c;progress_number 用于顯示進度百分比。您可以根據需…

Linux grep 命令詳解:常用選項、參數及實戰場景

一、grep 命令簡介 grep&#xff08;Global Regular Expression Print&#xff09;是 Linux 中用于文本搜索的核心工具&#xff0c;支持正則表達式&#xff0c;能快速定位文件中的目標內容。 二、常用選項&#xff08;Options&#xff09;及英文對照 | 選項 | 英文全稱 | 作用 …

【Java-EE進階】SpringBoot針對某個IP限流問題

目錄 簡介 1. 使用Guava的RateLimiter實現限流 添加Guava依賴 實現RateLimiter限流邏輯 限流管理類 控制器中應用限流邏輯 2. 使用計數器實現限流 限流管理類 控制器中應用限流邏輯 簡介 針對某個IP進行限流以防止惡意點擊是一種常見的反爬蟲和防止DoS的措施。限流策…

Linux問題排查-找到偷偷寫文件的進程

在 Linux 系統中&#xff0c;若要通過已修改的文件找到修改該文件的進程 PID&#xff0c;可以結合以下方法分析&#xff0c;具體取決于文件是否仍被進程打開或已被刪除但句柄仍存在&#xff1a; 一、文件仍被進程打開&#xff08;未刪除&#xff09; 如果文件當前正在被某個進…

More Effective C++:改善編程與設計(下)

目錄 條款19:了解臨時對象的來源 條款20:協助完成“返回值優化” 條款21:利用重載技術避免隱式類型轉換 條款22:考慮以操作符復合形式&#xff08;op&#xff09;取代其獨身形式&#xff08;op&#xff09; 條款23:考慮使用其他程序庫 條款24:了解virtual functions、mul…

VTK|類似CloudCompare的比例尺實現2-vtk實現

文章目錄 實現類頭文件實現類源文件調用邏輯關鍵問題縮放限制問題投影模式項目git鏈接實現類頭文件 以下是對你提供的 ScaleBarController.h 頭文件添加詳細注釋后的版本,幫助你更清晰地理解每個成員和方法的用途,尤其是在 VTK 中的作用: #ifndef SCALEBARCONTROLLER_H #de…

PostgreSQL 聯合索引生效條件

最近面試的時候&#xff0c;總會遇到一個問題 在 PostgreSQL 中&#xff0c;聯合索引在什么條件下會生效&#xff1f; 特此記錄~ 前置信息 數據庫版本 PostgreSQL 14.13, compiled by Visual C build 1941, 64-bit 建表語句 CREATE TABLE people (id SERIAL PRIMARY KEY,c…

SpringBoot項目里面發起http請求的幾種方法

在Spring Boot項目中發起HTTP請求的方法 在Spring Boot項目中&#xff0c;有幾種常用的方式可以發起HTTP請求&#xff0c;以下是主要的幾種方法&#xff1a; 1. 使用RestTemplate (Spring 5之前的主流方式) // 需要先注入RestTemplate Autowired private RestTemplate restT…

《Python星球日記》 第90天:微調的概念以及如何微調大模型?

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、微調原理1. 什么是大模型微調?2. 為什么需要微調?3. 微調的基本流程4. 微調策略分類二、LoRA(Low-Rank Adaptation)技術詳解1. LoRA的核…

機器學習-人與機器生數據的區分模型測試 - 模型融合與檢驗

模型融合 # 先用普通Pipeline訓練 from sklearn.pipeline import Pipeline#from sklearn2pmml.pipeline import PMMLPipeline train_pipe Pipeline([(scaler, StandardScaler()),(ensemble, VotingClassifier(estimators[(rf, RandomForestClassifier(n_estimators200, max_de…

怎樣免費開發部署自己的網站?

要免費開發自己的網站&#xff0c;您可以根據自己的技術水平和需求選擇以下兩種主要方式&#xff1a; 零基礎用戶&#xff1a;建議使用如WordPress.com、Weebly、Strikingly等平臺&#xff0c;快速搭建網站。 有一定技術基礎的用戶&#xff1a;可選擇自行開發網站&#xff0c;…

調用百度云API機器翻譯

新建Python文件&#xff0c;叫 text_translator.py 輸入 import requests import jsonAPI_KEY "glYiYVF2dSc7EQ8n78VDRCpa" # 替換為自己的API Key SECRET_KEY "kUlhze8OQZ7xbVRp" # 替換為自己的Secret Keydef main():# 選擇翻譯方向while True:di…