You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NetTopologySuite.IO.ShapeFile的CreateReader读取Esri Shapefile失败求助

解决Shapefile读取时reader.Read()始终返回false的问题

针对你遇到的问题,以下是几个排查和解决方向:

1. 修正文件路径

你的路径@"\.Esri\RootNameOfShapeFile"存在格式问题:

  • 如果是相对路径,开头的反斜杠会导致程序无法正确定位文件,应改为@".Esri\RootNameOfShapeFile";
  • 建议优先使用完整绝对路径,比如@"C:\Projects\YourData\.Esri\RootNameOfShapeFile",确保程序能找到配套的.shp、.shx、.dbf文件。

2. 重置读取器位置

在执行Read()循环前,添加读取器重置操作,确保从第一条记录开始读取:

reader.Reset();
while (reader.Read())
{
    // 你的读取逻辑
}

3. 检查Geometry是否为空

即使Read()返回true,也可能存在Geometry为空的情况,修改循环代码做判断:

while (reader.Read())
{
    var geometry = reader.Geometry;
    if (geometry != null)
        Console.WriteLine(geometry.ToString());
    else
        Console.WriteLine("当前记录的Geometry为空");
    
    // 同时读取关联名称字段
    var name = reader["name"]?.ToString();
    Console.WriteLine($"关联名称:{name}");
}

4. 确认Shapefile文件完整性

确保目标目录下存在完整的Shapefile配套文件:.shp(几何数据)、.shx(索引文件)、.dbf(属性表),缺少任一文件都可能导致无法读取实际记录。

5. 更换GeometryFactory尝试

将GeometryFactory.Floating替换为GeometryFactory.Default,部分情况下工厂类型不匹配会导致读取失败:

var geoFactory = GeometryFactory.Default;
var reader = Shapefile.CreateDataReader(shpPath, geoFactory);

内容的提问来源于stack exchange,提问作者IConfuseEasily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:46:34