DEM基本数据
-
Tif文件的读取。
-
显示坐标原点,无数据值,高程最大值,高程最小值
-
释放文件句柄资源。
代码如下
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 GDALDemData {
/**
* @param args
*/
public static void main(String[] args) {
String fileName_tif = "D:\\qgis\\dem.tif";
gdal.AllRegister();
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 bandNum = hDataset.getRasterCount();
int rasterXSize = hDataset.getRasterXSize();
int rasterYSize = hDataset.getRasterYSize();
System.out.println("Size is " + rasterXSize + ", " + rasterYSize);
System.out.println("RasterCount is " + bandNum);
double[] transform = hDataset.GetGeoTransform();
//左上角地理坐标
System.out.println("transform is " + transform[0] + "/" + transform[3]);
//这里是DEM数据,声明一个float 数组来存储
float buf[] = new float[rasterXSize];
Band band = hDataset.GetRasterBand(1);
// 获取波段的无数据值
Double[] noDataValue = new Double[1];
band.GetNoDataValue(noDataValue);
System.out.println("noDataValue is " + noDataValue[0]);
// 获取最小最大值
double[] lim = new double[2];
band.ComputeRasterMinMax(lim);
System.out.println("ValueRange is " + lim[0]+","+lim[1]);
for (int i = 0; i < rasterYSize; i++) {
band.ReadRaster(0, i, rasterXSize, 1, buf); //读取一行数据
// 下面是输出高程值
for (int j = 0; j < rasterXSize; j++) {
System.out.print(buf[j]+ ", ");
}
System.out.println("\n");
}
hDataset.delete();
// 可选
gdal.GDALDestroyDriverManager();
}
}
输出结果
Driver: GTiff/GeoTIFF
Size is 263, 108
RasterCount is 1
transform is 127.10753898474958/43.14947477742243
noDataValue is -10000.0
ValueRange is -208.0403289794922,-180.14454650878906