基于颜色矩阵编写GeoTiff文件

时间:2013-05-20 23:33:44

标签: r rgdal

我想知道如何基于特定颜色的矩阵编写GTiff?这可能是当颜色不代表定量变量,而是定性空间现象,如人口统计集群。如果我有例如一个1000x1000的颜色值矩阵(像'#FF0000'这样的字符串),我可以用grid.raster(mtrx, interpolate=FALSE)轻松地绘制这些颜色,但这很难与其他shapefile重叠。我也可以将它们转换为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)

1 个答案:

答案 0 :(得分:0)

在原始通话中,我猜测SPDF是原始data.frame,而不是SpatialPixelsDataFrame期待的writeGDAL。无论如何,在最小的例子中你有第二个问题。

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

  

默认为NULL,如果不为NULL,则列表的长度等于   band,带有NULL组件,用于没有颜色表的band,或者其中之一   整数矩阵的红色,绿色,蓝色和alpha值(0-255)或a   颜色的字符向量。允许的颜色数量可能会有所不同   与司机。

在您的示例中,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)

Resulting GeoTiff image with color table applied