一、windows环境下:
1、下载编译好的文件:http://download.gisinternals.com/sdk.php
2、dll文件的两种使用方式:
1、把release-xxxx/bin目录下的dll文件全部复制到你要使用gdal的java工程根目录下。
2、把release-xxxx/bin目录下的dll文件全部复制到java根路径/jre/bin目录下。
3、把release-xxxx/bin/gdal/java/下的五个文件(gdal.jar、gdalconstjni.dll、gdaljni.dll、ogrjni.dll、osrjni.dll)复制到java工程根目录下,然后在项目中引入该gdal.jar文件。
二、liunx环境下:
我自己编译好的文件:linux下java环境gdal编译好的文件-Java文档类资源-CSDN文库
1、把gdal编译完的文件(.a,.so)放到java根路径/lib目录下。
并配置环境变量:
export LD_LIBRARY_PATH=$JAVA_HOME/lib
2、把生成的gdal.jar引入到java项目中。
3、把proj.db文件的路径配置到环境变量中:
export PROJ_LIB=/usr/share/proj/proj.db
三、代码:
public class Gdal {
public static void main(String[] args) {
double selectAltitude = SelectAltitude(107.50000230773105, 34.0000008171423);
System.out.println("海拔是:" + selectAltitude + "米");
}
public static double SelectAltitude(double lon, double lat) {
//海拔
double altitude = 0;
//支持所有驱动
gdal.AllRegister();
//要读取的文件
String fileName_tif = "E:\\companyProject\\scwd\\DEM样例数据\\DEM样例数据\\12m.tif";
//只读方式读取数据
Dataset hDataset = gdal.Open(fileName_tif, gdalconstConstants.GA_ReadOnly);
//支持中文路径
gdal.SetConfigOption("gdal_FILENAME_IS_UTF8", "YES");
//判断是否非空
if (hDataset == null) {
System.err.println("GDALOpen failed - " + gdal.GetLastErrorNo());
System.err.println(gdal.GetLastErrorMsg());
System.exit(1);
}
//图像的列和行
Driver hDriver = hDataset.GetDriver();
int iXSize = hDataset.getRasterXSize();
int iYSize = hDataset.getRasterYSize();
Band band = hDataset.GetRasterBand(1);
//图像六要素
double[] dGeoTrans = hDataset.GetGeoTransform();
// //经纬度转行列号
double dTemp = dGeoTrans[1] * dGeoTrans[5] - dGeoTrans[2] * dGeoTrans[4];
int Xline = (int) ((dGeoTrans[5] * (lon - dGeoTrans[0]) - dGeoTrans[2] * (lat - dGeoTrans[3])) / dTemp);
int Yline = (int) ((dGeoTrans[1] * (lat - dGeoTrans[3]) - dGeoTrans[4] * (lon - dGeoTrans[0])) / dTemp);
//这里是DEM数据,所以声明一个int数组来存储,如果是其他数据类型,声明相应的类型即可
double buf[] = new double[1];
//取出像元值
band.ReadRaster(Xline, Yline, 1, 1, buf);
// 下面是输出像元值
altitude = buf[0];
hDataset.delete();
// 可选
gdal.GDALDestroyDriverManager();
return altitude;
}
}