我想知道如何基于特定颜色的矩阵编写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)
答案 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)