我有多年的栅格(.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
答案 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]