栅格数据(Raster Data)是将地理空间分割成有规律的网格,每一个网格称为一个单元(像元或像素),并在各单元上赋予相应的属性值来表示实体的一种数据形式。

栅格数据通常有两种类型的栅格数据:专题数据和影像数据。
  • 专题数据:每个栅格像元的值可以是一个测量值或分类值,如污染物浓度、降雨量、土地的权属类型或植被类型等。
  • 影像数据:又称遥感影像或遥感图像(Remote Sensing Image),是通过地面遥感、航空遥感或航天遥感平台拍摄的,记录各种地物电磁波大小的胶片或照片,包含如航空影像和遥感卫星影像等。

每一幅栅格数据均带有时间属性和空间属性,我们称之为时空栅格。时空栅格还强调了栅格数据的时态特性,比如管理时间序列的系列栅格数据。

DLA Ganos Raster

DLA Ganos Raster是DLA Ganos针对栅格数据管理和处理的时空数据引擎及配套工具集,它允许用户使用阿里云Lindorm(HBase)存储、索引、查询、分析和传输栅格数据及其相关元数据。栅格数据以数据分块(Tile或Block)的形式存储在Lindorm(HBase)中,每个分块对应于一个主键,并且该主键支持时间和空间查询。此外,Ganos Raster允许多源栅格数据(如遥感、摄影测量和专题地图)之间的融合与分析以及数据服务发布等功能(如TMS或WMTS等)。Ganos Raster可用于包括基于位置的服务、地理图像存档、环境监测和评估、地质工程和勘探、自然资源管理、国防、应急响应、电信、交通、城市规划以及国土安全等领域。

Ganos Raster数据模型

基本概念

Ganos Raster数据模型主要包括以下几个元素构成:
  • Image:泛指一景遥感影像,如一个TIFF文件。
  • Catalog:数据目录,相当于”数据库“的概念。Catalog是一个逻辑概念,它由一个Lindorm(HBase)数据库中所有Layer(一个Layer一个表)与一个Metadata元数据表(其中每一行代表一个Layer的元数据)构成。
  • Cover或Coverage:多幅栅格数据构成的数据集合,等同于镶嵌数据集。
  • Layer:由多个Tile构成的2D栅格数据图层,每个Tile拥有一个行列号。
  • Tile或Block:数据分块,为一系列像素的集合。Tile为栅格数据在数据库中存储的基本单元,每个Tile包含若干Cell,一般像素大小为256或512。
  • Cell或Pixel:表示Tile中的一个像素,可以拥有不同的数据类型如Byte,Short,Int,Double等。
  • Key:唯一标识Tile的键值,分为SpatialKey、SpaceTimeKey、TimeKey三种。
  • Pyramid:栅格金字塔,方便快速显示。每个Pyramid包含不同的层级,每个层级对应一个Layer,第0层代表原始数据。
  • Metadata:栅格的存储元数据(空间范围、投影类型、像素类型等),不包含遥感平台元数据。
  • Layout Definition或Layout:定义Layer中Tile的分块方式,每个像素所代表的地理范围,以及Key到真实坐标系中的映射关系等信息。
  • Layout Scheme:一个金字塔中所有Layer的zoom编号及其对应的Layout Definition组成一个Layout Scheme。
  • 栅格数据的文件表示以及在数据库中存储的逻辑模型如下图所示:
1

Band与Layer

Ganos Raster采用了一种简单而高效的通用栅格数据模型来管理专题数据和遥感影像数据。一幅遥感影像(Image)由若干可以表示为2D栅格图层的波段(Band)组成,每个Band的一个像素表示为一个像素单元(Cell)。注意,为了便于存储与管理,Ganos Raster规定同一Band中的Cell必须是同质的,即具有相同的数据类型与投影参数,但是同一影像的不同波段可以是异质的。每一个Image都有对应的元数据(Metadata)信息,如图幅范围(Extent)、数据类型、投影信息、行列号等。栅格数据在数据库中以Layer的形式进行表达,每个Layer是以数据块(Tile)为基本存储单元在Ganos Raster中进行存储和管理。Tile分为单波(Tile)段与多波段(MultibandTile)两种类型,每个MultibandTile由任意数量的Tile构成。

如上图所示,Band与Layer的关系分为三种:
  • 一个Band对应一个Layer: 对于一些单波段的栅格数据,如模型的输出结果,遥感影像分析结果,每个像素一般只包括一个值,在不构建金字塔模型的情况下,每个Band对应于一个Layer。
  • 多个Band构成一个Layer: 如遥感影像的真彩色(RGB)合成的图层,可以MultibandTile进行表示,这种情况下,R、G、B三个波段可以合成为一个Layer进行存储。
  • 一个Band包括多个Layer: 如果对栅格数据创建了金字塔模型,那么一个Band会包含多个层级的金字塔数据(zoom),而每个zoom对应了一个Layer。

金字塔模型

对栅格数据创建金字塔可以显著改善数据访问性能。金字塔模型是原始栅格数据集的缩减采样版本,一般包含多个缩减后的连续的采样图层。各个连续图层均以 2:1 的比例进行重采样。以下是为栅格数据集创建的4级金字塔示例:2

金字塔最大的优点是仅检索使用指定分辨率(取决于显示要求)的数据,从而可以极大提高栅格数据的访问速度。利用金字塔,可在绘制整个数据集时快速显示较低分辨率的数据分块。而随着放大操作的进行,各个更精细的分辨率等级将逐渐得到绘制;但性能将保持不变。数据库会根据用户的显示比例自动选择最适合的金字塔等级。每个栅格数据集只需构建一次金字塔,之后每次查看栅格数据集时都会访问这些金字塔。栅格数据集越大,创建金字塔集所花费的时间就越长。但是,这也就意味着可以为将来节省更多的时间。

Ganos Raster 数据分块模式(Layout Scheme)

Layout Definition与Layout Scheme用来定义Layer的分块方式。给定数据图幅范围和像元大小(一个像元代表的实际空间范围),Layout Scheme可以给出一个缩放层序列(Zoom)级以及各层级对应的Layout Definition。Ganos Raster支持两种数据分块模式:zoom与local。zoom方式是按照TMS的分块标准在全球范围内对数据进行分块与编码,最左上角的数据块为起始点(0,0),按照从左到右,从上到下的顺序进行增加。该方法的优点是各类型栅格数据都按照统一的时空格网进行分块,便于叠加分析与多元数据融合。此外,由于遵循了TMS标准,使用该方法分块后的数据经过渲染后可直接发布为TMS服务用于显示(如使用OpenLayers)。但该方法的缺点是数据分块速度相对较慢。以zoom方式对数据进行分块的示意图如下:3
除了zoom方式外,Ganos Raster还提供了一种基于图像本地坐标系统的分块方式:local。该方式定义的起算点不再是基于全球范围,而是以数据本身的图幅范围的左上角为起始点(0,0),然后按照256x256像素窗口对数据进行分块,直到完全覆盖图像所覆盖的范围结束,多出的像素位置以NoData值填充。该方式的优点在于第0层为原始数据分辨率,保持了数据原始的数据信息,而且数据分块速度快,图像更新方便,查询效率高。但缺点是不同栅格数据没有统一的数据分块方式,不便于进行叠加分析。Ganos Raster 默认使用local方式对数据进行分块并创建金字塔。4

坐标系统

Ganos Raster支持OGC CRS标准定义的坐标系统。用户可以按照EPSG坐标参照系统参数来定义栅格数据所要采用的坐标系统,目前Ganos Raster比较常用的EPSG主要有:
  1. EPSG:4326即WGS84投影坐标系,它采用经纬度的方式展示,是目前最常用的坐标系统之一。
  2. EPSG:3857即Mercator球形墨卡托投影坐标系,也叫做或Web墨卡托坐标系。目前Google Maps等主流的Web制图应用程序都在使用此坐标系。

想要查询具体的EPSG参数,请参见https://epsg.io/

主键与索引

当栅格数据被分块为Tile之后,需要定义他们的组织方式从而方便创建数据索引。Tile在Lindorm(HBase)中以Key-Value(键值对)的形成进行存储。每个Tile的Key是由图层名、层级、时间(SpaceTimeKey)、行号、列号等属性构成。目前Lindorm(HBase) Ganos Raster提供了两种Key模型:
  • SpatialKey:空间主键

    SpatialKey采用空间填充曲线(Space Filling Curve,后面简称SFC)对Tile进行编码和索引,Ganos Raster目前支持两种类型的空间索引,它们分别是:

    Z-Curve

    z-curve

    Hilbert

    Hilbert
  • SpaceTimeKey:时空主键

    SpaceTimeKey主要是在SpatialKey的基础上增加了时间维度,可以理解成三维的SFC。

DLA Ganos时空栅格

在DLA Ganos中,Tile为栅格数据处理的基本单元,所有栅格数据都以TileUDT的方式被Spark加载并参与计算,如下图所示:11
Ganos目前支持的栅格数据源包括:
  • PolarDB
  • Lindorm(HBase)
  • OSS
  • HDFS