利用Hadoop计算FVC(植被覆盖度)思路

来源:互联网 发布:安卓 gba 模拟器 知乎 编辑:程序博客网 时间:2024/06/06 19:27

  植被覆盖度(Fractional Vegetation Cover, FVC)指植被冠层的垂直投影面积与土壤总面积之比,像元的植被覆盖度计算公式为:


这里写图片描述

  式中: NDVI是像元的归一化植被指数,NDVImin 、 NDVImax分别为整个研究区内NDVI的最小值、最大值,像元NDVI的计算公式为:

这里写图片描述

  式中:DNNIR 、DNR 表示近红外、红光波段的灰度值
  因此,要求植被覆盖度,首先要获得该区域近红外和红光波段的灰度值或反射率,然后把灰度值或反射率代入上面公式求出归一化植被指数 ,接着统计流域的最小值和最大值 ,最后再利用FVC求出植被覆盖度,具体的算法流程图如下图所示。

这里写图片描述

  根据FVC计算流程,设计MapReduce并行程序如下图所示。


这里写图片描述

  Input:输入一个HDFS路径,该路径下包含5景遥感影像的压缩包。
  Split:自定义FileInputFormat,将输入的HDFS路径分割成遥感影像的压缩包路径,即将K-V对<Path, NullWritable >传入到Map中,可以自定义构造函数来扩展 RecordReader函数,可以参考下面这篇文章:

  https://www.ibm.com/developerworks/cn/data/library/bd-hadoopcombine/

public class FileInputFormatNew extends FileInputFormat<Path, NullWritable>{...}

  Map阶段:输入5景Landsat8地表反射率影像,每景影像都是一个压缩包,每个map任务处理了数据不一样,但是执行的操作是相同的。Map的输入K-V对即经过Split过的影像压缩包路径<Path,NullWritable>,Map的输出K-V为影像文件名与对应的字节序列<Text, BytesWritable>。Map阶段的每个map任务都将生成一幅FVC影像,它们都是影像的一部分,这些FVC影像将输入到Reduce阶段,而<Text, BytesWritable>也将作为Reduce阶段的输入K-V对。

public class FVCMap extends Mapper<Path, NullWritable, Text, BytesWritable>{...}

  Reduce阶段:Reduce阶段只有一个reduce任务,它接受map任务的输出,并把5幅小的FVC影像镶嵌成一幅大的影像,这幅影像就是整个流域的植被覆盖度,最后把结果输出到HDFS上。Reduce阶段的输入K-V对即为Map阶段的输出<Text, BytesWritable>,而输出自己已经在Reduce中定义了,所以Reduce函数的输出K-V为<NullWritable, NullWritable>。

public class FVCReduce extends Reducer<Text,BytesWritable,NullWritable,NullWritable{...}
原创粉丝点击