使用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
相关产品推荐
相关产品推荐

