从栅格列表计算均值并将其保存为其他名称

时间:2019-07-05 01:55:13

标签: r raster

我有多年的栅格(.tif格式)列表。这是来自Landat的16天NDVI,我想每月制作一次NDVI(两个连续栅格的平均值),并将其保存在相同或不同的目录中,作为每月平均值

我已经列出了栅格栅格并进行了堆叠,后来我使用stackApply来计算平均值,但是它将产生空栅格。我有一年的23张图像,我希望将其平均化并制作12个月。这就是我的栅格文件的样子

 "landsatNDVISC05SLC2000001.tif" "landsatNDVISC05SLC2000017.tif"
 "landsatNDVISC05SLC2000033.tif" "landsatNDVISC05SLC2000049.tif"
 "landsatNDVISC05SLC2000065.tif" "landsatNDVISC05SLC2000081.tif"
 "landsatNDVISC05SLC2000097.tif" "landsatNDVISC05SLC2000113.tif"
 "landsatNDVISC05SLC2000129.tif" "landsatNDVISC05SLC2000145.tif"
 "landsatNDVISC05SLC2000161.tif" "landsatNDVISC05SLC2000177.tif"
 "landsatNDVISC05SLC2000193.tif" "landsatNDVISC05SLC2000209.tif"
 "landsatNDVISC05SLC2000225.tif" "landsatNDVISC05SLC2000241.tif"
 "landsatNDVISC05SLC2000257.tif" "landsatNDVISC05SLC2000273.tif"
 "landsatNDVISC05SLC2000289.tif" "landsatNDVISC05SLC2000305.tif"
 "landsatNDVISC05SLC2000321.tif" "landsatNDVISC05SLC2000337.tif"
 "landsatNDVISC05SLC2000353.tif

此代码有效,但将产生十二个以上的空栅格,我也想将栅格砖另存为单个子集的每月栅格

library(raster)
lrast<-list.files("G:/LANDSAT-NDVI/testAverage")
layers<-paste("landsatNDVISC05SLC2000", seq(from=001, to=353,by=16))
stak<-stack(lrast)
raster<-stackApply(stak, layers, fun = mean)

我想将landsatNDVISC05SLC2000001.tif和landsatNDVISC05SLC2000017.tif的月平均值作为landsatNDVISC05SLC2000M1.tif。同样,由于我只有33,49个栅格,因此我想将landsatNDVISC05SLC2000353.tif保留为landsatNDVISC05SLC2000M12.tif

  

Blockquote

1 个答案:

答案 0 :(得分:0)

不确定stackapply的工作原理,但是类似的事情应该可以完成所需的工作。

implicit val fooCodec : Codec[Foo] = Macros.createCodecProvider[Foo]()

def barCodecProvider[T: ClassTag](implicit codecT : Codec[T]) = new Codec[Bar[T]] {
  override def decode(reader: BsonReader, decoderContext: DecoderContext): Bar[T] = {
    Bar[T](codecT.decode(reader,decoderContext))
  }

  override def encode(writer: BsonWriter, value: Bar[T], encoderContext: EncoderContext): Unit = {
    codecT.encode(writer,  value.x, encoderContext)
  }
  //the tricky one
  override def getEncoderClass: Class[Bar[T]] = classTag[Bar[T]].runtimeClass.asInstanceOf[Class[Bar[T]]]
}

val barFooCodec : Codec[Bar[Foo]] = barCodecProvider[Foo]