【问题标题】:extracting data from .tif raster layer in R- layer not matching lat/long从 R 层中的 .tif 栅格层中提取数据与纬度/经度不匹配
【发布时间】:2016-11-01 09:52:51
【问题描述】:

我有美国 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 坐标不在纬度/经度中,我希望这就是为什么我的 extract 命令无法从图层中提取任何数据以获取我的点列表的原因。抱歉,如果这是非常基本的并且已在其他地方得到回答,但我的搜索并没有产生一个清晰的简单答案。我对 R 很有经验,但对我在 R 中使用空间数据非常了解。如何准确投影栅格文件 r,以便我对 extract 的调用为 test.dat 中的站点生成适当的值基于他们的纬度/经度?

【问题讨论】:

  • 您的栅格位于投影坐标系中。您需要让您的点和栅格都使用相同的坐标系。假设您的 lat,long 在 wgs84 地理坐标中,那么最简单的方法是将栅格重新投影到 wgs84
  • @dww 他们都是 wgs84。如何将栅格重新投影到 wgs84?
  • r.proj = projectRaster(r, crs=crs('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'))
  • 试试 projectRaster (r, crs = CRS("+proj=longlat +datum=WGS84"))。为此,您需要 raster 和 sp 库
  • 还阅读了投影地理坐标系之间的区别。

标签: r raster


【解决方案1】:

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

library(rgdal)
library(raster)

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

现在你可以做

e <- extract(r, tp)

您应该按照 cmets 中的建议反其道而行之。这是因为栅格像元值需要通过变换来估计,因此数据质量会下降。此外,转换点的计算速度要快得多。

【讨论】:

  • 感谢您的解决和警告。会这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 2017-10-23
相关资源
最近更新 更多