我一直在处理R中的数据框,它有一个坐标列(其值几乎不规则地间隔,因为我必须将它们从这一组中的分秒格式转换为小数:http://www.arcgis.com/home/item.html?id=5771199a57cc4c29ad9791022acd7f74)和列与每个坐标关联的值,如下所示:
Latitude Longitude Elevation MAT MWMT MCMT TD MAP MSP AHM SHM DD_0 DD5 DD_18 DD18 NFFD
54.99285 -129.9792 -2 6.8 14.4 -1.7 16.1 2473 696 6.8 20.6 283 1384 4100 30 246
54.99285 -129.9708 10 6.7 14.4 -1.8 16.1 2456 691 6.8 20.8 287 1383 4109 30 245
54.99285 -129.9625 5 6.8 14.4 -1.8 16.2 2431 686 6.9 21.0 286 1392 4097 31 246
# ... and so on.
由此,我想构建一个对应于每列的RasterBrick图层。我最初认为,我的数据框命名为' clim_df':
clim_brick <- rasterFromXYZ(clim_df, crs = NA)
可以将每个列转换为砖块中的栅格图层,但抛出了以下错误(在我将纬度和经度列名称转换为&#39; y&#39;和&#39; x& #39):
Error in rasterFromXYZ(clim_df) : x cell sizes are not regular
从https://www.rdocumentation.org/packages/raster/versions/2.6-7/topics/rasterFromXYZ开始,似乎坐标必须均匀分布才能使此功能正常工作。
有没有办法解决这个问题?任何帮助将不胜感激。
P.S。我之前使用Stack Overflow来解决问题,但从未直接问过问题。如果我没有正确格式化,或者我没有提供足够的信息,请告诉我。谢谢!
答案 0 :(得分:0)
您可以尝试将digits
参数设置为较低的数字:
# Create a sample raster:
r <- raster(nrow = 10, ncol = 10, xmn = 0, xmx = 10, ymn = 0, ymx = 10, crs = NA)
r[] <- runif(100)
xyz <- rasterToPoints(r)
# Add a small amount of error to the coordinates:
xyz[, 1:2] <- xyz[, 1:2] + as.matrix(expand.grid(xerror = runif(10, -1e-4, 1e-4), yerror = runif(10, -1e-4, 1e-4)))
# Try to convert back to raster:
rasterFromXYZ(xyz)
# Error in rasterFromXYZ(xyz) : x cell sizes are not regular
# Try again with a lower value of `digits`:
rasterFromXYZ(xyz, digits = 3)
# class : RasterLayer
# dimensions : 10, 10, 100 (nrow, ncol, ncell)
# resolution : 0.9998915, 0.9998748 (x, y)
# extent : -2.843587e-05, 9.998886, 0.001149737, 9.999898 (xmin, xmax, ymin, ymax)
# coord. ref. : NA
# data source : in memory
# names : layer
# values : 0.007020388, 0.9953495 (min, max)