GDAL开发
sf2gis@163.com
2015年2月6日
1 目的:利用gdal库操作影像数据
2 原理:使用统一的基类,根据不同的功能,扩展子类。
由Driver将各种格式转换为统一的操作接口,使用Dataset操作文件,使用RasterBand操作波段数据,使用DriverManager操作Driver。
3 方法
3.1 统一基类:GDALMajorObject
1) 自身描述:GetDescription(),数据集返回其名称,波段返回其描述。
2) 元数据键值对列表:GetMatadata()。键值对信息。字符串列表,最后字符串为NULL,不能释放。
示例:
DCAP_CREATE=YES
DCAP_CREATECOPY=YES
DCAP_VIRTUALIO=YES
DMD_CREATIONDATATYPES=ByteUInt16 Int16 UInt32 Int32 Float32 Float64 CInt16 CInt32 CFloat32 CFloat64
DMD_CREATIONOPTIONLIST=<CreationOptionList> <Option name='COMPRESS'type='string-select'> <Value>NONE</Value> <Value>LZW</Value> <Value>PACKBITS</Value> <Value>JPEG</Value> <Value>CCITTRLE</Value> <Value>CCITTFAX3</Value> <Value>CCITTFAX4</Value> <Value>DEFLATE</Value> </Option> <Option name='PREDICTOR' type='int'description='Predictor Type'/> <Option name='JPEG_QUALITY' type='int' description='JPEG quality1-100' default='75'/> <Optionname='ZLEVEL' type='int' description='DEFLATE compression level 1-9'default='6'/> <Optionname='NBITS' type='int' description='BITS for sub-byte files (1-7), sub-uint16(9-15), sub-uint32 (17-31)'/> <Option name='INTERLEAVE' type='string-select'default='PIXEL'> <Value>BAND</Value> <Value>PIXEL</Value> </Option> <Optionname='TILED' type='boolean' description='Switch to tiled format'/> <Option name='TFW' type='boolean'description='Write out world file'/> <Option name='RPB' type='boolean' description='Write out .RPB (RPC)file'/> <Option name='BLOCKXSIZE'type='int' description='Tile Width'/> <Option name='BLOCKYSIZE' type='int' description='Tile/StripHeight'/> <Optionname='PHOTOMETRIC' type='string-select'> <Value>MINISBLACK</Value> <Value>MINISWHITE</Value> <Value>PALETTE</Value> <Value>RGB</Value> <Value>CMYK</Value> <Value>YCBCR</Value> <Value>CIELAB</Value> <Value>ICCLAB</Value> <Value>ITULAB</Value> </Option> <Option name='SPARSE_OK' type='boolean'description='Can newly created files have missing blocks?'default='FALSE'/> <Optionname='ALPHA' type='string-select' description='Mark first extrasample as beingalpha'> <Value>NON-PREMULTIPLIED</Value> <Value>PREMULTIPLIED</Value> <Value>UNSPECIFIED</Value> <ValuealiasOf='NON-PREMULTIPLIED'>YES</Value> <ValuealiasOf='UNSPECIFIED'>NO</Value> </Option> <Optionname='PROFILE' type='string-select' default='GDALGeoTIFF'> <Value>GDALGeoTIFF</Value> <Value>GeoTIFF</Value> <Value>BASELINE</Value> </Option> <Option name='PIXELTYPE'type='string-select'> <Value>DEFAULT</Value> <Value>SIGNEDBYTE</Value> </Option> <Optionname='BIGTIFF' type='string-select' description='Force creation of BigTIFFfile'> <Value>YES</Value> <Value>NO</Value> <Value>IF_NEEDED</Value> <Value>IF_SAFER</Value> </Option> <Option name='ENDIANNESS'type='string-select' default='NATIVE' description='Force endianness of createdfile. For DEBUG purpose mostly'> <Value>NATIVE</Value> <Value>INVERTED</Value> <Value>LITTLE</Value> <Value>BIG</Value> </Option> <Optionname='COPY_SRC_OVERVIEWS' type='boolean' default='NO' description='Force copyof overviews of source dataset (CreateCopy())'/> <Option name='SOURCE_ICC_PROFILE'type='string' description='ICC profile'/> <Option name='SOURCE_PRIMARIES_RED' type='string'description='x,y,1.0 (xyY) red chromaticity'/> <Option name='SOURCE_PRIMARIES_GREEN'type='string' description='x,y,1.0 (xyY) green chromaticity'/> <Option name='SOURCE_PRIMARIES_BLUE'type='string' description='x,y,1.0 (xyY) blue chromaticity'/> <Option name='SOURCE_WHITEPOINT'type='string' description='x,y,1.0 (xyY) whitepoint'/> <Optionname='TIFFTAG_TRANSFERFUNCTION_RED' type='string' description='Transferfunction for red'/> <Optionname='TIFFTAG_TRANSFERFUNCTION_GREEN' type='string' description='Transferfunction for green'/> <Optionname='TIFFTAG_TRANSFERFUNCTION_BLUE' type='string' description='Transferfunction for blue'/> <Optionname='TIFFTAG_TRANSFERRANGE_BLACK' type='string' description='Transfer rangefor black'/> <Option name='TIFFTAG_TRANSFERRANGE_WHITE'type='string' description='Transfer range forwhite'/></CreationOptionList>
DMD_EXTENSION=tif
DMD_HELPTOPIC=frmt_gtiff.html
DMD_LONGNAME=GeoTIFF
DMD_MIMETYPE=image/tiff
DMD_SUBDATASETS=YES
3) 元数据域列表:GetMetadataDomainList()。需要释放。应该使用CPLStringList()进行自动管理,不要直接使用char **。
示例:参见:数据集:GDALDataset示例。
3.2 数据
目标:模拟影像数据。
原理:一个数据集代表一个影像,包含坐标系统、文件信息,由波段数据组成。
方法:
3.2.1 数据集:GDALDataset
表示单一影像文件。
3.2.1.1 数据集操作
1) 所有打开的数据集:GetOpenDatasets()。
2) 打开数据集:GDALOpen()。由于影像是文件,打开之后一定要关闭。不能使用delete释放。
3) 关闭数据集:GDALClose()。
3.2.1.2 文件信息:GetDriver(),GetFileList(),GetInternalHandle()。
1) 数据操作:RasterIO(),FlushCache()。
CPLErr GDALDataset::RasterIO |
( |
eRWF |