当前位置: 代码迷 >> 综合 >> GDAL 数据模型
  详细解决方案

GDAL 数据模型

热度:42   发布时间:2024-01-21 04:00:52.0

GDAL 数据模型

sf2gis@163.com

2012年1月19日

1  概述

GDAL:geospatial dataabstraction library(地理数据抽象库)。

用于将各种栅格数据转换为统一的抽象格式。

OGR:OpenGIS SimpleFeatures Reference Implementation(开源GIS简单元素参考实现)。

用于将各种矢量数据转换为统一的抽象格式。

CPL:common portabilitylibrary。通用可移植库。

用于针对不同OS声明的通用定义。

GDAL按照波段为操作单位,每个波段操作完成后再操作其它波段。

参考:http://www.baike.com/wiki/CPL

2  api

2.1 CPL

CSLFetchBoolean():获取CPL String List中的属性值boolean。

CSLSetNameValue():设置键值对。

CPLMalloc():申请内存。

2.1.1GDALProgressFunc:进度回调函数。

定义:

int (CPL_STDCALL *GDALProgressFunc)(double dfComplete,const char *pszMessage, void *pProgressArg);

dfComplete:表示当前完成的进度(0~1之间的小数)。

pszMessage:字符串消息,通常为NULL

pProgressArg:CreateCopy传递过来的参数。

返回值:TRUE/FALSE返回当前状态,如果需要终止当前操作,则返回FALSE,程序中断,返回TRUE,正常执行。

2.2 GDAL

GDALAllRegister():加载所有驱动。

GDALOpen():打开数据集。打开方式有GA_READONLY/GA_UPDATE。

GDALClose():关闭数据集。

GDALGetRasterDataTypeName():返回枚举值表示的像素大小。

GDALGetColorInterpretationName():返回枚举值表示的颜色类型。

GDALComputeRasterMinMax():计算当前图像波段像素值的最大值、最小值。

GDALReadBlock():读取波段内的块数据。

GetGDALDriverManager():获取GDALDriverManager类的单例。

2.3 WARP

用于高效的图形变换,以及大数据操作。包含一组重采样方法及一组Mask方法(GDALTransformerFunc函数族)。

使用方法:

使用GDALWarpOptions类设置操作的相关参数。

使用GDALWarpOperation类执行变换操作(需要使用GDALWarpOptions作为参数)。

2.3.1 GDALWarpOptions

hSrcDS:源数据集。

hDstDS:目标数据集。

nBandCount:波段数。

panSrcBand/panDstBand:源数据集、目标数据集波段排列。必须使用CPLMalloc在DLL内部申请(因为后面要调用GDALDestroyWarpOptions()的时候要释放,如果使用了外部内存,会出现错误)。如:(int*)CPLMalloc(sizeof(int)*3)

pfnProcess:进度回调函数指针。参见2.1.1。

pTransformerArg:为转换函数pFuncTransformer准备参数。需要一组参数列表。使用GDALCreateGenImgProjTransformer(),GDALCreateReprojectionTransformer(),GDALCreateGCPTransformer(),GDALCreateApproxTransformer()可以创建参数。

pFuncTransformer:转换函数指针。用于将输入和输出进行转换。这是图形变换的主要功能。有部分预定义函数可供使用,也可以自己定义。声明类型为

typedef int(*GDALTransformerFunc)( void *pTransformerArg,

                        int bDstToSrc, intnPointCount,

                        double *x, double *y,double *z, int *panSuccess );

2.3.2 GDALCreateGenImgProjTransformer()和GDALGenImgProjTransform()

创建GeneralImage Project Transform参数。为函数GDALGenImgProjTransform()的函数列表。

GDALGenImgProjTransform():用于进行源图像和目标图像之间的投影变换。变换过程为:Image图像转换为带有源坐标系统的Map,将Map的源坐标系统转换为目标目标系统,将目标坐标系统转换为目标图像。

在转换为的过程中,使用坐标系统,使用GeoTransform()6参数,如果没有,则使用GCP。

void*GDALCreateGenImgProjTransformer   (   GDALDatasetH    hSrcDS,

const char *    pszSrcWKT,

GDALDatasetH    hDstDS,

const char *    pszDstWKT,

int     bGCPUseOK,//TRUE:use gcp if no wkt

double dfGCPErrorThreshold,//ErrorThreshhold

int     nOrder  //GCP maxmum order

)          

2.3.3 GDALWarpOperation

用于执行变换。

Initialize():加载参数。

ChunkAndWarpImage():变换函数。

ChunkAndWarpMulti():多线程变换。

2.4 OGR

2.5 SpatialReference

2.6 DriverImplement

3  数据集GDALDataset

GDAL数据集,表示栅格图像的集合,通常是一个图像文件(及其相同的文件)。

3.1 成员函数

GDALDataset::GetGeoTransform():获取坐标转换参数(与worldfile文件格式相同,参见:..\..\GIS\worldfile.docx)。

GetRasterBand(index):获取影像波段。index的基数是1。

GetRasterCount():波段数。

GetRasterXSize()/GetRasterYSize():x和y方法像素数目。

GetProjectionRef():Proj格式的投影信息。

GetGeoTransform():获取仿射变换的参数。

3.1.1 RasterIO

3.1.1.1  定义

CPLErr GDALDataset::RasterIO

(

GDALRWFlag 

eRWFlag,

int 

nXOff,

int 

nYOff,

int 

nXSize,

int 

nYSize,

void * 

pData,

int 

nBufXSize,

int 

nBufYSize,

GDALDataType 

eBufType,

int 

nBandCount,

int * 

panBandMap,

int 

nPixelSpace,

int 

nLineSpace,

int 

nBandSpace

 

)

 

RasterIO(RWFlage,left,top,width,height,pBuf,dstWidth,dstHeight,type,bandCount,pixelSpace,lineSpace,bandSpace):操作Raster。可以同时操作多个波段。

eRWFlag读写标志

nXOff左上角X(读取图像的X起点)

nYOff左上角Y(读取图像的Y起点)

nXSize读取宽度

nYSize读取高度

pData