GDAL影像数据(tiff)裁剪并进行投影坐标转换(Java实现)

需求:对tiff文件进行按经纬度范围裁剪,在内存中裁剪,而gdal.Warp只能根据输入的shp文件进行裁剪。

网上很多对影像数据进行裁剪是用in_band.ReadAsArray(offx, offy, xsize, ysize)把数据读到内存,再用out_ds.GetRasterBand(1).WriteArray(out_band)将数据写到新的dataset,再用gdal.Translate出图,但是查了官方文档,ReadAsArray和WriteArray两个方法只有python才有,java没有这两个方法,java只能用ReadRaster和WriteRaster按行读写,这样效率极低。由于影像数据tiff一般都很大,所以急需一种效率高的影像裁剪方法。

经研究,gdal.Translate提供"-projwin"参数来指定左上角和右下角的坐标,"-projwin_srs"参数对裁剪坐标进行坐标转换,"-outsize"参数对影像进行像素压缩,直接上代码:

        // 使用Translate出图
        Vector vector = new Vector();
        vector.add("-of");
        vector.add("PNG");
        vector.add("-ot");
        vector.add("Byte");
        vector.add("-scale");
        vector.add("-outsize");
        vector.add(sizeX);
        vector.add(sizeY);
        vector.add("-projwin");
        vector.add(bbox.getXMin()+"");
        vector.add(bbox.getYMax()+"");
        vector.add(bbox.getXMax()+"");
        vector.add(bbox.getYMin()+"");
        if (StringUtils.hasText(bboxSR)){
            vector.add("-projwin_srs");
            vector.add("EPSG:"+bboxSR);
        }
        TranslateOptions options = new TranslateOptions(vector);
        gdal.Translate(output,ds,options);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值