GDAL建立GeoTIFF金字塔文件

9 篇文章 5 订阅

gdal中的工具gdaladdo.exe,可以为大多数支持的格式建立或者重建(内)金字塔,可以使用几种重采样算法来进行重采样操作。

一、gdaladdo使用说明

用法:

gdaladdo [-r {nearest,average,gauss,cubic,cubicspline,lanczos,average_mp,average_magphase,mode}]
                [-ro] [-clean] [-q] [-oo NAME=VALUE]* [-minsize val]
                [--help-general] filename [levels]

参数:

  • -r : {nearest,average,gauss,cubic,cubicspline,lanczos,average_mp,average_magphase,mode} 重采样算法。默认nearest。
  • -ro : 以只读模式打开文件,创建外金字塔文件(特别是GeoTIFF格式)。
  • -clean : 移除金字塔数据。
  • -q : 关闭进度显示。
  • -b : 创建指定波段的金字塔。(如不指定,创建所有波段)
  • filename : 要建立金字塔的文件名。
  • levels : 要建立金字塔的层号的列表。(使用-clean,此选项忽略)

配置参数 :

  • –config USE_RRD YES : 创建Erdast (.aux)的图像格式的金字塔文件,可以直接在Erdas中或ArcGIS中使用.

下面配置参数,仅GeoTIFF格式的外部金字塔时可用。

  • –config COMPRESS_OVERVIEW {JPEG,LZW,PACKBITS,DEFLATE} : TIFF compression
  • –config PHOTOMETRIC_OVERVIEW {RGB,YCBCR,…} : TIFF photometric interp.
  • –config INTERLEAVE_OVERVIEW {PIXEL|BAND} : TIFF interleaving method
  • –config BIGTIFF_OVERVIEW {IF_NEEDED|IF_SAFER|YES|NO} : is BigTIFF used

使用例子:

 gdaladdo -r average abc.tif
 gdaladdo -r average abc.tif 2 4 8 16
 gdaladdo --config COMPRESS_OVERVIEW JPEG
          --config PHOTOMETRIC_OVERVIEW YCBCR
          --config INTERLEAVE_OVERVIEW PIXEL -ro abc.tif

二、java调用jdal.jar实现

jdal.jar 可以下载编译好的jar及dll

主要调用Dataset的BuildOverviews方法即可。
MyCallback是一个处理的回调class,通过调用run方法通知处理进度。

import org.apache.log4j.Logger;
import org.gdal.gdal.*;
import org.gdal.gdalconst.gdalconstConstants;

/**
 * 生成金字塔
 */
public class GDALBuildOverview {
    private static final Logger logger = Logger.getLogger(GDALBuildOverview.class);

    public static void main(String[] args) {
        String fileName_tif = "D:\\test\\dem.tif";
        gdal.AllRegister();

        Dataset hDataset = gdal.Open(fileName_tif, gdalconstConstants.GA_ReadOnly);
        if (hDataset == null) {
            System.err.println("GDALOpen failed - " + gdal.GetLastErrorMsg());
            System.exit(1);
        }

        int bandNum = hDataset.getRasterCount();
        logger.info("RasterCount is " + bandNum);
        
        hDataset.BuildOverviews("average", new int[]{2, 4, 8, 16}, new BuildCallback());
        hDataset.delete();
        
        gdal.GDALDestroyDriverManager();
        logger.info("completed");
    }

}

class BuildCallback extends ProgressCallback {
    private static final Logger logger = Logger.getLogger(BuildCallback.class);
    public BuildCallback() {
    }
    
    @Override
    public int run(double dfComplete, String pszMessage) {
        if (pszMessage != null) {
            logger.info(String.format("%s", pszMessage));
        }
        System.out.print(String.format("%.2f%%\r", dfComplete * 100));
        return 1;
    }
}

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
语言的好处及其适用范围 C语言是一种非常流行的编程语言,同时又是一种非常灵活和高效的语言,其应用范围广泛。下面我们就一起来看看使用C语言的好处及其适用范围。 C语言的好处: 1.高效性:C语言是一种非常高效的编程语言,其执行速度比大多数其他编程语言快很多,因此对于需要进行处理大量数据和进行复杂计算的场景非常适合。 2.灵活性:C语言提供了非常多的工具和函数,同时又支持用户自定义函数和数据类型,因此可以让程序员根据自己的需要编写出非常灵活的程序。 3.可移植性:C语言可以在不同的操作系统和硬件平台上运行,因此可以让程序更加通用和适用于不同的计算环境。 4.易于学习:C语言的语法相对简单,模块化和结构化编程风格易于理解,因此入门门槛较低,易于学习。 C语言的适用范围: 1.系统软件开发:C语言由于其高效性和可移植性的特点,其广泛用于系统软件开发中,如操作系统、编译器等。 2.嵌入式系统开发:C语言在嵌入式系统开发中也非常流行,其可以用于编写驱动程序、操作系统、网络协议栈等等。 3.科学计算:C语言的执行速度非常快,其广泛用于科学计算领域,如数值分析、机器学习等等。 4.游戏开发:C语言由于其高效性,非常适合用于游戏开发中,其可以用于编写游戏引擎、游戏物理引擎等。 总之,使用C语言可以带来高效、灵活、可移植等多种好处,其可以应用于不同领域的开发工作中。当然,C语言也有其缺点,如容易出错、内存管理较为复杂等,因此使用C语言的开发人员需要具备一定的编程和操作系统相关知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值