在C#中使用GDAL.OpenEx()和CSV文件

时间:2017-10-23 19:33:33

标签: c# csv gdal ogr

我正在尝试使用GDAL v2.1.3读取CSV文件中的所有字段 使用此命令可以正常工作:

ogrinfo -ro -al -so test.csv -oo X_POSSIBLE_NAMES=Lon* -oo Y_POSSIBLE_NAMES=Lat* -oo KEEP_GEOM_COLUMNS=NO

现在我需要在我的C#应用​​程序中执行此操作。 因为我需要发送-oo(开放选项),我无法使用Ogr.Open(),但我应该使用Gdal.OpenEx(),对吧? OpenEx返回Dataset,我需要将其转换为ogr datasource,以便我可以使用GetLayerByIndex()GetFieldCount()GetFieldDefn(),但我可以不能让它发挥作用。

看看无数的Python示例,它似乎在Python中不需要转换。 这是我的C#代码:

var openOptions = new[]
{
    "X_POSSIBLE_NAMES", "Lon*",
    "Y_POSSIBLE_NAMES", "Lat*",
    "KEEP_GEOM_COLUMNS", "NO"
};
using (var ds = Gdal.OpenEx(input, 4, null, openOptions, null))
{
    if (ds == null)
    {
        throw new Exception("Can't open OGR dataset: " + input);
    }
    // var layer = ds.GetLayerByIndex(0); <----- COMPILE ERROR
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我根本不是swig专家,但看起来数据集的向量(OGR)部分没有为current GDAL code

中的C#特别定义

答案 1 :(得分:0)

我在使用 C++ 时遇到了类似的问题,试图从 ogr2ogr CLI 切换到 GDAL C++。也许这会对某人有所帮助。

我必须以不同的方式格式化我的选项数组才能使其工作:

  const char *optionsArray[5] = {
    "X_POSSIBLE_NAMES=lon*",
    "Y_POSSIBLE_NAMES=lat*",
    "Z_POSSIBLE_NAMES=alt*",
    "KEEP_GEOM_COLUMNS=NO",
    NULL
  };

在 C++ 中,我必须添加 GDALOpenEx documentation 所述的结尾 NULL