【GIS】栅格图像更新(Tiff)

作者: OQOooo | 来源:发表于2022-06-05 17:59 被阅读0次

    主要函数

    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);
    
    image.png

    相关文章

      网友评论

        本文标题:【GIS】栅格图像更新(Tiff)

        本文链接:https://www.haomeiwen.com/subject/wzukmrtx.html