利用Hadoop计算FVC(植被覆盖度)思路
2017-08-10 23:37
183 查看
植被覆盖度(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/
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对。
Reduce阶段:Reduce阶段只有一个reduce任务,它接受map任务的输出,并把5幅小的FVC影像镶嵌成一幅大的影像,这幅影像就是整个流域的植被覆盖度,最后把结果输出到HDFS上。Reduce阶段的输入K-V对即为Map阶段的输出<Text, BytesWritable>,而输出自己已经在Reduce中定义了,所以Reduce函数的输出K-V为<NullWritable, NullWritable>。
式中: 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{ ... }
相关文章推荐
- 遥感影像计算植被覆盖度FVC
- 利用hadoop计算文件中的最大值
- 利用Hadoop运行第一个程序,计算文章中不同单词数量
- 利用Excel VBA批量计算长时间序列植被物候动态阈值(逐像元)
- 利用hadoop mapreduce进行 并行计算
- 利用余弦定理计算文本相似度
- 利用 AWK 的数值计算功能提升工作效率
- 利用Python内置函数计算当前时间
- 分布式计算框架Hadoop
- WEBGL学习【十五】利用WEBGL实现三维场景的一般思路总结
- Hadoop并行计算原理与分布式并发编程
- 利用WIN8自带系统还原功能还原系统,遇到的一些问题及解决思路。
- 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)
- 利用虚拟机virtualbox配置Hadoop开发环境总结
- “流”式思想解决hadoop job调度的一种思路
- Hadoop源码分析的思路
- 我的第一个MPI程序:利用矩形规则计算pi
- Hadoop 中利用 mapreduce 读写 mysql 数据
- 1、通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型,能够利用接口和多态性计算几何图形的面积和周长并显示。 2、按以下要求编写程序
- python学习[4]_利用numpy做一些距离的计算