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
更多格式:
这里有一份地理空间数据格式列表: