Gdal之列出栅格数据信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gdal之列出栅格数据信息相关的知识,希望对你有一定的参考价值。

参考技术A 1). 语法:

gdalinfo [--help-general] [-json] [-mm] [-stats] [-hist] [-nogcp] [-nomd]

         [-norat] [-noct] [-nofl] [-checksum] [-proj4]

         [-listmdd] [-mdd domain|`all`]* [-wkt_format WKT1|WKT2|...]

         [-sd subdataset] [-oo NAME=VALUE]* datasetname

2).示例 :

案例:获取栅格数据信息

场景: 想要获取 data.tif 格式数据的信息【获取栅格信息】

脚本:gdalinfo.exe data.tif

参考:https://www.osgeo.cn/gdal/programs/gdalinfo.html

GDAL库——读取图像并提取基本信息

GDAL库是一个跨平台的栅格地理数据格式库,包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据。这里有GDAL库支持的格式:http://www.gdal.org/formats_list.html

注:本文在Qt开发环境下使用GDAL库。

在Qt中使用GDAL库时,除了要加gdal_priv.h头文件外,还需要在xxx.pro文件内加上LIBS += -lgdal ,文件用可编辑的文档打开。

使用GDAL时首先对文件格式进行注册,这里我们对所有支持的文件安格式进行注册:GDALAllRegister()

注册后用数据集对象指向打开的数据文件,就实现了数据的读取,如下:

技术分享
    GDALAllRegister();    
    GDALDataset *poDataset;
QString filename;
filename=QFileDialog::getOpenFileName(this,
tr("Choose Images"),
tr("All Fles (*.*)"));
//Open the image
QByteArray ba = filename.toLatin1();
poDataset = (GDALDataset*) GDALOpen( ba.data(),GA_ReadOnly );
技术分享

注意上面还需要将QString转化为char*类型,以保证函数参数类型一致。

1.获取图像的基本信息

采用GDAL读取图像成功后,可以获取图像的一些基本信息,如下:

描述信息:const char*  GDALDataset::GetDriver()->GetDescription(),通常是图像的格式

图像大小:  图像宽度  int  GDALDataset::GetRasterXSize()

                   图像高度  int   GDALDataset::GetRasterYSize()

波段数:int   GDALDataset::GetRasterCount()     波段数即图像每个像素点所含的颜色种类,物理中的光学中学过颜色就是某频率的光波。波段少则一个,多则很多个,在遥感影象中波段通常有多个。

投影信息:GDALDataset::GetProjectionRef()    有的图像没有投影信息,不如一般的JPG、BMP格式图像。

地理坐标信息:double adfGeoTransform[6]   

                        GDALDataset::GetGeoTransform(adfGeoTransform)

                 地理坐标信息是一个含6个double型数据的数组,adfGeoTransform[1]和adfGeoTransform[5]表示东西和南北方向一个像素对应的距离,adfGeoTransform[0]和adfGeoTransform[3]表示左上角的坐标。

波段信息:数据集中重要的信息,有波段尺寸、数据类型、颜色信息等。

           获取波段的方法: GDALRasterBand *poBand;

                                 poBand = poDataset->GetRasterBand(i)     poBand为指向第i个波段的指针

波段尺寸:int   poBand->GetXSize()

                 int   poBand->GetYSize()

数据类型:const char*   GDALGetDataTypeName(poBand->GetRasterDataType())    

颜色信息:const char*   GDALGetColorInterpretationName(poBand->GetColorInterpretation())

2. 将读取的图像信息显示出来

上面了解了GDAL获得图像数据信息的方法,接下来就在Qt中对数据信息进行显示

QString strImgInfo;
QString strImgFormat =
poDataset->GetDriver()->GetDescription();
strImgInfo.append(tr("Descreption: ")+strImgFormat+"\n");

类似上面这样,Qt中的QString类有类似于向量的功能,可以用append函数再字符串后面添加新的字符串

信息获取完后显示:ui->label->setText(strImgInfo);

以上是关于Gdal之列出栅格数据信息的主要内容,如果未能解决你的问题,请参考以下文章

Gdal之栅格数据等高线

GDAL聊聊GDAL的数据模型

GDAL库——读取图像并提取基本信息

GDALGDAL栅格数据结构学习笔记: 关于Metadata

栅格数据裁剪

py#gdal写入栅格的问题