2019/04/03 SHAHED:交互式遥感数据探究

栅格数据的Hadoop应用:SHAHED简述SHAHED:交互式遥感数据探究

先po上来,明天校对一遍。

1 简介

SHAHED依赖于SpatialHadoop,提供遥感数据的索引、查询、可视化和后处理等功能。
数据源:LP DAAC

模块与功能:

模块功能备注
Data interfaceUncertainty handling使用差值方法补全丢失的数据信息
Indexing module依赖于SpatialHadoop,提供空间信息索引
User interfaceQueryingSpatio-temporal selection queries 和 aggregate queries
Application如Visualization

2 分模块介绍:

2.1. Uncertainty handling

LP DAAC原图中有很多数据丢失的情况,需要使用该方法对数据进行补全。由于不是重点,就不在此介绍其思路和方法。

2.2. Indexing module

2.2.1. LP DAAC数据特征

LP DAAC的数据具有四层的特征:
第一层:data sets:按数据类型(例如温度,植被覆盖等参数)。
第二层:temporal分层:按时间序列分组。
第三层: spatial分层: 按空间分组。全球的数据被二维网格切分,每个网格(grid)的命名代表了该网格的横纵位置(例如h21v06)。
第四层: 二维数组: 数组的每个值代表了该参数(即第一层的数据,如温度等)。
文件格式:HDF格式的二维数组,数组大小为12001200,24002400或者4800*4800,其分别对应的分辨率为1000m,500m和250m。

2.2.2. 时空索引方式

针对LP DAAC这种数据格式,SHAHED分别对数据进行时间和空间的分层。

2.2.2.1. 时间索引

SHAHED设立了年月日三种时间尺度索引,分别包含了一整年,一整个月和每一天的数据。需要注意的是,为了分别建立者三种时间尺度的索引,数据被复制成3份。这些都是为了提高索引速度所做出的存储空间的牺牲,SHAHED认为这种付出是值得的。月和年的数据需要在整个月和整一年结束之后,打包一起添加到索引中。

2.2.2.2. 空间索引

对每个网格内的点,通过Z-order方法对每个点编号,随后建立一个四叉树(quad tree)索引。由于每个网格(grid)大小是一定的(比如1200x1200),因此这个四叉树的模板对所有的网格都是通用的。Z-order的标号位置也是相同的,因此可以将Z-order的结果做成一个lookup table,所有的grid通过这个lookup table查找或者直接复制即可找到每个位置上对应的Z值。
四叉树结构中,根节点(root node)的编号被设置为(ID=1,start=0,end=1200x1200),随后,根节点下属的四个节点会将平均分配0-1200x1200的数据。由于按Z-order规则对数据进行编号,因此每个下属节点内的数据的编号都是连续的。四叉树一直细分到某个阈值(例如末端叶节点的数据量小于100),则停止。

2.2.2.3. 索引构建

首先,按照上述方法构建一个四叉树模板,随后对第一组输入数据进行索引。首先对每个四叉树按数据头进行初始化,包含两个内容:resolution(res)和cardinality©,分别代表了分辨率(12001200,24002400…)和存储数据的个数(温度,植被…)。第一次建立时,c总是等于1。随后,二维的数组V被Z-order排序之后,按照Z值进行排序,转化为一维的V’。二维数组V在排序之后,四叉树上的每个节点的总值(aggregate values)可以被计算,计算结果被存储在一个哈希表内,节点的编号即是哈希表的key值。叶节点的总值直接由其所包含范围内的值进行计算,而非叶节点的总值则吸收其子节点的数据进行计算。
单个时间(例如每一天的数据)的四叉树构建好之后,为了方便索引,SHAHED构建了每个月和每一年的四叉树。这一步很简单,因为四叉树本身的结构是相同的,只需要将原来一年中每一天的V’取出来并叠加到一起,再放在相应的叶节点下即可。如果一个V’包含的c>1,则所有的数据将被打包一起被添加到新的四叉树下。生成之后可以按照之前的方法计算每个节点的总值。

2.3. Querying

2.3.1. 时空查询

SHAHED可以接受时间、空间的范围查询。查询过程被分为三个步骤:时间过滤,空间过滤和空间修正。
时间过滤:首先对最底层的时间(年)进行索引,选择包含查询时间的时间分区,将该分区添加到已选择分区,并从时间范围内排除该时间节点。完成时候,在更高一级的的时间曾重复上述工作直到顶级时间层为止。
空间过滤:每个时间分区内的网格被分为三种,网格完全被包含在查询区域内,网格部分被包含在查询区域内和与查询区域不重合。对于第一种网格,其包含的数据被完全拷贝到输出中;
空间修正:针对第二种网格的数据,会被进行进一步筛查。对子节点上的范围进行查询,并分为相同的三种网格。对于其中的第二种网格进行上述循环操作,直到最顶级的叶节点为止。叶节点下所有点的数据都会被扫描,其中范围内的现将被输出。
每个四叉树之中,被查询范围会被修剪并只保留此四叉树所包含的范围。随后,这个范围将会被规范化的转化为[0,res]范围内的整形参数。
实际上,范围空间的过滤只需要进行一次,因为所有时间维度上的空间的范围都是一致的,四叉树的组织形式和分辨率也是一致的。

2.3.2. 总值查询

查询过程被分为三个步骤,时间过滤,空间过滤和总值计算。前两个步骤和时空查询一样。只是由于根节点本身不含总值的参数,对于这种节点,需要计算其四个总结点的总值之和。其余的节点在达到叶节点之后会遍历所有的点,计算包含的点的总值。

2.4. 应用用实例:可视化

可视化是数据处理中一个很典型的应用。以数据化为例,描述一下应用该数据库的一般步骤和方法。
例如,查询并可视化某时空范围内的热力图有三个步骤:选择,绘制,拼接。这三个步骤实际上可以分别对应Spark的三个步骤:实例化RDD,RDD的转化,RDD的输出和结果的合并。
首先查询出数据,将输出的数据交给各个机器(用数据实例化RDD);随后,将数据根据一定的规则转化为图片(例如数值较高的转化为红色),这一步会涉及数据的大量计算和变换(RDD的操作指令),最后将分片的数据重新拼接成一个(这一补可以在RDD内操作,也可以将RDD输出之后再合并)。
对于金字塔模型的热力图,绘制步骤如下:
首先map函数会并行化处理所有的点,将点复制到所有对应等级的对应瓦片中(例如三级金字塔可能要复制三次);随后reduce函数会收集每个金字塔瓦片的ID和其中的点并形成256*256的瓦片图片。

参考文献:SpatialHadoop :A Mapreduce Framework for Big Spatial Data

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值