using ArcGIS.Core.CIM;
using ArcGIS.Core.Data;
using ArcGIS.Core.Data.Raster;
using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Catalog;
using ArcGIS.Desktop.Core;
using ArcGIS.Desktop.Editing;
using ArcGIS.Desktop.Extensions;
using ArcGIS.Desktop.Framework;
using ArcGIS.Desktop.Framework.Contracts;
using ArcGIS.Desktop.Framework.Dialogs;
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Layouts;
using ArcGIS.Desktop.Mapping;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TKPrint
{
internal class ButtonAddDatabyFolder : Button
{
public static async Task AddDataToMap(string folderPath, bool addVector, bool addRaster)
{
// 确保路径存在
if (!Directory.Exists(folderPath))
{
Console.WriteLine("文件夹路径无效!");
return;
}
// 获取当前地图
Map currentMap = MapView.Active.Map;
// 检查是否添加矢量数据
if (addVector)
{
// 处理 Shapefile
var vectorFiles = Directory.GetFiles(folderPath, "*.shp", SearchOption.AllDirectories);
foreach (var vectorFile in vectorFiles)
{
await QueuedTask.Run(() =>
{
// 使用 LayerFactory.Instance.CreateLayer 创建 FeatureLayer
var featureLayerParams = new FeatureLayerCreationParams(new Uri(vectorFile))
{
MapMemberPosition = MapMemberPosition.AutoArrange
};
var featureLayer = LayerFactory.Instance.CreateLayer
Console.WriteLine($"已添加矢量文件:{vectorFile}");
});
}
// 处理文件地理数据库
var gdbDirs = Directory.GetDirectories(folderPath, "*.gdb", SearchOption.AllDirectories);
foreach (var gdbDir in gdbDirs)
{
await QueuedTask.Run(() =>
{
using (var geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(gdbDir))))
{
// 获取要素类
var featureClasses = geodatabase.GetDefinitions
foreach (var fcDef in featureClasses)
{
using (var featureClass = geodatabase.OpenDataset
{
var featureLayerParams = new FeatureLayerCreationParams(featureClass)
{
MapMemberPosition = MapMemberPosition.AutoArrange
};
var featureLayer = LayerFactory.Instance.CreateLayer
Console.WriteLine($"已添加Geodatabase中的矢量数据集:{fcDef.GetName()}");
}
}
}
});
}
}
// 检查是否添加栅格数据
if (addRaster)
{
// 处理常见栅格格式
var rasterFiles = Directory.GetFiles(folderPath, "*.tif", SearchOption.AllDirectories)
.Concat(Directory.GetFiles(folderPath, "*.img", SearchOption.AllDirectories))
.Concat(Directory.GetFiles(folderPath, "*.jpg", SearchOption.AllDirectories))
.ToList();
foreach (var rasterFile in rasterFiles)
{
await QueuedTask.Run(() =>
{
// 使用 LayerFactory.Instance.CreateLayer 创建 RasterLayer
var rasterLayerParams = new RasterLayerCreationParams(new Uri(rasterFile))
{
MapMemberPosition = MapMemberPosition.AutoArrange
};
var rasterLayer = LayerFactory.Instance.CreateLayer
Console.WriteLine($"已添加栅格文件:{rasterFile}");
});
}
// 处理文件地理数据库中的栅格数据集
var gdbRasterDirs = Directory.GetDirectories(folderPath, "*.gdb", SearchOption.AllDirectories);
foreach (var gdbRasterDir in gdbRasterDirs)
{
await QueuedTask.Run(() =>
{
using (var geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(gdbRasterDir))))
{
// 获取栅格数据集
var rasterDatasets = geodatabase.GetDefinitions
foreach (var rasterDef in rasterDatasets)
{
using (var rasterDataset = geodatabase.OpenDataset
{
var rasterLayerParams = new RasterLayerCreationParams(rasterDataset)
{
MapMemberPosition = MapMemberPosition.AutoArrange
};
var rasterLayer = LayerFactory.Instance.CreateLayer
Console.WriteLine($"已添加Geodatabase中的栅格数据集:{rasterDef.GetName()}");
}
}
}
});
}
}
}
protected override async void OnClick()
{
FrmSelectFolder frmSelectFolder = new FrmSelectFolder();
if (frmSelectFolder.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string path = frmSelectFolder.tbFolder.Text;
bool bshp=frmSelectFolder.ckbshp.Checked;
bool btif = frmSelectFolder.ckbtif.Checked;
await AddDataToMap(path, bshp, btif);
}
}
}
}
