从 R 层中的 .tif 栅格层中提取数据不匹配 lat/long
extracting data from .tif raster layer in R- layer not matching lat/long
我有美国 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 个测试站点,dput 格式:
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 坐标不在 latitude/longitude 中,我想这就是为什么我的 extract
命令无法从图层中为我的列表提取任何数据的原因点数。抱歉,如果这是非常基本的并且已在其他地方得到回答,但我的搜索并没有产生一个简单的答案,而且很清楚。我对 R 很有经验,但对我在 R 中使用空间数据非常了解。我怎样才能准确地投影光栅文件,r
以便我对 extract
的调用为我的网站生成适当的值在 test.dat
内基于他们的 latitude/longitude?
您应该将您的点投影到光栅的坐标参考系统。
library(rgdal)
library(raster)
sppoints <- SpatialPoints(points, proj4string=CRS('+proj=longlat +datum=WGS84'))
tp <- spTransform(sppoints, crs(r))
现在你可以做
e <- extract(r, tp)
你应该而不是按照评论中的建议反过来做。这是因为栅格像元值需要通过变换进行估计,因此数据质量会下降。此外,转换点在计算上要快得多。
我有美国 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 个测试站点,dput 格式:
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 坐标不在 latitude/longitude 中,我想这就是为什么我的 extract
命令无法从图层中为我的列表提取任何数据的原因点数。抱歉,如果这是非常基本的并且已在其他地方得到回答,但我的搜索并没有产生一个简单的答案,而且很清楚。我对 R 很有经验,但对我在 R 中使用空间数据非常了解。我怎样才能准确地投影光栅文件,r
以便我对 extract
的调用为我的网站生成适当的值在 test.dat
内基于他们的 latitude/longitude?
您应该将您的点投影到光栅的坐标参考系统。
library(rgdal)
library(raster)
sppoints <- SpatialPoints(points, proj4string=CRS('+proj=longlat +datum=WGS84'))
tp <- spTransform(sppoints, crs(r))
现在你可以做
e <- extract(r, tp)
你应该而不是按照评论中的建议反过来做。这是因为栅格像元值需要通过变换进行估计,因此数据质量会下降。此外,转换点在计算上要快得多。