java 使用GDAL生产tif格式

it2022-05-05  143

GDAL通过读取Band进行格式的转换 别的语言中GDAL调用的都是band.writeArray()进行写入,但java没有这个方法,只能通过band.WriteRaster(初始选取图片x的位置, 初始选取图片y的位置, 选取x方向的数据个数, 选取y方向的数据选取个数, 数据数组),方法如下:

gdal.AllRegister(); String fileUrl = ""; // 读取影像数据 Dataset dataset = gdal.Open(fileUrl, gdalconstConstants.GA_ReadOnly); if (dataset == null) { System.err.println("GDALOpen failed - " + gdal.GetLastErrorNo()); System.err.println(gdal.GetLastErrorMsg()); System.exit(1); } // 读取影像信息 宽、高、波段数 int xSize = dataset.getRasterXSize(); int ySzie = dataset.getRasterYSize(); int nBandCount = dataset.getRasterCount(); int type = dataset.GetRasterBand(1).GetRasterDataType(); // 读取仿射变换参数 double[] im_geotrans = dataset.GetGeoTransform(); // 读取投影 String im_proj = dataset.GetProjection(); Dataset d2 = gdal.GetDriverByName("GTiff").Create(“D:\\xx.tif”, xSize, ySzie, nBandCount, type); d2.SetGeoTransform(im_geotrans); d2.SetProjection(im_proj); for (int i = 0; i < ySzie; i++) { for (int j = 1; j <= nBandCount; j++) { Band band = dataset.GetRasterBand(j); int[] cache = new int[xSize]; band.ReadRaster(0, i, xSize, 1, cache); Band newBand = d2.GetRasterBand(j); newBand.WriteRaster(0, i, xSize, 1, cache); newBand.FlushCache(); } } dataset.delete(); d2.delete(); gdal.GDALDestroyDriverManager(); }

最新回复(0)