如何从terra的SpatRaster对象构造包含经纬度及对应数值的数据框
解决方案
核心实现代码
terra包本身已经内置了直接输出带坐标数据框的原生方法,全程不需要额外加载其他空间包,实现步骤如下:
# 加载terra包 library(terra) # 读取单变量nc文件为SpatRaster r <- rast("your_file.nc") # 直接转换为带坐标、栅格值的数据框 # xy=TRUE 表示输出行列对应的坐标值,na.rm=TRUE 会自动剔除无值的栅格单元 df <- as.data.frame(r, xy = TRUE, na.rm = TRUE) # 修改列名符合你的要求 colnames(df) <- c("lon", "lat", names(r))
可选优化操作
- 如果你的SpatRaster原始坐标系不是WGS84经纬度,可先做投影转换再转数据框:
# 转换为WGS84经纬度坐标系(EPSG:4326) r_wgs84 <- project(r, "EPSG:4326") # 再执行上述转数据框的操作即可
- 若栅格体量极大,全量提取内存占用过高,可先随机采样再生成数据框:
# 随机采样10000个有效栅格单元生成数据框,可根据需求调整采样量 df_sample <- spatSample(r, size = 10000, xy = TRUE, na.rm = TRUE) colnames(df_sample) <- c("lon", "lat", names(r))
后续地质统计适配
生成的三列数据框可直接适配绝大多数R地质统计包的输入要求:
- 用
gstat包拟合变异函数时,可直接指定locations = ~lon+lat传入坐标 - 用
geoR包构造geodata对象时,可直接将坐标和数值传入对应参数
内容的提问来源于stack exchange,提问作者Estacionario
相关产品推荐
相关产品推荐

