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版本都 ...
随机推荐
- maven创建父子关系的聚合项目
我最近使用eclipse的mavean插件创建父子关系的聚合项目,如果创建子工程直接在父工程我相信大家都会创建,但是子工程在父工程中的其中一个文件夹里面,我们创建子工程是直接存在父工程下面的,当我们想 ...
- CentOS7.5安装nodejs
安装方法1——直接部署 1.首先安装wget yum install -y wget 如果已经安装了可以跳过该步 2.下载nodejs最新的tar包 可以在下载页面https://nodejs.org ...
- kuangbin 区间dp
A - Cake 题目大意:给你一个n个顶点(n<=100)的多边形和每两个点连边的消耗,让你求把这个多边形全部切成三角形所需要的最小消耗,如果这个多边形为凹多边形则输出无解. 思路:先求一个凸 ...
- Mysql 账号过期问题
1.ALTER USER 'root'@'localhost' PASSWORD EXPIRE; 一旦某个用户的这个选项设置为”Y”,那么这个用户还是可以登陆到MySQL服务器,但是在用户未设置新密码 ...
- 5.Django|模型层--多表关系
多表操作 文件为 ----> orm2 数据库表关系之关联字段与外键约束 一对多Book id title price publish email addr php 人民出版社 北京 pyth ...
- 【Java】 剑指offer(48) 最长不含重复字符的子字符串
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字 ...
- FastAdmin 的 CRUD 不支持层级模型
FastAdmin 的 CRUD 可以快速生成控制器,模型和前端文件. 群里有人试了这个命令: php think crud -t departmant -c auth/departmant -m ...
- Python 扩展技术总结(转)
一般来说,所有能被整合或导入到其他Python脚本中的代码,都可以称为扩展.你可以用纯Python来写扩展,也可以用C/C++之类的编译型语言来写扩展,甚至可以用java,C都可以来写 python扩 ...
- python实现FTP弱口令扫描器与简单端口扫描器
python实现FTP弱口令扫描器与简单端口扫描器 目录 FTP弱口令扫描器 简单端口扫描器 参考: https://blog.csdn.net/rebelqsp/article/details/22 ...
- 区域生长算法 全局分类 C++ & matlab
// 注:本内容为作者原创,禁止在其他网站复述内容以及用于商业盈利,如需引用,请标明出处:https://www.cnblogs.com/lv-anchoret/ 今天我们来介绍用C++算法如何来实现 ...