using System; using System.Collections.Generic; using System.ComponentModel; using System.Threading.Tasks; using ArcGIS.Core.Data; using ArcGIS.Core.Data.Raster; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Framework.Threading.Tasks; using LinkToolAddin.server; using ModelContextProtocol.Server; using Newtonsoft.Json; namespace LinkToolAddin.client.tool; public class ArcGisPro { [McpServerTool, Description("可以通过调用ArcGIS Pro的地理处理工具实现一些数据处理功能。")] public static async Task ArcGisProTool(string toolName, List toolParams) { // Call the ArcGIS Pro method and get the result var result = await server.CallArcGISPro.CallArcGISProTool(toolName, toolParams); // Serialize the result back to a JSON string return result; } [McpServerTool, Description("查看指定数据的属性,包括坐标系、范围、数据类型等")] public static async Task DataProperty(string datasetPath,string dataName) { using Geodatabase gdb = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(datasetPath))); FeatureClass featureClass = gdb.OpenDataset(dataName); FeatureClassDefinition featureClassDefinition = featureClass.GetDefinition(); JsonRpcResultEntity result = new JsonRpcSuccessEntity() { Id = 1, Result = JsonConvert.SerializeObject(featureClassDefinition) }; return result; } [McpServerTool, Description("列出gdb数据库中的所有数据名称")] public static async Task ListData(string gdbPath) { var datasets = new List(); await QueuedTask.Run(() => { using (Geodatabase gdb = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(gdbPath)))) { // 获取所有要素类(Feature Classes) var featureClasses = gdb.GetDefinitions(); foreach (var fc in featureClasses) datasets.Add($"要素类: {fc.GetName()}"); // 获取所有表格(Tables) var tables = gdb.GetDefinitions(); foreach (var table in tables) datasets.Add($"表格: {table.GetName()}"); // 获取所有要素数据集(Feature Datasets) var featureDatasets = gdb.GetDefinitions(); foreach (var fd in featureDatasets) datasets.Add($"要素数据集: {fd.GetName()}"); // 获取所有栅格数据集(Raster Datasets) var rasterDatasets = gdb.GetDefinitions(); foreach (var raster in rasterDatasets) datasets.Add($"栅格数据: {raster.GetName()}"); } }); JsonRpcResultEntity result = new JsonRpcSuccessEntity() { Id = 1, Result = JsonConvert.SerializeObject(datasets) }; return result; } }