主要函数
1.读取影像
band1.ReadRaster(0, row, width, 1, doubleArr);
-
第1个参数:x的偏移量(从该行第几个像素开始读取)
-
第2个参数:y的偏移量(从该图片第几行开始读取)
-
第3个参数:读取x的长度(从x的偏移量开始读几个像素)
-
第4个参数:读取y的长度(从第y行开始读几行)
2.写入影像
band1.WriteRaster(0, row, width, 1, doubleArr);
-
第1个参数:x的偏移量(从该行第几个像素开始写入)
-
第2个参数:y的偏移量(从该图片第几行开始写入)
-
第3个参数:写入x的长度(从x的偏移量开始写几个像素)
-
第4个参数:写入y的长度(从第y行开始写几行)
完整代码
/**
* 更新图上的数据
*
* @param path
* @param col
* @param row
* @param newData
* @return
*/
public static Boolean updateRasterTiff(String path, Integer row, Integer col, Double newData) {
//注册栅格驱动
gdal.AllRegister();
gdal.SetConfigOption("gdal_FILENAME_IS_UTF8", "YES");
Dataset dataset = gdal.Open(path, gdalconst.GA_Update);
if (null == dataset) {
System.out.println("打开图像" + path + "失败");
return false;
}
//获取图像大小
int width = dataset.getRasterXSize();
int height = dataset.getRasterYSize();
Band band1 = dataset.GetRasterBand(1);
double[] doubleArr = new double[width];
for (int i = 0; i < height; i++) {
if (row == i) {
for (int j = 0; j < width; j++) {
if (col == j) {
//读取影像
band1.ReadRaster(0, row, width, 1, doubleArr);
doubleArr[j] = newData;
//写入影像
band1.WriteRaster(0, row, width, 1, doubleArr);
//使用FlushCache将数据写入文件
dataset.FlushCache();
System.out.println("数据集更新完成!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。");
return true;
}
}
}
}
System.out.println("未查询到"+row+"行"+col+"列");
return false;
}
执行效果
调用函数,将第5行第2列的像素点的值改为9.999(创建时默认为0)
updateRasterTiff("D:\\test.tif", 5, 2, 9.999);
![](https://img.haomeiwen.com/i1129597/e263e75980fee011.png)
网友评论