GDALSetProjection 简述

GDALSetProjection是用来给GDALDataset设定投影信息(坐标系统)的接口,实际上是GDALDataset::SetProjection这个虚函数的转调而已。官网文档描述如下:

**CPLErr GDALDataset::SetProjection (const char * pszProjection ) **

Set the projection reference string for this dataset.

The string should be in OGC WKT or PROJ.4 format. An error may occur because of incorrectly specified projection strings, because the dataset is not writable, or because the dataset does not support the indicated projection. Many formats do not support writing projections.

This method is the same as the C GDALSetProjection() function.

Parameters

pszProjection projection reference string.

Returns

CE_Failure if an error occurs, otherwise CE_None.

按照这里描述的,传入的参数可以是OGC WKT或者PROJ.4格式的字符串,但是可能在写入坐标系信息的时候发生错误,因为数据集不可写。或者数据集不支持对应的坐标系,很多格式不支持写入。

注意事项

这里要说的就是这个函数使用的时候要注意的地方,因为这是一个虚函数,在基类GDALDataset中的定义是直接返回CE_Failure的,派生出的各个格式有自己的实现。

因为每个派生出的格式对SetProjection的实现可能都不一致,所以这里使用的时候就需要根据不同的格式传入不同的参数。

例如GTiff就不支持PROJ.4格式的字符串,只能是OGC WKT格式的。

又比如,MBTiles格式支持EPSG:3857,其他的就不支持了。

又比如,NTIF格式,也仅支持WKT格式字符串传入,且只支持WGS84地理坐标或者UTM投影坐标。

OGC出的GeoPackage格式是支持最好的,支持各种用户输入格式,支持各种坐标系,几乎没有限制。

HDF4格式就很简单粗暴了,不做任何验证,传入什么就复制什么.

下面贴出GTiffMBTiles两种格式对SetProjection的实现。

GDALDataset::SetProjection

CPLErr GDALDataset::SetProjection( CPL_UNUSED const char *pszProjection )
{
if( !(GetMOFlags() & GMO_IGNORE_UNIMPLEMENTED) )
ReportError(CE_Failure, CPLE_NotSupported,
"Dataset does not support the SetProjection() method.");
return CE_Failure;
}

GTiffDataset::SetProjection

CPLErr GTiffDataset::SetProjection( const char * pszNewProjection )

{
if( bStreamingOut && bCrystalized )
{
CPLError(
CE_Failure, CPLE_NotSupported,
"Cannot modify projection at that point in "
"a streamed output file" );
return CE_Failure;
} LoadGeoreferencingAndPamIfNeeded();
LookForProjection(); if( !STARTS_WITH_CI(pszNewProjection, "GEOGCS")
&& !STARTS_WITH_CI(pszNewProjection, "PROJCS")
&& !STARTS_WITH_CI(pszNewProjection, "LOCAL_CS")
&& !STARTS_WITH_CI(pszNewProjection, "COMPD_CS")
&& !STARTS_WITH_CI(pszNewProjection, "GEOCCS")
&& !EQUAL(pszNewProjection,"") )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Only OGC WKT Projections supported for writing to GeoTIFF. "
"%s not supported.",
pszNewProjection ); return CE_Failure;
} if( EQUAL(pszNewProjection, "") &&
pszProjection != NULL &&
!EQUAL(pszProjection, "") )
{
bForceUnsetProjection = true;
} CPLFree( pszProjection );
pszProjection = CPLStrdup( pszNewProjection ); bGeoTIFFInfoChanged = true; return CE_None;
}

MBTilesDataset::SetProjection

CPLErr MBTilesDataset::SetProjection( const char* pszProjection )
{
if( eAccess != GA_Update )
{
CPLError(CE_Failure, CPLE_NotSupported,
"SetProjection() not supported on read-only dataset");
return CE_Failure;
} OGRSpatialReference oSRS;
if( oSRS.SetFromUserInput(pszProjection) != OGRERR_NONE )
return CE_Failure;
if( oSRS.GetAuthorityName(NULL) == NULL ||
!EQUAL(oSRS.GetAuthorityName(NULL), "EPSG") ||
oSRS.GetAuthorityCode(NULL) == NULL ||
!EQUAL(oSRS.GetAuthorityCode(NULL), "3857") )
{
CPLError(CE_Failure, CPLE_NotSupported,
"Only EPSG:3857 supported on MBTiles dataset");
return CE_Failure;
}
return CE_None;
}

GDALSetProjection使用的一个注意事项的更多相关文章

  1. asp.net mvc3 数据验证(四)—Remote验证的一个注意事项

    原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项         前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...

  2. 用new Image().src作LOG统计的一个注意事项 .

    用new Image().src作LOG统计的一个注意事项 2009-08-06 17:40 在大型网站做很多用户行为分析.产品的策划方案基本上都是通过分析用户的访问等信息而做出的,LOG信息的统计准 ...

  3. Apache万网SSl证书安装不成功的一个注意事项(https安全链接,基于phpstudy)

    最近,微信小程序挺火,要做小程序网站域名必须要有ssl证书,形成https://的安全链接,我于是从万网上下载了一个免费的ssl证书,按照万网提供的安装方式怎么也安装不好,最后我这个Apache小白费 ...

  4. Lattice FIFO 使用之FIFO_DC输入输出宽度不同时 的一个注意事项

    在使用FIFO_DC的时候,我们知道这个FIFO的一个功能是可以输入输出的数据宽度不一样,比如: 输入数据为128bit,输出数据为16bit,FIFO内部可以实现这样的转换,但是输出的时候是先送出一 ...

  5. Mysql使用mysqldump按时间导出时的一个注意事项

    在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况. 我们知道Mysql数据库导出可以使用命令mysqldump,使 ...

  6. [原创]Android Handler使用Message的一个注意事项

    最近发现了一个莫名其妙的问题,在使用Handler.post(Runnable)这个接口时,Runnable有时候没有运行,非常奇怪,后来发现是因为调用Handler.removeMessage()时 ...

  7. MVC-Model数据注解(三)-Remote验证的一个注意事项

    首先,一般来说对于一个属性的验证可能需要不止一个的远程验证,比如对于用户名来说,我们需要对于它的长度做一些限制,这个可以通过StringLength特性来解决:同时还需要验证用户名不能重复,这个就需要 ...

  8. 关于php中openssl_public_encrypt无填充的一个注意事项

    昨天在使用openssl_public_encrypt函数rsa加密一些数据传输的时候,怎么都是加密失败. if (openssl_public_encrypt($data, $encrypted, ...

  9. 一个注意事项:内部类引用的外部变量必须是final的

    之前写过一个项目,好久没更新了,最近翻起以前的代码,发现在这里报了一个错.(现在转到Intellij了,从前在Eclipse luna中是可以编译通过的,Eclipse mars也会报错,JDK版本都 ...

随机推荐

  1. hdu 1372 骑士从起点走到终点的步数 (BFS)

    给出起点和终点 求骑士从起点走到终点所需要的步数 Sample Inpute2 e4 //起点 终点a1 b2b2 c3a1 h8a1 h7h8 a1b1 c3f6 f6 Sample OutputT ...

  2. c3p0和QueryRunner的结合使用,让开发更加简便

    1:DBUtils中的QueryRunner的使用: 1.1:QueryRunner中提供了对SQL语句操作的api: 1.2:主要有三个方法: 1.2.1:query():用于执行select(查询 ...

  3. MySQL运行内存不足时应采取的措施

    导读 排除故障指南:MySQL运行内存不足时应采取的措施? 原文出处:<What To Do When MySQL Runs Out of Memory: Troubleshooting Gui ...

  4. kubernetes 部署 traefik 以及kubernetes dashborad

    前言 本来打算通过 traefik 来实现 kubernetes dashborad 的服务访问,可是在配置过程中始终报错.最后无奈只能通过nodeport来实现kubernetes dashbora ...

  5. BZOJ1819 [JSOI]Word Query电子字典 Trie

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1819 题意概括 字符串a与字符串b的编辑距离是指:允许对a或b串进行下列“编辑”操作,将a变为b或 ...

  6. BZOJ1090 [SCOI2003]字符串折叠 区间动态规划 字符串

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1090 题意概括 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S 2. X(S)是X ...

  7. phpunit

    教程及文档: https://www.jianshu.com/p/abcca5aa3ad6 http://www.phpunit.cn/manual/current/zh_cn/phpunit-boo ...

  8. python tkinter-按钮.标签.文本框、输入框

    按钮 无功能按钮 Button的text属性显示按钮上的文本 tkinter.Button(form, text='hello button').pack() 无论怎么变幻窗体大小,永远都在窗体的最上 ...

  9. Python爬虫之正则表达式的使用(三)

    正则表达式的使用 re.match(pattern,string,flags=0) re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none 参数 ...

  10. Linux/Window 正斜杠 反斜杠

    文件目录结构: Linux 是用正斜杠 目录名区分大小写 Window 是用反斜杠 目录名不区分大小写