GDALSetProjection使用的一个注意事项
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 CGDALSetProjection()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格式就很简单粗暴了,不做任何验证,传入什么就复制什么.
下面贴出GTiff和MBTiles两种格式对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使用的一个注意事项的更多相关文章
- asp.net mvc3 数据验证(四)—Remote验证的一个注意事项
原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项 前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...
- 用new Image().src作LOG统计的一个注意事项 .
用new Image().src作LOG统计的一个注意事项 2009-08-06 17:40 在大型网站做很多用户行为分析.产品的策划方案基本上都是通过分析用户的访问等信息而做出的,LOG信息的统计准 ...
- Apache万网SSl证书安装不成功的一个注意事项(https安全链接,基于phpstudy)
最近,微信小程序挺火,要做小程序网站域名必须要有ssl证书,形成https://的安全链接,我于是从万网上下载了一个免费的ssl证书,按照万网提供的安装方式怎么也安装不好,最后我这个Apache小白费 ...
- Lattice FIFO 使用之FIFO_DC输入输出宽度不同时 的一个注意事项
在使用FIFO_DC的时候,我们知道这个FIFO的一个功能是可以输入输出的数据宽度不一样,比如: 输入数据为128bit,输出数据为16bit,FIFO内部可以实现这样的转换,但是输出的时候是先送出一 ...
- Mysql使用mysqldump按时间导出时的一个注意事项
在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况. 我们知道Mysql数据库导出可以使用命令mysqldump,使 ...
- [原创]Android Handler使用Message的一个注意事项
最近发现了一个莫名其妙的问题,在使用Handler.post(Runnable)这个接口时,Runnable有时候没有运行,非常奇怪,后来发现是因为调用Handler.removeMessage()时 ...
- MVC-Model数据注解(三)-Remote验证的一个注意事项
首先,一般来说对于一个属性的验证可能需要不止一个的远程验证,比如对于用户名来说,我们需要对于它的长度做一些限制,这个可以通过StringLength特性来解决:同时还需要验证用户名不能重复,这个就需要 ...
- 关于php中openssl_public_encrypt无填充的一个注意事项
昨天在使用openssl_public_encrypt函数rsa加密一些数据传输的时候,怎么都是加密失败. if (openssl_public_encrypt($data, $encrypted, ...
- 一个注意事项:内部类引用的外部变量必须是final的
之前写过一个项目,好久没更新了,最近翻起以前的代码,发现在这里报了一个错.(现在转到Intellij了,从前在Eclipse luna中是可以编译通过的,Eclipse mars也会报错,JDK版本都 ...
随机推荐
- 【开源小软件 】Bing每日壁纸 V1.2.1
Bing每日壁纸发布V1.2版本,下载地址Release V1.2.1 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 本次新增国际化支持,以及桌面widg ...
- python全栈开发day32-进程创建,进程同步,进程间的通信,进程池
一.内容总结 1.进程创建 1) Process:两种创建一个新进程的方法: 1.实例化Process,通过args=(,)元组形式传参,2创建类继承Process,类初始化的时候传参数 2) p.j ...
- Storm消息容错机制(ack-fail机制)
storm消息容错机制(ack-fail) 1.介绍 在storm中,可靠的信息处理机制是从spout开始的. 一个提供了可靠的处理机制的spout需要记录他发射出去的tuple,当下游bolt处理t ...
- 64位JDK+tomcat6+myeclipse 10安装与配置
一.安装JDK与配置环境与检验配置成功: 1.进入java.com网站,然后按照以下步骤进行 =>=>=>=>=> =>=>等会出现java茶杯双击,一次一 ...
- 【Java】 剑指offer(50-1) 字符串中第一个只出现一次的字符
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在字符串中找出第一个只出现一次的字符.如输入"abacc ...
- 【Java】 剑指offer(59-2) 队列的最大值
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请定义一个队列并实现函数max得到队列里的最大值,要求函数ma ...
- (转)Java按指定行数读取文件
package test import java.io.File; import java.io.FileReader; import java.io.IOException; import java ...
- 康托展开&&康托逆展开
康托展开 简介:对于给定的一个排列,求它是第几个,比如54321是n=5时的第120个.(对于不是1~n的排列可以离散化理解) 做法: ans=a[n]*(n-1)!+a[n-1]*(n-2)!+~~ ...
- PHP如何支持CURL字符串证书传输
背景 最近在对接微信支付的时候,需要在退款处用到证书,由于我们是SAAS平台,要支持多方多渠道支付,如果把所有证书文件保存在应用服务器会受到SLB的影响,会导致某台机器文件不同步而阻碍退款流程,但把文 ...
- 跳过从Win7/8升级,直接格式化全新安装 Windows 10 并自动永久激活系统的方法教程
跳过升级,直接激活全新 Win10 的方法步骤教程: 下载 Windows 10 系统的 ISO 镜像 在你当前的 Win7 / Win 8 / 8.1 系统中,使用 DaemonTools 或右键选 ...