我在美国有关于N沉积的数据,可以在压缩目录的.tif
文件中找到,可在此处访问:nadp.sws.uiuc.edu/maplib/grids/2006/TotalN_dep_2006.zip
。
我使用raster
包将数据加载到R中:
require(raster)
r <- raster('/path/to/dep_totalN_2006.tif')
然后我有一些坐标,我想从栅格中提取值。以下是以输入格式进行测试的6个站点:
test.dat <- structure(list(latitude = c(46.414597, 46.137664, 42.258794,
44.287538, 46.567187, 46.205438), longitude = c(-86.030373, -85.990492,
-85.847991, -85.806588, -87.954285, -87.481934)), .Names = c("latitude",
"longitude"), class = "data.frame", row.names = c(NA, 6L))
> test.dat
latitude longitude
1 46.41460 -86.03037
2 46.13766 -85.99049
3 42.25879 -85.84799
4 44.28754 -85.80659
5 46.56719 -87.95428
6 46.20544 -87.48193
通常,从这一点开始,提取数据非常简单。我会使用以下内容从图层中获取数据:
points <- cbind(test.dat$longitude,test.dat$latitude)
test.dat$out <- extract(r, points)
然而,这不起作用。它没有错误,它只产生NA值的向量。我可以绘制栅格图层,这可以找出出错的线索:
plot(r)
显然,栅格图层的x / y坐标不是纬度/经度,我希望这就是为什么我的extract
命令无法从图层列表中提取任何数据的原因。如果这是非常基本的并且已在其他地方得到解答,请道歉,但我的搜索没有得出一个明确的答案。我对R很有经验,但我对R中空间数据的使用非常清楚。我如何准确地投射光栅文件r
,以便我对extract
的调用为我的网站生成适当的值根据纬度/经度在test.dat
内?
答案 0 :(得分:1)
您应该将点投影到栅格的坐标参照系。
library(rgdal)
library(raster)
sppoints <- SpatialPoints(points, proj4string=CRS('+proj=longlat +datum=WGS84'))
tp <- spTransform(sppoints, crs(r))
现在你可以做到
e <- extract(r, tp)
你应该不按照评论中的建议反过来做。这是因为需要通过变换来估计栅格单元值,因此数据质量劣化。此外,转换点计算速度要快得多。