尝试使用GDAL / OGR打开shapefile时,“ gdalconst_wrap” dll丢失或不可读

时间:2018-08-13 21:16:35

标签: c# gdal shapefile ogr

通过在C#中使用Gdal,我遇到了一个很奇怪的问题。

这是我的代码,在Visual Studio中使用GDAL的NuGet:

g = ggplot(dataset,aes(x=data[,1],y=data[,2],group=1)) + 
     geom_point() + geom_line()
for (i in 2:4) {
g = g + geom_point(aes(x=data[,1],y=data[,i+1],group=i)) +
      geom_line(aes(x=data[,1],y=data[,i+1],group=i))
}
g

可悲的是,运行这段代码时出现异常。它告诉我它无法加载名为“ gdalconst_wrap”的DLL

但是,DLL在Debug文件夹中的正确位置。但是,如果我将其从专用文件夹中删除(bin / Debug / gdal / x64),将其放入调试文件夹的根目录(bin / Debug),我收到一个新异常,告诉我存在“试图在受保护的内存中读取或写入”的内容

我尝试使用DLL的x86版本或在GDAL官方网站上在线找到的其他版本;可悲的是,那什么都没改变。

到目前为止,我在几个似乎有类似问题的人的论坛上找到了几个话题;但显然没有人回答。对我自己来说,我很困,非常感谢您的帮助。

-编辑-

显然,问题似乎与Gdal常量“ GA_Update”有关。

据我所知,Ogr的“打开”功能需要有关如何打开文件的指令:只读或更新模式。为此,它需要一个“ int”类型的对象,该对象是Gdal用作该函数的第二个参数的常量的一部分。我使用常量“ GA_Update”来表示我可能要编辑文件(如GDAL网站上的教程中有关如何打开文件的指示所示)。 该常数是一个“ int”,但似乎是从“ gdalconst_wrap.dll”中读取了它的“ int”值。

如果我将代码的最后一行替换为

// Launch the Gdal Configuration + loading of drivers before everything
GdalConfiguration.ConfigureGdal();
GdalConfiguration.ConfigureOgr();
Gdal.AllRegister();

// Try to load the shapefile with "pathOfShapefile" being the string containing the path of the file
DataSource test = Ogr.Open(ConfigurationManager.AppSettings["pathOfShapefile"], GdalConst.GA_Update);

该异常不再发生,并且代码似乎在运行。据我所试,这适用于建议作为该函数的第二个参数的任何“ int”值。但是,我不知道所选int值的作用是什么,以及open函数如何解释它。如果有更多了解,我将进行第二次编辑。

因此,我认为读取“ gdalconst_wrap.dll”中的常量值有问题,并且NuGet软件包“ GDAL”可能会将其放在错误的位置。

0 个答案:

没有答案