1

我正在尝试使用 GeoTools 读取 dted 文件,但我遇到了很多配置问题。我正在使用eclipse和java。这是我的代码的精简版:

导入 org.geotools.coverageio.gdal.dted.DTEDReader;

public class ViewDTED {
public static void main(String[] args) {
try {
DTEDReader reader = new DTEDReader(new File("C:\\temp\\mydted.dt2"));
System.out.println("It worked!");
} catch (Exception e) {
e.printStackTrace();
}
}
}

当我运行时,控制台会显示一条消息“警告:无法加载 Kakadu 本机库”。然后它继续打印 UnsatisfiedLinkError 的堆栈跟踪。

我的系统路径包括: C:_path C:\Program Files\gdal-1.9.0 C:\%JAVA_HOME%\bin C:\Program Files\Common Files\ESRI\Raster\bin\ntx86

最后一个包含很多 dll,包括我在我的机器上找到的唯一一个名称中有 kakadu 的 dll。

在 C:_path 我有这个:
gdal19.dll
gdaljni.dll
ogrjni.dll
osrjni.dll
gdalconstjni.dll
gdal.jar

这些文件也被复制到我的 Eclipse 项目的根目录中。我的 Eclipse 构建路径包括 gdal.jar 和在 C:\Program Files\geotools-2.7.4 中找到的每个 jar

在我的 Eclipse 项目的根目录中,我有这个:

gdal19.dll
gdaljni.dll
ogrjni.dll
osrjni.dll
gdalconstjni.dll
kakaducoresys.dll

哦,是的,我定义了另一个环境变量:GDAL_DATA 设置为“C:\Program Files\gdal-1.9.0”

有人可以向我解释为什么 DTEDReader 找不到必要的库吗?

4

1 回答 1

0

检查以确保您没有尝试从 64 位 JAVA 实例调用 32 位 DLL。

当我试图让 Djatoka 与 Fedora Commons 一起工作时,我在 Windows 服务器上遇到了与 Kakadu 类似的问题。除了路径问题,问题的根本原因是我试图从 Djatoka 加载免费的 32 位版本的 Kakadu 库到 Tomcat 的 64 位实例和 64 位版本的 JAVA 上。

JAVA JNI 文件似乎对尝试与 64/32 位 DLL(或共享对象)进行通信非常挑剔,因此使用重命名的 32 位文件为 Kakadu 伪造 64 位库结构是行不通的。

为了解决这个问题,我必须在同一个 Windows 服务器上安装单独的 32 位版本的 Tomcat 和 JAVA,以便 64 位版本的 Fedora Commons 可以通过 Djatoka 与 32 位版本的 Kakadu 通信。

于 2012-08-09T15:05:17.670 回答