#Java版GDAL中Native library load failed.问题的解决方案
本文使用官方网站编译好的GDAL1.10Java版本,包含下图中红色方框所包含的gdal.jar核心包以及gdalconstjni.dll、gdaljni.dll、ogrjni.dll、osrjni.dll共5个文件,gdal110.dll和其他DLL文件是GDAL库在使用时所必须的类库,gdal-data目录是GDAL官方的数据目录。
在Eclipse中新建一个Java工程,使用GDAL库时,首先将上图所示的文件拷贝到工程的libs目录中,然后添加gdal.jar的引用,入下图所示。
编写如下测试程序:
import org.gdal.gdal.Band;
import org.gdal.gdal.Dataset;
import org.gdal.gdal.Driver;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconstConstants;
public class Test {
public static void main(String[] args) {
gdal.AllRegister();
String filename_tif = "boulder.tif";
//使用只读方式打开图像
Dataset hDataset = gdal.Open(filename_tif, gdalconstConstants.GA_ReadOnly);
if (hDataset == null) {
System.err.println("GDALOpen failed - " + gdal.GetLastErrorNo());
System.err.println(gdal.GetLastErrorMsg());
System.exit(1);
}
//输出图像的格式信息
Driver hDriver = hDataset.GetDriver();
System.out.println("Driver:" + hDriver.getShortName() + "/" + hDriver.getLongName());
//输出图像的大小和波段数
int iXSize = hDataset.getRasterXSize();
int iYSize = hDataset.getRasterYSize();
int iBandCount = hDataset.getRasterCount();
System.out.println("Size is " + iXSize + ", "+iYSize+", "+ iBandCount);
Band band = hDataset.GetRasterBand(1);
int iType = band.GetRasterDataType();
System.out.println(iType + "/n");
//读取一行数据
int buf[] = new int[iXSize];
band.ReadRaster(0, 0, iXSize, 1, buf);
hDataset.delete();
//可选
gdal.GDALDestroyDriverManager();
}
}
测试运行,会提示如下图所示的错误:
错误提示中说在java的类库路径中找不到gdaljni库,这时,需要在项目的Java Build Path中进行如下配置,打开gdal.jar包引用的“Native library location”项选择“Edit”,在弹出的框中选择“Workspace”中本项目中保存GDAL类库的文件夹目录,然后保存:
这时,再次运行代码,就可以正常调用GDAL类库,并输出如下结果: