1. 问题

笔者在处理地理栅格数据的时候,总是会发生偏差半个像素的问题。

比如说通过ArcMap打开一张.tif,查看其地理信息;同时用记事本打开.tfw,比较两者得地理信息:



同样的起点位置(左上角坐标),两者却相差半个像素的距离。

而对于另一些数据,比较ArcMap与tfw的信息,两者的地理信息又可以是一样的。那么对于地理栅格数据,其起点位置(左上角坐标)是以哪一种为准?为什么两者会相差半个像素的距离?

而GDAL可以也读取地理栅格数据(DEM、DOM等)的坐标信息:

//
GDALAllRegister();
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); //
const char * pszFile = "D:\\Data\\imgDemo\\K52E004015AD005M2010A.TIF";
GDALDataset *poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);//使用只读方式打开图像
if (!poDataset)
{
printf("File: %s不能打开!\n", pszFile);
} //获取地理坐标信息
double padfTransform[6];
if (poDataset->GetGeoTransform(padfTransform) == CE_Failure)
{
printf("获取仿射变换参数失败");
}
cout << fixed << "仿射变换参数:" << endl
<< padfTransform[0] << endl //左上角点坐标X
<< padfTransform[1] << endl //X方向的分辨率
<< padfTransform[2] << endl //旋转系数,如果为0,就是标准的正北向图像
<< padfTransform[3] << endl //左上角点坐标Y
<< padfTransform[4] << endl //旋转系数,如果为0,就是标准的正北向图像
<< padfTransform[5] << endl; //Y方向的分辨率

那么GDAL读取坐标起点也就是左上角点坐标(padfGeoTransform[0],padfGeoTransform[3])又应该是哪一种呢?

2. 结论

经过比较和论证,笔者发现GDAL和ArcMap在处理TIF格式的地理栅格数据的时候,都遵循以下原则:

  1. GDAL/ArcMap读取的起点位置都是左上角像素左上角的位置。
  2. TFW里面存储的坐标起点标识的是左上角像素中心的位置。
  3. 而TIF内部存储的坐标起点标识的是左上角像素左上角的位置。所以两者的地理坐标的距离总是差半个像素的距离。
  4. TIF内部可以不存储地理信息,此时GDAL/ArcMap会以TFW里面存储的起点位置为准,但因为TFW是像素中心的位置,读取的起点位置会偏移半个像素的距离。
  5. 一旦TIF内部可以存储地理信息,此时GDAL/ArcMap会以TIF内部可以存储地理为准。此时TFW文件就不起作用了。

3. 例外

GDAL和ArcMap都没有区分处理的地理栅格数据是DEM(地形)还是DOM(影像),其实对于地形栅格数据,很多时候会把起点位置处理成左上角像素中心的位置。比如说软件GlobalMapper中,打开TIF的时候会询问是将其作为DEM处理还是DOM处理。当作为DEM处理的时候,其余的原则一样,但是读取的起点就是左上角像素中心的位置了。

GDAL读取的坐标起点在像素左上角还是像素中心?的更多相关文章

  1. 使用C#版本GDAL读取复数图像

    GDAL的C#版本虽然在很多算法接口没有导出,但是在读写数据中的接口基本上都是完全导出了.使用ReadRaster和WriteRaster方法来进行读写,同时对这两个方法进行了重载,对于常用的数据类型 ...

  2. QWidget居中显示(qt窗口坐标原点是在”左上角”的,有图)

    转载请说明出处, 并附上原文链接http://blog.csdn.net/qq907482638/article/details/72189014. 问题描述 在Qt学习过程中,在让QDialog居中 ...

  3. GDAL读取Shp问题解决:Unable to open EPSG support file gcs.csv

    在GIS软件的开发中,经常用到开源库GDAL读取Shp数据,当shp数据中包含投影信息时,可能会遇到“Unable to open EPSG support file gcs.csv”错误提示,该错误 ...

  4. HTML-HTML5+CSS3权威指南阅读(五、设备像素和CSS像素的概念)

    在这个迷你系列的文章里边我将会解释viewport,以及许多重要元素的宽度是如何工作的,比如<html>元素,也包括窗口和屏幕 这篇文章是关于桌面浏览器的,其唯一目的就是为移动浏览器中相似 ...

  5. 响应式设计:理解设备像素,CSS像素和屏幕分辨率

    概述 屏幕分辨率.设备像素和CSS像素这些术语,在非常多语境下,是可互换的,但也因此easy在有差异的地方引起混淆,实际上它们是不同的概念. 屏幕分辨率和设备像素是物理概念,而CSS像素是WEB编程的 ...

  6. 设备像素,设备独立像素,CSS像素

    之前学了移动端的开发对设备像素.设备独立像素.CSS像素弄得不太清楚,所以趁周末的时间查了一下,稍加整理 一些概念 在进行具体的分析之前,首先得知道下面这些关键性基本概念. CSS像素 CSS像素是W ...

  7. 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19698511 . 最近遇到了一系列的屏幕适配问题, 以及 ...

  8. CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport

    1.PX(CSS pixels) 1.1 定义 虚拟像素,可以理解为“直觉”像素,CSS和JS使用的抽象单位,浏览器内的一切长度都是以CSS像素为单位的,CSS像素的单位是px. 1.2 注意 在CS ...

  9. CSS中的px与物理像素、逻辑像素、1px边框问题

    一直不太清楚CSS中的1px与逻辑像素.物理像素是个什么关系(作为一名前端感觉很惭愧 -_-!),今天终于花时间彻底弄清楚了,其实弄清楚之后就觉得事情很简单,但也只有在弄清楚之后,才会觉得简单(语出& ...

随机推荐

  1. Maven安装和使用

    一.安   装 1.解压好后,添加系统环境变量 变量名:MAVEN_HOME 属性值:D:\apache-maven-3.3.3  //也就是解压的路径 path中添加:%MAVEN_HOME%\bi ...

  2. sqlilabs 5

    第一个1不断返回true,2可以进行更改?id=-1' union select 1,2,3 and '1?id=-1' union select 1,2,3 and 1='1 ?id=-1' uni ...

  3. Java 标准 I/O 介绍

    一.Java标准I/O知识体系图: 二.I/O是什么 I/O 是Input/Output(输入.输出)的简称,输入流可以理解为向内存输入,输出流是从内存输出. 三.Java I/O 用途与对应的流一览 ...

  4. JAVA远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

    RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成&qu ...

  5. Render

    render 渲染元素 元素是React应用程序的最小构建块 "根"DOM节点,它内部的所有内容都将由React DOM进行管理 仅使用React构建的App程序通常具有单个Dom ...

  6. SAP系统三层架构

    SAP系统三层架构:表示层,应用层,数据库层   表示层:也可以说个人用户client.由表示层提出数据请求,然后应用层对请求进行处理,再通过数据库层DBMS系统对数据进行处理.   从应用服务器的缓 ...

  7. box-shadow 详解及示例

    box-shadow  [bɑks] - [ˈʃædoʊ]   英文示意: box:盒,包厢 shadow:阴影,渐变   定义: box-shadow: none | <shadow> ...

  8. status.go

    )))     return key }

  9. version.go

    package blog4go const ( // 版本号 VERSION = "0.5.6" )

  10. stm.go

    package) ].ModRevision } func,, ,, ].ModRevision ].Value) }