从R层中的.tif栅格层提取数据不匹配lat / long

时间:2016-06-29 15:21:48

标签: r raster

我在美国有关于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)

enter image description here

显然,栅格图层的x / y坐标不是纬度/经度,我希望这就是为什么我的extract命令无法从图层列表中提取任何数据的原因。如果这是非常基本的并且已在其他地方得到解答,请道歉,但我的搜索没有得出一个明确的答案。我对R很有经验,但我对R中空间数据的使用非常清楚。我如何准确地投射光栅文件r,以便我对extract的调用为我的网站生成适当的值根据纬度/经度在test.dat内?

1 个答案:

答案 0 :(得分:1)

您应该将点投影到栅格的坐标参照系。

library(rgdal)
library(raster)

sppoints <- SpatialPoints(points, proj4string=CRS('+proj=longlat +datum=WGS84'))
tp <- spTransform(sppoints, crs(r))

现在你可以做到

e <- extract(r, tp)

你应该按照评论中的建议反过来做。这是因为需要通过变换来估计栅格单元值,因此数据质量劣化。此外,转换点计算速度要快得多。