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";
相关文章:
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 获取当前工程的…...
java每日精进 5.19【Excel 导入导出】
基于 EasyExcel 实现 Excel 的读写操作,可用于实现最常见的 Excel 导入导出等功能。 Excel 导入导出功能涉及前后端协作,后端处理数据查询、文件生成和解析,前端提供用户交互和文件下载/上传界面。以下是全流程解析,分为导出流程…...
基于Elasticsearch的搜索引擎简介
## 一、Elasticsearch简介 Elasticsearch(简称ES)是一个开源的、分布式、RESTful风格的搜索和数据分析引擎,基于Apache Lucene开发。它能够实现对海量结构化和非结构化数据的实时存储、搜索和分析,广泛应用于全文检索、日志分析、…...
不同类型桥梁的无人机检测内容及技术难度
不同类型桥梁的无人机检测内容及技术难度 无人机桥梁检测的难度因桥梁类型、结构特点和所处环境的不同而存在显著差异。以下是针对梁桥、拱桥、斜拉桥、悬索桥等主要桥梁类型的无人机检测难度分析: 1. 梁桥(简支梁、连续梁) 检测难度&#x…...
数据结构实验10.1:内部排序的基本运算
文章目录 一,实验目的二,实验内容1. 数据生成与初始化2. 排序算法实现(1)直接插入排序(2)二分插入排序(3)希尔排序(4)冒泡排序(5)快速…...
java20
1.List集合 2.数据结构之栈,队列,数组,链表 3.ArrayList集合 4.LinkedList 5.泛型 注意:E...e是指若干个变量...
LLM笔记(九)KV缓存(2)
文章目录 1. 背景与动机2. 不使用 KV Cache 的情形2.1 矩阵形式展开2.2 计算复杂度 3. 使用 KV Cache 的优化3.1 核心思想3.2 矩阵形式展开3.3 计算复杂度对比 4. 总结5. GPT-2 中 KV 缓存的实现分析5.1 缓存的数据结构与类型5.2 在注意力机制 (GPT2Attention) 中使用缓存5.3 缓…...
将 Element UI 表格拖动功能提取为公共方法
为了在多个页面复用表格拖动功能,我们可以将其封装成以下两种形式的公共方法: 方案一:封装为 Vue 指令(推荐) 1. 创建指令文件 src/directives/tableDrag.js import interact from interactjs;export default {inse…...
项目中把webpack 打包改为vite 打包
项目痛点: 老vu e-cli1创建的项目,项目是ERP系统集成了很多很多管理,本地运行调试的时候,每次修改代码都需要等待3分钟左右的编译时间,严重影响开发效率. 解决方案: 采用vite构建项目工程 方案执行 第一步 使用vite脚手架构件一个项目,然后把build文件自定义的编译逻辑般到…...
Vue3 Element Plus 中el-table-column索引使用问题
在 Element Plus 的 el-table 组件中,使用 scope.index 是不准确的。正确的索引属性应该是 scope.$index。你的代码需要调整为: vue 复制 下载 <el-button type"primary" size"default" text click"onModifyClick(scope…...
盲盒一番赏小程序系统发展:创新玩法激发市场活力
盲盒一番赏小程序系统凭借其创新的玩法,在潮玩市场中脱颖而出,激发了市场的无限活力。它不仅保留了传统一番赏百分百中奖的特点,还结合线上平台的优势,开发出了更多新颖的玩法。 例如,小程序系统设置了赏品回收功能。…...
MySQL故障排查
目录 MySQL 单示例故障排查 故障现象一 故障现象二 故障现象三 故障现象四 故障现象五 故障现象六 故障现象七 故障现象八 MySQL主从复制排查 故障现象一 故障现象二 故障现象三 MySQL 优化 硬件方面 关于CPU 关于内存 关于磁盘 MySQL配置文件 核…...
微服务项目->在线oj系统(Java版 - 4)
相信自己,终会成功 目录 B端用户管理 C端用户代码 发送验证码: 验证验证码 退出登录 登录用户信息功能 用户详情与用户编辑 用户竞赛接口 用户报名竞赛 用户竞赛报名接口查询 用户信息列表 ThreadLocalUtil Hutool工具库 常用功能介绍 B端用户管理 进行列表显示与…...
DDoS与CC攻击:谁才是服务器的终极威胁?
在网络安全领域,DDoS(分布式拒绝服务)与CC(Challenge Collapsar)攻击是两种最常见的拒绝服务攻击方式。它们的目标都是通过消耗服务器资源,导致服务不可用,但攻击方式、威胁程度和防御策略存在显…...
旧物回收小程序,一键解决旧物处理难题
在快节奏的现代生活中,我们常常会面临旧物处理的困扰。扔掉觉得可惜,留着又占空间,而且处理起来还十分麻烦。别担心,我们的旧物回收小程序来啦,只需一键,就能轻松解决你的旧物处理难题! 这款小…...
uniapp小程序获取手机设备安全距离
utils.js let systemInfo null;export const getSystemInfo () > {if (!systemInfo) {systemInfo uni.getSystemInfoSync();// 补充安全区域默认值systemInfo.safeAreaInsets systemInfo.safeAreaInsets || {top: 0,bottom: 0,left: 0,right: 0};// 确保statusBarHei…...
小程序弹出层/抽屉封装 (抖音小程序)
最近忙于开发抖音小程序,最想吐槽的就是,既没有适配的UI框架,百度上还找不到关于抖音小程序的案列,我真的很裂开啊,于是我通过大模型封装了一套代码 效果如下 介绍 可以看到 这个弹出层是支持关闭和标题显示的…...
map与set封装
封装map和set一般分为6步: 1.封装map与set 2.普通迭代器 3.const 迭代器 4.insert返回值处理 5.map operator【】 6.key不能修改的问题 一.红黑树的改造 map与set的底层是通过红黑树来封装的,但是map与set的结点储存的值不一样,set只需要存…...
【C语言基础语法入门】通过简单实例快速掌握C语言核心概念
文章目录 1. Hello World:第一个C程序2. 变量与数据类型3. 运算符4. 控制结构4.1 if-else 条件判断4.2 for 循环4.3 while 循环 5. 函数6. 数组7. 指针8. 结构体总结 📣按照国际惯例,首先声明:本文只是我自己学习的理解࿰…...
Manus AI 突破多语言手写识别技术壁垒:创新架构、算法与应用解析
在人工智能领域,手写识别技术作为连接人类自然书写与数字世界的桥梁,一直备受关注。然而,多语言手写识别面临诸多技术挑战,如语言多样性、书写风格差异、数据稀缺性等。Manus AI 作为该领域的领军者,通过一系列创新技术…...
数字图像处理——图像压缩
背景 图像压缩是一种减少图像文件大小的技术,旨在在保持视觉质量的同时降低存储和传输成本。随着数字图像的广泛应用,图像压缩在多个领域如互联网、移动通信、医学影像和卫星图像处理中变得至关重要。 技术总览 当下图像压缩JPEG几乎一统天下ÿ…...
SGLang和vllm比有什么优势?
环境: SGLang vllm 问题描述: SGLang和vllm比有什么优势? 解决方案: SGLang和vLLM都是在大语言模型(LLM)推理和部署领域的开源项目或框架,它们各自有不同的设计目标和优势。下面我综合目前…...
BeanFactory和FactoryBean的区别
目录 1、Spring-core 2、控制反转(IoC) 2.1、定义 2.2、实现方式 1、BeanFactory 2、ApplicationContext 3、FactoryBean BeanFactory是容器,管理所有Bean(包括FactoryBean),FactoryBean是被管理的Bean,只是它有…...
仓颉开发语言入门教程:搭建开发环境
仓颉开发语言作为华为为鸿蒙系统自研的开发语言,虽然才发布不久,但是它承担着极其重要的历史使命。作为鸿蒙开发者,掌握仓颉开发语言将成为不可或缺的技能,今天我们从零开始,为大家分享仓颉语言的开发教程,…...
火花生态【算力通】公测,助力全球闲置算力训练AI模型
近日,在数字化浪潮迅猛推进的大背景下,人工智能模型训练对算力的需求呈井喷式增长,而全球范围内大量算力资源却处于闲置状态,如何高效整合这些闲置算力,成为推动行业发展的关键命题。在此关键时刻,火花生态旗下的核心产品【算力通】(ComputePower)于 2025 年 5 月 10 日正式开启…...
OpenMV IDE 的图像接收缓冲区原理
OpenMV IDE 的图像接收缓冲区原理与 嵌入式图像处理系统 的数据流控制密切相关。以下是其核心工作原理的分步解析: 一、图像缓冲区架构 OpenMV 的整个图像处理流程基于 双缓冲(Double Buffering)机制,主要分为以下层级࿱…...
如何在LVGL之外的线程更新UI内容
前言 作为一个刚开始学习LVGL和嵌入式开发的新手,学会绘制一个界面之后,遇到了一个问题:在LVGL线程之外的线程,更新UI内容时,会导致程序崩溃。 1、问题分析 首先,需要了解LVGL的基本工作原理。LVGL&#…...
实景VR展厅制作流程与众趣科技实景VR展厅应用
实景VR展厅制作是一种利用虚拟现实技术将现实世界中的展览空间数字化并在线上重现的技术。 这种技术通过三维重建和扫描等手段,将线下展馆的场景、展品和信息以三维形式搬到云端数字空间,从而实现更加直观、立体的展示效果。在制作过程中,首…...
Regmap子系统之六轴传感器驱动-编写icm20607.c驱动
(一)在驱动中要操作很多芯片相关的寄存器,所以需要先新建一个icm20607.h的头文件,用来定义相关寄存器值。 #ifndef ICM20607_H #define ICM20607_H /*************************************************************** 文件名 : i…...
计算机网络-HTTP与HTTPS
文章目录 计算机网络网络模型网络OSITCP/IP 应用层常用协议HTTP报文HTTP状态码HTTP请求类型HTTP握手过程HTTP连接HTTP断点续传HTTPSHTTPS握手过程 计算机网络 网络模型 为了解决多种设备能够通过网络相互通信,解决网络互联兼容性问题。 网络模型是计算机网络中用于…...
Text2SQL在Spark NLP中的实现与应用:将自然语言问题转换为SQL查询的技术解析
概述 SQL 仍然是当前行业中最受欢迎的技能之一 免责声明:Spark NLP 中的 Text2SQL 注释器在 v3.x(2021 年 3 月)中已被弃用,不再使用。如果您想测试该模块,请使用 Spark NLP for Healthcare 的早期版本。 自新千年伊…...
Ubuntu20.04下使用dpkg方式安装WPS后,将WPS改为中文界面方法
Ubuntu20.04下使用dpkg方式安装WPS后,将WPS改为中文界面方法 说明方法 说明 Ubuntu20.04下使用dpkg方式安装WPS后,打开WPS后,发现界面是英文的,如有需要可以按照下面的方法将其改为中文界面。 方法 cd /opt/kingsoft/wps-offic…...
OpenCV CUDA 模块中的矩阵算术运算-----在频域(复数频谱)中执行逐元素乘法并缩放的函数mulAndScaleSpectrums()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 mulAndScaleSpectrums()是OpenCV CUDA模块中用于在频域(复数频谱)中执行逐元素乘法并缩放 的函数。 这个函数主要用于在…...
批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
在互联网内容生态蓬勃发展的当下,企业与创作者对内容生产与传播效率的要求日益增长。批量剪辑、矩阵分发和数字人分身技术的融合,成为提升内容创作与运营效能的关键方案。从源码层面实现三者的搭建与整合,需要深入理解各功能技术原理…...
Spring Boot 与 RabbitMQ 的深度集成实践(三)
高级特性实现 消息持久化 在实际的生产环境中,消息的可靠性是至关重要的。消息持久化是确保 RabbitMQ 在发生故障或重启后,消息不会丢失的关键机制。它涉及到消息、队列和交换机的持久化配置。 首先,配置队列持久化。在创建队列时…...
部署java项目
1.编写shell脚本部署服务 restart.sh #!/bin/bash # # start the user program # echo "-------------------- start jk service --------------------" LOG_DIR"/home/joy/usr/app/ers-log" LOG_FILE"$LOG_DIR/log_$(date "%Y%m%d").txt&…...
中国城市间交通驾车距离矩阵(2024)
中国城市间交通驾车距离矩阵(2024) 1852 数据简介 中国城市中心的交通驾车距离,该数据为通过审图号GS(2024)0650的中国城市地图得其城市中心距离,再通过高德地图api计算得出其交通驾车最短距离矩阵,单位为KM,方便大家研究使用。…...
物联网数据湖架构
物联网海量数据湖分析架构(推荐实践) ┌──────────────┐ │ IoT设备端 │ └──────┬───────┘│(MQTT/HTTP)▼ ┌──────────────┐ │ EMQX等 │ 可选(也可…...
Python将Excel单元格某一范围生成—截图(进阶版—带样式+批量+多级表头)
目录 专栏导读1、库的介绍2、库的安装3、核心代码4、通用版——带样式5、进阶版(可筛选+自动截图)多级表头版总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该…...
使用Python将 Excel 中的图表、形状和其他元素导出为图片
目录 为什么将 Excel 中的图表、形状和其他元素导出为图片? 工具与设置 Python 将 Excel 图表导出为图片 将图表导出为图片 将图表工作表导出为图片 Python 将 Excel 中的形状和其他元素导出为图片 微软 Excel 是一个功能强大的数据分析和可视化工具ÿ…...
从编程助手到AI工程师:Trae插件Builder模式实战Excel合并工具开发
Trae插件下载链接:https://www.trae.com.cn/plugin 引言:AI编程工具的新纪元 在软件开发领域,AI辅助编程正在经历一场革命性的变革。Trae插件(原MarsCode编程助手)最新推出的Builder模式,标志着AI编程工具…...
AI大模型从0到1记录学习numpy pandas day25
第 3 章 Pandas 3.1 什么是Pandas Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)…...
【云实验】Excel文件转存到RDS数据库
实验名称:Excel文件转存到RDS数据库 说明:把Excel的数据通过数据管理服务DMS(Data Management Service)导入到RDS MySQL数据库中。 流程:创建一个RDS for MySQL的实例,再创建数据库和账号,通过D…...
用Python实现数据库数据自动化导出PDF报告:从MySQL到个性化文档的全流程实践
本文将介绍如何使用Python构建一个自动化工具,实现从MySQL数据库提取员工数据,并为每位员工生成包含定制化表格的PDF报告。通过该方案,可显著提升数据导出效率,避免手动操作误差,同时支持灵活的格式定制。 需求&#…...
深入理解 ZAB:ZooKeeper 原子广播协议的工作原理
目录 ZAB 协议:ZooKeeper 如何做到高可用和强一致?🔒ZAB 协议的核心目标 🎯ZAB 协议的关键概念 💡ZAB 协议的运行阶段 🎬阶段一:Leader 选举 (Leader Election) 🗳️阶段二ÿ…...
Javascript本地存储的方式有哪些?区别及应用场景?(含Deep Seek讲解)
JavaScript本地存储方式的区别与适用场景 1. Cookie 特点: Cookie是一种较早的本地存储技术,主要通过HTTP协议在客户端和服务器之间传递数据。它的大小通常被限制为4KB以内,并且每次HTTP请求都会携带Cookie信息。缺点: 数据量有限制(最多4K…...
二元Logistic回归
二元Logistic回归 在机器学习领域,二元Logistic回归是一种非常经典的分类模型,广泛用于解决具有两类标签的分类问题。Logistic回归通过逻辑函数(Sigmoid函数)将预测结果映射到概率值,并进行分类。 一、Logistic回归 …...
Android framework 问题记录
一、休眠唤醒,很快熄屏 1.1 问题描述 机器休眠唤醒后,没有按照约定的熄屏timeout 进行熄屏,很快就熄屏(约2s~3s左右) 1.2 原因分析: 抓取相关log,打印休眠背光 相关调用栈 //具体打印调用栈…...
企业网站架构部署与优化 --web技术与nginx网站环境部署
一、Web 基础 本节将介绍Web 基础知识,包括域名的概念、DNS 原理、静态网页和动态网页的 相关知识。 1、域名和DNS 1.1、域名的概念 网络是基于TCP/IP 协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的IP 地址),用以区别在网络上成千上万个用户和计算机。…...
Scala与Spark:原理、实践与技术全景详解
Scala与Spark:原理、实践与技术全景详解 一、引言 在大数据与分布式计算领域,Apache Spark 已成为事实标准的计算引擎,而 Scala 作为其主要开发语言,也逐渐成为数据工程师和后端开发者的必备技能。本文将系统梳理 Scala 语言基础…...