从GeoTiff文件在R中创建半变异图时遇gridded方法错误求助
解决gstat::variogram处理GeoTIFF栅格时的"gridded"方法错误
你遇到的错误:
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘gridded’ for signature ‘"data.frame"’
错误根源
代码里ptA是rasterToPoints(A)生成的三列矩阵(x、y坐标+栅格值),dfA是单独提取的栅格值dataframe,两者没有关联关系。variogram无法将独立的坐标矩阵和数据框匹配,触发了找不到gridded方法的错误——这个方法需要空间对象或者严格对应的坐标+数据结构。
gstat::variogram的核心输入规则
- 优先用空间对象:比如
sp包的SpatialPointsDataFrame、SpatialGridDataFrame,此时只需传入公式(如变量~1),无需额外指定locations和data; - 用坐标+数据的组合时:
locations需传入N行2列的坐标矩阵/数据框,data必须包含公式中的变量,且行顺序和坐标完全一致; - 公式格式:
变量~1表示仅分析变量的空间变异(无协变量),有协变量时写成变量~协变量1+协变量2。
从GeoTIFF生成半变异图的正确代码
方法1:直接用带坐标的完整数据框
rasterToPoints(A)会直接输出包含x、y、栅格值的矩阵,转成dataframe后可直接用于variogram:
library(sp) library(raster) library(gstat) # 读取GeoTIFF的第5层 A <- raster("C:/Users/Mark/EX.tif", 5) # 提取坐标+栅格值,转为dataframe pt_df <- as.data.frame(rasterToPoints(A)) # 生成半变异图(注意公式里的变量名要和pt_df的列名一致,比如你的栅格列名是EX_1) v <- gstat::variogram(EX_1 ~ 1, data = pt_df, coords = ~x + y)
方法2:转为空间点对象处理
把栅格转成SpatialPointsDataFrame空间对象,variogram可直接识别空间信息:
library(sp) library(raster) library(gstat) A <- raster("C:/Users/Mark/EX.tif", 5) # 将栅格转为SpatialPointsDataFrame sp_A <- as(A, "SpatialPointsDataFrame") # 生成半变异图,直接传入公式和空间对象 v <- gstat::variogram(EX_1 ~ 1, data = sp_A)
结果验证
生成半变异图对象后,用plot(v)即可可视化结果。
内容的提问来源于stack exchange,提问作者MJHorst
相关产品推荐
相关产品推荐

