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