java 使用GDAL读取

一、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;
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值