引用库如下:

读取shapefile代码如下:
namespace IfoxDemo
{
    public class Class1
    {
        [CommandMethod("xx")]
        public static void nts二次学习()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            var ed = doc.Editor;
            string shpPath = @"C:\Users\Administrator\Desktop\1.shp";
            var shpPath2 = @"C:\Users\Administrator\Desktop\2.shp";
            foreach (var feature in NetTopologySuite.IO.Esri.Shapefile.ReadAllFeatures(shpPath2))
            {
                foreach (var attrName in feature.Attributes.GetNames())
                {
                    ed.WriteMessage($"\n字段名为:\"{attrName,10}\" \n 字段内容为: \"{feature.Attributes[attrName]}\"\n");
                }
                ed.WriteMessage($"    形状和xy为\"{feature.Geometry}\"\n");
                break;
            }
            ed.WriteMessage("下一个:\n");
            foreach (var feature in NetTopologySuite.IO.Esri.Shapefile.ReadAllFeatures(shpPath))
            {
                foreach (var attrName in feature.Attributes.GetNames())
                {
                    ed.WriteMessage($"字段名为:\"{attrName,10}\" \n 字段内容为: \"{feature.Attributes[attrName]}\n");
                }
                ed.WriteMessage($"     SHAPE: 形状和xy为\"{feature.Geometry}\"\n");
                break;
            }
        }
    }
}
 
读取结果如下:

读取dbf文件如下:
          var ed = Env.Editor;
          var shpPath = @"C:\Users\Administrator\Desktop\新建文件夹 (2)\zd.shp";
          var dbfPath = @"C:\Users\Administrator\Desktop\新建文件夹 (2)\zd.dbf";
          using var dbf = new DbfReader(dbfPath);
          int id = 0;
          foreach (var record in dbf)
          {
              ed.WriteMessage($"\n第{id}条记录: \n");
              foreach (var fieldName in record.GetNames())
              {
                 ed.WriteMessage($"\n字段名为:{fieldName,10} ,字段记录内容为{record[fieldName]}。\n");
              }
              id++;
          } 
读取shp文件的几何信息:
            var ed = Env.Editor;
            var shpPath = @"C:\Users\Administrator\Desktop\新建文件夹 (2)\zd.shp";
            var dbfPath = @"C:\Users\Administrator\Desktop\新建文件夹 (2)\zd.dbf";
            using var dbf = new DbfReader(dbfPath);
            int id = 0;
            foreach (NetTopologySuite.Geometries.Geometry geometry in Shapefile.ReadAllGeometries(shpPath))
            {
                id++;
                ed.WriteMessage($"\n第{id}个geometry:"+geometry.ToString());
                ed.WriteMessage("\ngeometry的类型为:"+geometry.GetType().ToString()+"\n");
                // 根据几何类型提取坐标点
                List<Point3d> points = new List<Point3d>();
                if (geometry is Point point)
                {
                    // 如果是点类型
                    points.Add(new Point3d(point.X, point.Y, point.Z)); // 假设 Z 坐标为 0
                }
                else if (geometry is LineString lineString)
                {
                    // 如果是线类型
                    foreach (Coordinate coord in lineString.Coordinates)
                    {
                        points.Add(new Point3d(coord.X, coord.Y, coord.Z)); // 假设 Z 坐标为 0
                    }
                }
                else if (geometry is Polygon polygon)
                {
                    // 如果是面类型
                    foreach (Coordinate coord in polygon.ExteriorRing.Coordinates)
                    {
                        points.Add(new Point3d(coord.X, coord.Y, coord.Z)); // 假设 Z 坐标为 0
                    }
                }
                // 其他几何类型(如 MultiPoint、MultiLineString、MultiPolygon 等)可以类似处理
                else if (geometry is  MultiPolygon multiPolygon)
                {
                    // 遍历 MultiPolygon 中的每个 Polygon
                    foreach (Polygon polygon1 in multiPolygon.Geometries)
                    {
                        // 提取外环的坐标点
                        foreach (Coordinate coord in polygon1.ExteriorRing.Coordinates)
                        {
                            points.Add(new Point3d(coord.X, coord.Y, coord.Z)); // 假设 Z 坐标为 0
                        }
                        // 提取内环的坐标点
                        foreach (LineString interiorRing in polygon1.InteriorRings)
                        {
                            foreach (Coordinate coord in interiorRing.Coordinates)
                            {
                                points.Add(new Point3d(coord.X, coord.Y, coord.Z)); // 假设 Z 坐标为 0
                            }
                        }
                    }
                }
                int j = 0;
                foreach(var pt in points)
                {
                    j++;
                    ed.WriteMessage($"\n第{j}个坐标\n");
                    ed.WriteMessage($"x:{pt.X},y:{pt.X}\n"); 
                }
            } 

double.NaN 是 C# 中表示 非数字(Not a Number) 的特殊值。它是 double 类型的一个常量,用于表示无效或未定义的数值结果。以下是关于 double.NaN 的详细说明:
1. 什么是 double.NaN?
 
-  
定义:
NaN是 IEEE 754 浮点数标准中定义的一个特殊值,表示 非数字。 -  
特点:
-  
它不是任何具体的数值。
 -  
它用于表示无效的数学运算结果(如
0 / 0或Math.Sqrt(-1))。 -  
它与任何值(包括它自己)的比较结果都是
false。 
 -  
 



















