【问题标题】:Writing a GeoTiff file based on a colour matrix基于颜色矩阵编写 GeoTiff 文件
【发布时间】:2013-05-15 14:59:14
【问题描述】:

我想知道如何根据特定颜色的矩阵编写 GTiff?这可能是当颜色不代表定量变量,而是定性空间现象,例如人口统计集群时。如果我有例如一个 1000x1000 的颜色值矩阵(字符串,如“#FF0000”),我可以很容易地用grid.raster(mtrx, interpolate=FALSE) 绘制这些,但这很难与其他形状文件叠加。我还可以将它们转换为 SpatialPixelsDataFrame,字段名称为“x”、“y”、“col”。但我很难过如何将这些对象中的任何一个写入 GTiff。例如:

writeGDAL(SPDF, 'test.tif', drivername = "GTiff", colorTables=x$col)

产量

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘gridded’ for signature ‘"data.frame"’

非常感谢任何指点。


例子:

require(sp)
require(rgdal)
mtrx = matrix(rgb(runif(10000), runif(10000), runif(10000)), ncol=100)
spdf = data.frame(x=rep(1:100,100), y=rep(1:100,each=100), col=as.vector(mtrx))
plot(spdf[,1:2], col=spdf$col, pch=15)
spdf = SpatialPixelsDataFrame(points=spdf[,1:2], data=spdf)
writeGDAL(spdf, 'test.tif', drivername = "GTiff", colorTables=spdf$col)

【问题讨论】:

标签: r rgdal


【解决方案1】:

在您最初的通话中,我猜测 SPDF 是原始 data.frame,而不是 writeGDAL 所期望的 SpatialPixelsDataFrame。无论如何,您在最小示例中还有第二个问题。

问题是 colorTables 不期望 data.frame: from help(writeGDAL):

默认为NULL,如果不是NULL,一个list的长度等于 波段,对于没有颜色表的波段,具有 NULL 组件,或者 由红色、绿色、蓝色和 alpha 值 (0-255) 组成的整数矩阵,或 字符向量的颜色。允许的颜色数量可能会有所不同 带司机。

在您的示例中,spdf$col 是一个因素(尝试class(spdf$col))。您可以根据list(levels(spdf$col))的要求转换为字符向量列表。

这提出了一个问题:您要编写的 GeoTiff 是什么?目前,它是一个带有 x、y 和字符颜色代码的三波段图像……您需要一个实际的属性,该属性将根据颜色代码进行编码。

让我们添加一个新属性,它是 0 到 255 之间的随机整数,创建一个颜色表,根据前 256 个值为每个值(256 个值)分配颜色:

spdf@data$new = sample(0:255, length(spdf$x), replace=TRUE)
coltable = list(levels(spdf$col)[0:255])

现在我们可以成功写入文件了;请注意,我们必须指定类型和 NoData 值处理以避免错误:

writeGDAL(spdf[,'new'], '/Users/Benjamin/Desktop/test.tif', drivername = "GTiff", type="Byte", mvFlag=0, colorTables=coltable)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 2014-10-09
    • 2010-10-21
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多