GDAL学习--------------1

来源:互联网 发布:阿里云 yum 安装nginx 编辑:程序博客网 时间:2024/05/21 17:57

            是时候学习一下GDAL了,找个地儿记录一下。

            当然,第一步,是要打开一张影像。首先 GDALAllRegister(),这个函数没有详细跟下去,主要就是注册GDAL所用到的一些驱动,说实话,不是很懂这个意思,这个问题待以后再仔细探究。

            GDAL提供打开影像数据的函数为GDALDatasetH CPL_STDCALL  GDALOpen( const char * pszFilename, GDALAccess eAccess ),这里的第二个参数是打开方式,GA_ReadOnly只读打开,GA_Update读写。这个函数的返回值为GDALDatasetH ,我喜欢把它强制转换为GDALDataset *,因为要用到大量GDALDataset 的方法,而使用GDALDatasetH 只提供了一些GDALDataset 的封装,不是很方便。一般写法:GDALDataset *pDataset = (GDALDataset *)GDALOpen("C:\\tif.tif", GA_ReadOnly).

    来看看这个函数:

GDALDatasetH CPL_STDCALL GDALOpen( const char * pszFilename, GDALAccess eAccess )
{
    return GDALOpenInternal(pszFilename, eAccess, NULL);
}


GDALDatasetH GDALOpenInternal( const char * pszFilename, GDALAccess eAccess,
                               const char* const * papszAllowedDrivers)
{
    GDALOpenInfo oOpenInfo( pszFilename, eAccess );
    return GDALOpenInternal(oOpenInfo, papszAllowedDrivers);
}


先看 GDALOpenInfo oOpenInfo( pszFilename, eAccess );

在此函数中,用到一个 _wstat64(const char *path, struct _stat64 *buffer);以前没用过这个函数,查了一下,这个函数就是获取文件的一些信息,比如文件大小。


然后是GDALDatasetH GDALOpenInternal( const char * pszFilename, GDALAccess eAccess,
                               const char* const * papszAllowedDrivers)

其中需要看看的是 poDS = poDriver->pfnOpen( &oOpenInfo );跟进去之后,会看到Identify(poOpenInfo),此函数是检查文件格式的。之后就是 hTIFF = VSI_TIFFOpen( pszFilename, "r+" )了(这里针对TIF),完全是使用了LibTif那一套,要理解这里,需要对TIF格式有一定的了解,作为一个门外汉,只能百度百度,参考 http://blog.csdn.net/goldeneyezhang/article/details/6149670 ,文章的主人也讲到了GeoTif的格式说明。


原创粉丝点击