我有一个包含数千个多边形的Shapefile 。
我需要用 C# 读取这个文件并输出WKT 格式的字符串列表。
我查看了DotSpatial和"CatFood" ESRI Shapefile Reader。我可以很好地加载 shapefile,但我不知道如何导出为 WKT。
在 DotSpatial 中,我能找到的唯一示例使用 a WktWriter
,它采用Geometry
. 我不知道如何Geometry
从Shape
.
有没有更适合这个的图书馆?
更新
感谢 mdm20 的回答,我能够写出以下内容:
using (var fs = FeatureSet.Open(path))
{
var writer = new WktWriter();
var numRows = fs.NumRows();
for (int i = 0; i < numRows; i++)
{
var shape = fs.GetShape(i, true);
var geometry = shape.ToGeometry();
var wkt = writer.Write((Geometry) geometry);
Debug.WriteLine(wkt);
}
}
我最初错过它的原因是因为我正在关注这个示例,它使用fs.ShapeIndices
而不是fs.GetShape()
. 返回的不是 a Shape
,而是 a ShapeRange
,我无法将其转换为几何。
新问题
- 我应该设置
fs.IndexMode = true
吗?为什么或者为什么不?它似乎对性能或结果没有任何影响。 fs.GetShape()
接受一个名为getAttributes
. 我的形状确实有属性,无论设置为真还是假,它们似乎都是通过的。同样,无论哪种方式都没有明显的性能影响。这是预期的吗?- 通过这种方式获取它们,WKT 是否代表存储在 shapefile 中的实际值?或者他们是否以任何方式转变?它是否考虑了 dotSpatial 的任何默认设置,我是否应该担心更改它们?
- 我要导入的 shapefile 是世界时区地图。它确实包含一个 .prj 文件。dotSpatial 是否考虑到这一点,如果没有 - 我是否需要做任何额外的事情?
非常感谢!