Login
宁夏3d云Info
首页 > 专业分类 > 软件开发

【ArcGIS Pro SDK】 C#批量添加一个文件夹的矢量或栅格 claude代码

小神龙 2025-09-10 12:00:00 人看过

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(featureLayerParams, currentMap);

                        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(fcDef.GetName()))

                                {

                                    var featureLayerParams = new FeatureLayerCreationParams(featureClass)

                                    {

                                        MapMemberPosition = MapMemberPosition.AutoArrange

                                    };

                                    var featureLayer = LayerFactory.Instance.CreateLayer(featureLayerParams, currentMap);

                                    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(rasterLayerParams, currentMap);

                        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(rasterDef.GetName()))

                                {

                                    var rasterLayerParams = new RasterLayerCreationParams(rasterDataset)

                                    {

                                        MapMemberPosition = MapMemberPosition.AutoArrange

                                    };

                                    var rasterLayer = LayerFactory.Instance.CreateLayer(rasterLayerParams, currentMap);

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

            }

        }

    }

}




版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章

{"errcode":40164,"errmsg":"invalid ip 101.43.141.73 ipv6 ::ffff:101.43.141.73, not in whitelist rid: 6ac41c21-5282b325-76cae8c4"}
{"errcode":40164,"errmsg":"invalid ip 101.43.141.73 ipv6 ::ffff:101.43.141.73, not in whitelist rid: 6ac41c22-66447139-1f304ed6"}