GDAL C++ API 学习之路 大纲 持续更新

28 篇文章 11 订阅

官方文档:

GDALDriver C++ API — GDAL 文档

当使用GDAL库进行栅格数据集的处理和操作时,需要使用驱动程序(不同的栅格数据格式、数据库、遥感数据源等都需要不同的驱动程序)。在使用GDAL之前,需要通过GDALDriver函数将库中现有的驱动程序注册到当前进程中,这样才能在打开栅格数据集时使用这些驱动程序。

注意

我们学习的是C++的函数,但是C++也可调用C的函数,所以我会在对应函数后添加C的等效函数,具体的使用分析可以看:传送门

栅格接口 

注册驱动程序的意义

gdal的数据类型驱动注册的主要目的是让gdal能够识别和处理各种数据格式。每个驱动程序都指定了如何读写特定格式所需的算法和参数。通过注册这些驱动程序,gdal就能够识别和处理这些格式的数据,从而使用户能够方便地读写和转换各种地理空间数据格式。

注册驱动程序的意义在于扩展gdal的功能,支持更多种类的地理空间数据格式,从而满足不同用户的需求和应用场景。此外,注册驱动程序还可以提高gdal的性能和稳定性,确保它能够正常地读写和转换各种数据格式。

GDALDataset

GDALDataset它描述了一个图像数据集,包含一个或多个 GDALDriver 对象。在使用 GDAL 库进行图像数据处理时,GDALDataset 对象是最重要的对象之一,它代表了图像数据集,包含了图像的像素数据和其他相关信息

GDALDriver 和 GDALDataset的关系

GDALDriver 对象对于 GDALDataset 类的作用是打开和关闭图像处理设备,以便读取和修改图像文件的内容。如果没有 GDALDriver 对象,GDALDataset 对象将无法访问图像文件,也无法进行任何修改

GDALDriver提供了各种函数和工具,用于读取、修改、创建和管理图像文件。通过 GDALDataset 对象和 GDALDriver 对象的组合使用,可以方便地进行图像数据的处理和分析

GDALDriverManager:

第一章

GDALDataset:

第一章        第二章        第三章        第四章        第五章        第六章        第七章

GDALRasterBand:

第一章        第二章        第三章

矢量接口

  • OGRFeature是表示矢量数据中的要素(Feature)的对象,每个要素包含一个或多个属性和几何形状。OGRFeature可以从OGRLayer中读取或创建。
  • OGRLayer是表示矢量数据集中的图层(Layer)的对象,每个图层包含多个要素。OGRLayer可以从矢量数据集中读取或创建。
  • OGRGeometry是表示几何形状的对象,可以是点、线、面等。每个OGRFeature都有一个对应的OGRGeometry对象。
  • OGRFeatureStyle是表示要素样式的对象,包括线型、颜色、填充等信息。可以通过OGRLayer设置默认样式,也可以在OGRFeature中设置自定义样式。

GDALDataset和OGRLayer之间的关系

  • GDALDataset可以包含一个或多个OGRLayer对象,每个OGRLayer对象代表一个矢量图层。
  • OGRLayer对象保存在GDALDataset对象中,可以通过GDALDataset对象进行读取和编辑。

但要注意的是,GDALDataset和OGRLayer虽然都是用于处理矢量数据的对象,但它们处理的数据类型不同。GDALDataset主要处理栅格数据,而OGRLayer主要处理矢量数据。

OGRFeature与OGRGeometry的关系

如果一个 OGRFeature 对象表示一个点,则它可能包含一个 OGRGeometry 对象,该对象描述了该点的经纬度坐标

OGRFeature与OGRFeatureStyle的关系

OGRFeature 是 OGRFeatureStyle 的基础。每个 OGRFeatureStyle 都包含一个或多个 OGRFeature 对象,这些对象根据样式信息被格式化并绘制在地图上。OGRFeatureStyle 是一个模板,它定义了如何绘制地理对象。它包含一个或多个 OGRFeature 对象,以及颜色、边框、字体等样式信息。可以使用 OGRFeatureStyle 来定义和格式化地理数据绘图

OGRLayer:

第一章        第二章        第三章         第四章        第五章

OGRFeatureStyle:

OGRStyleTable      OGRStyleMgr       OGRStyleTool

OGRFeature

OGRFieldDomain

OGRFieldDomain 是 OpenGIS 库中的一个函数库,用于定义字段的范围和格式。它提供了多种方式来指定字段的数据类型、字符集、大小、默认值等信息,以便在创建 OGRFeature 对象时进行设置

关于范围的定义

虽然 OGRRangeFieldDomain 和 OGRCodedFieldDomain 都可以用于定义范围,但它们的应用场景略有不同。使用 OGRRangeFieldDomain 可以定义范围字段,例如日期范围或时间范围等;而使用 OGRCodedFieldDomain 可以定义编码字段的范围和格式,例如 SQL 编码的日期字段或 UTF-8 编码的字符串字段等。

OGRFeature:                                                                       

第一章       第二章        第三章       第四章        第五章         第六章          第七章         第八章                                                       

OGRField:                    传送门 

OGRFieldDomain:             传送门       

OGRCodedFieldDomain:   传送门   

OGRRangeFieldDomain:      传送门   

OGRGlobFieldDomain:  传送门

OGRFeatureDefn:

第一章        第二章        第三章

OGRFieldDefn: 

第一章        第二章        第三章

OGRGeomFiedlDefn:    传送门

几何类OGRGeometry:

所有几何类的抽象基类OGRGeometry

OGRGeometryFactory【1】        OGRGeometryFactory【2】

OGRGeometry【1】        OGRGeometry【2】        OGRGeometry 【3】        OGRGeometry 【4】        OGRGeometry【5】        OGRGeometry【6】


下面所有的几何类都是在OGRGeometry的基础上增加和重写了一小部分与图形特征要素相关的方法,就不一一进行代码举例,可以直接进入官方文档进行查看详细介绍和源代码

OGRCurve 类        

抽象曲线基类           OGRCurve        GDAL: OGRCurve Class Reference

OGRCompoundCurve:用于存储曲线集合的实用程序类        GDAL: OGRCompoundCurve Class Reference

OGRSimpleCurve:OGRLineString和 OGRCircularString  的抽象曲线基类        GDAL: OGRSimpleCurve Class Reference

OGRCircularString:圆绳的具体表示,即由一个或多个弧圆组成的曲线          OGRCircularString         GDAL:OGRCircularString 类引用

OGRLineString:多顶点线的具体表示             OGRLineString          GDAL: OGRLineString Class Reference

OGRLinearRing:闭环的具体表示                  OGRLinearRing         GDAL: OGRLinearRing Class Reference

​ 

OGRGeometryCollection 类

1 个或多个几何对象的集合        GDAL:OGRGeometryCollection 类参考

OGRMultiCurve:OGRCurve的集合        GDAL: OGRMultiCurve Class Reference

OGRMultiLineString:  OGRLineString 的集合          GDAL: OGRMultiLineString Class Reference

OGRMultiPoint:OGRPoint的集合          GDAL: OGRMultiPoint Class Reference

OGRMultiSurface:非重叠 OGRSurface 的集合                 GDAL: OGRMultiSurface Class Reference

OGRMultiPolygon:非重叠的 OGRPolygon 的集合          GDAL: OGRMultiPolygon Class Reference

OGRPoint 类

点类        GDAL:OGRPoint 类参考

OGRIteratedPoint:文档里有这个类,但是接口程序中没有        GDAL:OGRIteratedPoint 类引用

​ 

OGRSurface类

二维对象(如多边形或曲线多边形)的抽象基类        GDAL: OGRSurface Class Reference

OGRCurvePolygon:表示曲线多边形的具体类          GDAL:OGRCurvePolygon 类参考

OGRPolygon:表示多边形的具体类        GDAL: OGRPolygon Class Reference

OGRTriangle:三角类            GDAL: OGRTriangle Class Reference

OGRPolyhedralSurface:多面体面类                   GDAL:OGRPolyhedralSurface 类参考

OGRTriangulatedSurface:三角形曲面类            GDAL: OGRTriangulatedSurface Class Reference

​ 

空间参考系统 接口

Spatial Reference System类

在 GDAL/OGR 中,空间参考系统由 OGRSpatialReference 类来表示。OGRSpatialReference 类提供了一系列的成员函数,用于导入、导出和操作空间参考系统。该类支持各种常见的地理和投影坐标系统,包括经纬度坐标系(如WGS 84)、UTM投影、墨卡托投影等

OGRSpatialReference子类

 

第一章(导出)                第二章(导入)                第三章(获取与设置)                第四章(获取与设置)                第五章(获取与设置)

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GDAL开发手册API详细说明,内含详细示例代码,适合初学者使用,非常棒的入门书!In pythe Import go from gdalconst import s datasct-gdal. Open( filename, GA ReadOnly if dataset is none 如果 GDALOpen(函数返回NUL则表示打开失败,同时 CPLError(函数产生 相应的错误信息。如果您需要对错误迂行处理可以参考 CPLError相关文档 通常情况下,所有的GDAL函数都通过 CPLError(报告错误。另外需要注意的 是 pszFilename并不一定对应一个实际的文件名(当然也可以就是一个文件 名)。它的具休解释由相应的驱动程序负责。它可能是一个URL,或者是文件 名以后后面带有许多用于控制打开方式的参数。通常建议,不要在打开文件的 选择对话框中对文件的类型做太多的限制。 1.2.获取 Dataset信息 如果GL数据模型一节所描述的,一个 GDALDataset包含了光栅数据的一系列 的泼段信息。同时它还包含元数据、一个坐标系统、投影类型、光枥的大小以 及其他许多信息。 dfGeotransform[0]/米左上角x*/ dfGeoTrans lori[1]/东西方向一个像素对应的距离*/ adfGeotransform[2]/米旋转,0表示上面为北方 adfGeotransform[3]米左上角y*/ adfGeotrans form[4]/*旋转,0表示上面为北方米/ adfGeoTransform[5]/*南北方向一个像素对应的距离*/ 如果需要输出 dataset的基木信息,可以这样: In c+t adfGcotransform[6] printf( Driver: %s/%s\n poDataset->GetDriver(->GetDescription o poDataset->GetDriver()->GetMetadataltem( GDAL DMD LONGNAME)) printr( Size is %dx%dx%d\n poDataset->GetRasterXSizeo, poDataset->GetRasterYSize( poDataset->GetRasterCounto) if( poDataset->GetProjectionRef(!= NULL printf( Projection is %s'n poDataset->GetProjectionRef() if( poDataset->GetGeoTransform( adfGeoTransform one printf( Origin=(%. 6f, %. 6f)\n adfGeoTransform[01, adfGeoTrans form[3]) printf(Pixel Size=(%. 6f, %. 6f)\n adfGcoTransform[1, adfGco Transform[5 In c GDALDriverh dRiver double adfGeoTransform[6] hDriver- GDALGctDatasctDriver( hDatasct printf( Driver: %s /%s\n GDALGetDriver ShortName( hDriver GDALGetDriverlongName ( dRiver)) printf size is %dx%dx%d\n GDALGetRasterXSize( hDataset GDALGetRasterYSize( dAtaset GDALGetRasterCount( hDataset)) if( GDALGetProjectionRef( hDataset )! -NULL printf( Projection is %s\n GDALGetProjectionRef( dAtaset )) if( GDALGetGeoTransform( hDataset, adfGeoTransform )==CE None printf( Origin =(9%.6f, %.6f)\n adfGeo Transform[01, adfGeo Transform[3]) printf( pixel Size=(%. 6f, %.6f)\n adfGeoTransform[1, adfGeoTrans form[5) In Python print Driver:', dataset GetDriver(. ShortName, /', dataset. Get Driver(. Lon
GDAL是一个功能强大的地理数据抽象库,用于读取、写入和处理各种栅格数据格式。在使用GDAL提取NDVI(归一化植被指数)时,我们可以按照以下步骤进行操作。 首先,我们需要引入GDAL库,并声明需要使用的数据集和波段。 ``` #include "gdal_priv.h" #include "cpl_conv.h" int main() { //声明需要使用的数据集和波段 GDALDatasetH hDataset; GDALRasterBandH hRedBand, hNirBand; //... return 0; } ``` 接下来,我们需要打开影像文件,并获取红光和近红外波段。 ``` hDataset = GDALOpen("input_image.tif", GA_ReadOnly); hRedBand = GDALGetRasterBand(hDataset, 1); hNirBand = GDALGetRasterBand(hDataset, 2); ``` 然后,我们需要读取红光和近红外波段的数据,并计算NDVI。 ``` int width = GDALGetRasterBandXSize(hRedBand); int height = GDALGetRasterBandYSize(hRedBand); float* redData = (float*) CPLMalloc(sizeof(float)*width*height); float* nirData = (float*) CPLMalloc(sizeof(float)*width*height); GDALRasterIO(hRedBand, GF_Read, 0, 0, width, height, redData, width, height, GDT_Float32, 0, 0); GDALRasterIO(hNirBand, GF_Read, 0, 0, width, height, nirData, width, height, GDT_Float32, 0, 0); float* ndviData = (float*) CPLMalloc(sizeof(float)*width*height); for (int i = 0; i < width*height; i++) { if (redData[i] + nirData[i] == 0) { ndviData[i] = 0; } else{ ndviData[i] = (nirData[i] - redData[i]) / (nirData[i] + redData[i]); } } ``` 最后,我们可以将计算得到的NDVI数据保存到新的影像文件中。 ``` GDALDriverH hDriver = GDALGetDriverByName("GTiff"); GDALDatasetH hOutputDataset = GDALCreateCopy(hDriver, "output_ndvi.tif", hDataset, 0, NULL, NULL, NULL); GDALRasterBandH hOutputBand = GDALGetRasterBand(hOutputDataset, 1); GDALRasterIO(hOutputBand, GF_Write, 0, 0, width, height, ndviData, width, height, GDT_Float32, 0, 0); ``` 上述代码片段展示了如何使用GDAL C API提取NDVI。通过逐像素计算红光和近红外波段之间的比值,我们可以得到NDVI并将其保存为新的栅格影像文件output_ndvi.tif。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

场主不吃鍋巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值