在 R 中导出栅格层

use*_*607 1 r geospatial geotiff r-raster r-sp

我正在研究这个bnspatial 例子,我想看看导入数据中的实际内容ConwyData

source("http://bioconductor.org/biocLite.R")
biocLite("RBGL")
install.packages("bnspatial")
install.packages("raster")
library(raster)
library(bnspatial)
data(ConwyData)

> str(ConwyData)
List of 6
 $ ConwyStatus  :Formal class 'RasterLayer' [package "raster"] with 12 slots
  .. ..@ file    :Formal class '.RasterFile' [package "raster"] with 13 slots
  .. .. .. ..@ name        : chr "E:\\masanda\\Documents\\R\\win-library\\3.4\\bnspatial\\extdata\\ConwyStatus.tif"
Run Code Online (Sandbox Code Playgroud)

因此,我想将 Rater Layer 文件导出为可以导入 ArcGis 或 QGIS 的格式。我已经尝试了以下,但没有一个工作:

  1. writeRaster(ConwyData, "raster_bnspatial", format = "GTiff") (function (classes, fdef, mtable) 中的错误: 无法为签名 '"list", "character"' 找到函数 'writeRaster' 的继承方法

  2. ConwyData <- file("C:/Users/admin/Dropbox/KU_Leuven/Thesis/R-scripts/ConwyData.grd", package="raster") 文件错误("C:/Users/admin/Dropbox/KU_Leuven/ Thesis/R-scripts/ConwyData.grd", : 未使用的参数 (package = "raster")

    1https : //cran.r-project.org/web/packages/bnspatial/vignettes/bnspatial.html

Val*_*Val 5

它看起来像是ConwyData一个对象列表,而不是单个栅格。这也是您不能将其作为光栅写入磁盘的原因。

查看示例文档(或在?ConwyData),该列表包含以下元素:

  • LandUseChange 类grain 的对象。贝叶斯网络,为演示目的而构建。

  • ConwyLU 类 RasterLayer 的对象。来自康威集水区(英国威尔士)的当前土地利用地图的简化版本。它包括三类:耕地(栅格值 3)、森林(2)、其他(1)。

  • ConwySlope 类 RasterLayer 的对象。来自分辨率为 50 米的数字高程模型的坡度栅格,单位为度。

  • ConwyStatus 类 RasterLayer 的对象。土地所有权类型(虚拟数据),分为三个可能的类别:公共(栅格值 4)、私有(3)、受保护(1)。

  • 证据矩阵。从流域中的每个位置(即像元)提取的可用空间数据(见上文)的集合,其中后者由栅格对象 ConwyLU 表示。空间数据中的每个值都通过 dataDiscretize 或 bulkDiscretize 函数进行离散化,然后分配给来自贝叶斯网络 (LandUseChange) 的相应状态。

  • LUclasses 具有输入空间数据(其对应的状态和值)的分类的列表。该列表根据 bnspatial 函数要求进行格式化,并由函数 importClasses 和 setClasses 返回。

如您所见,其中只有一辆是真正的光栅。这些您可以轻松写入磁盘:

writeRaster(ConwyData$ConwyLU,'/tmp/landuse.tif')
Run Code Online (Sandbox Code Playgroud)

但是如果你只想看一看,你可以跳过写入文件并用 R 将它可视化,例如

base 绘图:

plot(ConwyData$ConwyLU)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

或者更通用的rasterVis

library(rasterVis)

levelplot(ConwyData$ConwySlope,margin=FALSE)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明