GeoTIFF 数据格式探索

为了在现有的计算机系统中存储、表达空间数据,并实现对空间数据的更高级处理和运算,人们设计出了各种各样的空间数据格式。GISers 在与空间数据打交道的过程中,如果对遇到的空间数据格式有一点基本的理解,会给工作带来极大的帮助。

我们常把空间数据组织成两种基本的形式:矢量数据和栅格数据。这与计算机存储其他图像的组织形式很相似。今天讨论的 GeoTIFF,即是一种基于 TIFF 的地理空间栅格数据存储格式,也是目前被支持最广泛、最通用的空间栅格数据格式之一。

通俗来讲,GeoTIFF 是 TIFF 格式的一种扩展,是支持地理空间参考的 TIFF. GeoTIFF 已经是 TIFF 规范的一部分。

TIFF, Tag Image File Format

TIFF 是一种在被广泛应用的位图格式,最初由Aldus公司与微软公司一起为 PostScript 打印开发。TIFF 具有下述分级的文件结构:

  • 文件头 (File Header)
  • 文件目录 (Image File Directories, IFDs)
  • 文件数据 (Data)

TIFF 文件分层结构

文件头

文件头提供了 TIFF 文件的字节序 (byte order)、版本 (Version Number or ID)、指向第一个 IFD 的指针等信息。

文件目录

一个 IFD 可以代表多页 TIFF 文件中的「一页」。一个 IFD 中包含数个长度为 12 bytes 的标签 (tags), IFD 的结构

每个 tag 又有如下结构:

即,每个 tag 包含了 tag ID、数据类型、值的数量,及 (通常情况下) 指向数据域的一个指针。简单计算可以知道,「Tag data」 部分的长度为 4 个 bytes,如果 length(datatype) * (number of values) <= 4 bytes, 则标签数据会直接存储在这个标签结构中,否则,「Tag data」部分应该是一个指针。

TIFF 格式的 tag 概念,具有相当好的灵活性,正好用来扩展成为 GeoTIFF.

文件数据

TIFF 文件的数据区域。

GeoTIFF

为了给图像添加空间参考信息,一个简单的想法就是利用 TIFF 的 tags 来存储空间参考。

但在实际实现中,为了节省 TIFF 预留的标签资源,GeoTIFF 使用了 GeoKeys 来组织众多空间参数,所有 GeoKeys 由 GeoKeyDirectoryTag 来索引。

Libgeotiff

Libgeotiff 是基于 libtiff 的用于读写 GeoTIFF 的一个开源库: geotiff/libgeotiff

References

更多格式:

这里有一份地理空间数据格式列表:

essethon

继续阅读此作者的更多文章