【问题标题】:How to preserve raster dataType in raster processing?如何在栅格处理中保留栅格数据类型?
【发布时间】:2019-06-28 21:51:27
【问题描述】:

在进行栅格数学运算时,例如 raster1-raster2,输出栅格的数据类型是“FLT4S”,即使 raster1 和 raster 2 的数据类型都是“INT2S”。如何在不写入磁盘的情况下强制输出为“INT2S”?是否有一种全球性的方式来表示所有栅格处理都将产生 INT2S 数据?

使用“INT2S”而不是“FLT4S”的原因是为了在较大的栅格数据集上使用 for 循环时节省内存空间并加快处理速度。

在 rasterOptions() 中可以指定 dataType,但据我了解,这仅适用于写入磁盘,对吧?

#load package raster
require (raster)

#create sample rasters
r1<-raster::raster(ext=extent(c(0,10,0,10)), res=1, vals=1:100)
r2<-raster::raster(ext=extent(c(0,10,0,10)), res=1, vals=100:1)

#set dataType of sample rasters to 'INT2S'
dataType(r1)<-'INT2S'
dataType(r2)<-'INT2S'

#check dataType of sample rasters
dataType(r1)
dataType(r2)

#do some simple arithmetics
r3<-r2-r1

#check the dataType of the output raster
dataType(r3)

我希望 dataType(r3) 也为 'INT2S'

【问题讨论】:

    标签: r floating-point integer raster dataformat


    【解决方案1】:

    我对“INT2U”数据也有同样的问题,我不相信这是可能的。 AFAIK,R 支持“数字”。浮点数可以用 'as.integer()' 强制转换为 'integer' 但我认为它只是被截断了。

    【讨论】:

      【解决方案2】:

      在您的示例中,它确实有效。如果 vals 参数,请注意数字后面的 L。相当于as.integer

      library(raster)
      r1 <-raster::raster(ext=extent(c(0,10,0,10)), res=1, vals=1:100L)
      r2 <-raster::raster(ext=extent(c(0,10,0,10)), res=1, vals=100:1L)
      
      r3 <- r2 - r1
      class(values(r3))
      #[1] "integer"
      

      但在其他情况下它不起作用

      class(values(r3 - 2L))
      [1] "numeric"
      

      而且你无法控制这种行为。

      请注意,dataType 提供有关 RasterLayer 引用的文件的信息。如果没有文件,就像上面的例子,这个值是没有意义的。您也不应该设置它,除非在处理现有文件时进行调试。

      所以你能做的最好的就是在写入磁盘时设置数据类型

      writeRaster(r3, filename="test.tif", datatype="INT2S")
      

      【讨论】:

        【解决方案3】:

        我也有同样的问题。如果我错了,希望有人会插话,但我相信你真的只有一个选择,那就是在写入磁盘时转换输出:

        writeRaster(r3,filename="r3.tif", format="GTiff", datatype='INT2S')
        

        然后加载回 R。

        计算后可以转换输出,但不会改变对象的大小:

        dataType(r3)<-'INT2S'
        

        您可以使用以下方法检查对象大小:

        object.size(r3)

        如果将数据写入磁盘并重新加载,对象大小会更小。

        【讨论】:

          猜你喜欢
          • 2018-09-15
          • 1970-01-01
          • 1970-01-01
          • 2016-08-18
          • 1970-01-01
          • 1970-01-01
          • 2021-08-23
          • 2017-03-21
          • 1970-01-01
          相关资源
          最近更新 更多