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 文件的字节序 (byte order)、版本 (Version Number or ID)、指向第一个 IFD 的指针等信息。

文件目录

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

每个 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

更多格式:

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