我有一个在 Win7 上使用 GDAL 绑定的 Java 项目。问题是由于绑定的性质,它需要设置环境变量才能工作,特别PATH
是 、GDAL_DATA
、GDAL_DRIVER_PATH
和PROJ_LIB
. 我的意思是它们很容易让我创建并指向 GDAL 目录。但是,如果我想分发它,这对于普通用户来说将是一个笨拙的步骤。
我需要一些方法来配置 GDAL 绑定,以便用户可以在任何他们喜欢的地方复制程序,其中包含 jar 和 GDAL 库,并且引导代码将自动设置 GDAL 以查找相对于其当前位置的这些变量。
现在我尝试了以下方法(它使用了在一个非常相似的问题中提出的解决方案的一部分:package GDAL JAVA Binding and native library in a SWT plugin):
// define `root` before to grab the path of the where the JAR is located
// bit of a hack-y way to set the classpath
System.setProperty("java.library.path", root+"gdal");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
// set these gdal config variables programatically
gdal.SetConfigOption("GDAL", root + "gdal");
gdal.SetConfigOption("GDAL_DATA", root + "gdal\\gdal_data");
gdal.SetConfigOption("GDAL_DRIVER_PATH", root + "gdal\\gdalplugins");
gdal.SetConfigOption("PROJ_LIB", root + "gdal\\proj_lib");
但它首先失败SetConfigOption()
并出现以下错误:
Native library load failed.
java.lang.UnsatisfiedLinkError: C:\...\gdal\gdaljni.dll: Can't find dependent libraries
这意味着至少第一部分正在工作,因为它正确定位gdaljni.dll
,但似乎在SetConfigOption()
可以做它的事情之前,它已经在尝试查看这些路径只是为了初始化和失败。
现在,如果我手动设置环境变量,显然它运行良好。
GDAL 绑定来自:http ://www.gisinternals.com/