编辑: 丶蓶一 2019-07-15
第一部分:GDAL DEVELOPER GUIDE 翻译:柴树杉(chaishushan@gmail.

com) 原文:http://www.gdal.org/gdal_tutorial.html GDAL API入门 打开文件 在打开GDAL所支持的光栅数据之前需要注册驱动.这里的驱动是针对GDAL支持的所有 数据格式.通常可以通过调用 GDALAllRegister() 函数来注册所有已知的驱动,同时 也包含那些用 GDALDriverManager::AutoLoadDrivers() 从.so文件中自动装载驱动. 如果程序需要对某些驱动做限制,可以参考 gdalallregister.cpp 代码. 当驱动被注册之后,我们就可以用 GDALOpen() 函数来打开一个数据集.打开的方式 可以是 GA_ReadOnly 或者 GA_Update. In C++: #include gdal_priv.h int main() { GDALDataset *poDataset;

GDALAllRegister();

poDataset = (GDALDataset *) GDALOpen( pszFilename, GA_ReadOnly );

if( poDataset == NULL ) { ...;

} In C: #include gdal.h int main() { GDALDatasetH hDataset;

GDALAllRegister();

hDataset = GDALOpen( pszFilename, GA_ReadOnly );

if( hDataset == NULL ) { ...;

} In Python: import gdal from gdalconst import * dataset = gdal.Open( filename, GA_ReadOnly ) if dataset is None: ... 如果 GDALOpen() 函数返回NULL则表示打开失败,同时 CPLError() 函数产生相应的错误信息. 如果您需要对错误进行处理可以参考 CPLError() 相关文档.通常情况下,所有的 GDAL函数都通过CPLError()报 告错误.另外需要注意的是pszFilename并不一定对应一个 实际的文件名(当然也可以就是一个文件名).它的具体解释由相应的驱动程序负责. 它可能是一个URL,或者是文件名以后后面带有许多用于控制打开方式的参数.通常建议, 不要在打开文件的选择对话框中对文件的类型做太多的限制. 获取Dataset信息 如果GDAL数据模型一节所描述的,一个GDALDataset包含了光栅数据的一系列的波段信息. 同时它还包含元数据、一个坐标系统、投影类型、光栅的大小以及其他许多信息. adfGeoTransform[0] /* 左上角 x */ adfGeoTransform[1] /* 东西方向一个像素对应的距离 */ adfGeoTransform[2] /* 旋转, 0表示上面为北方 */ adfGeoTransform[3] /* 左上角 y */ adfGeoTransform[4] /* 旋转, 0表示上面为北方 */ adfGeoTransform[5] /* 南北方向一个像素对应的距离 */ 如果需要输出dataset的基本信息,可以这样: In C++: double adfGeoTransform[6];

printf( Driver: %s/%s\n , poDataset->

GetDriver()->

GetDescription(), poDataset->

GetDriver()->

GetMetadataItem( GDAL_DMD_LONGNAME ) );

printf( Size is %dx%dx%d\n , poDataset->

GetRasterXSize(), poDataset->

GetRasterYSize(), poDataset->

GetRasterCount() );

if( poDataset->

GetProjectionRef() != NULL ) printf( Projection is `%s'

\n , poDataset->

GetProjectionRef() );

if( poDataset->

GetGeoTransform( adfGeoTransform ) == CE_None ) { printf( Origin = (%.6f,%.6f)\n , adfGeoTransform[0], adfGeoTransform[3] );

printf( Pixel Size = (%.6f,%.6f)\n , adfGeoTransform[1], adfGeoTransform[5] );

} In C: GDALDriverH hDriver;

double adfGeoTransform[6];

hDriver = GDALGetDatasetDriver( hDataset );

printf( Driver: %s/%s\n , GDALGetDriverShortName( hDriver ), GDALGetDriverLongName( hDriver ) );

printf( Size is %dx%dx%d\n , GDALGetRasterXSize( hDataset ), GDALGetRasterYSize( hDataset ), GDALGetRasterCount( hDataset ) );

if( GDALGetProjectionRef( hDataset ) != NULL ) printf( Projection is `%s'

\n , GDALGetProjectionRef( hDataset ) );

if( GDALGetGeoTransform( hDataset, adfGeoTransform ) == CE_None ) { printf( Origin = (%.6f,%.6f)\n , adfGeoTransform[0], adfGeoTransform[3] );

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题