如何从栅格文件中提取空间df高度值?

时间:2019-06-19 13:47:57

标签: r dataframe spatial r-raster

我需要使用空间数据帧点从栅格中提取高度值。

跨越两个对象(光栅和矢量),我刚刚获得了NA。

> lat41_42_sp
class      : RasterLayer
dimensions : 1201, 10801, 12972001  (nrow, ncol, ncell)
resolution : 0.0008333333, 0.0008333333  (x, y)
extent     : -9.000417, 0.0004166633, 40.99958, 42.00042  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
source     : memory
names      : layer
values     : -12, 2307  (min, max)

> spdf
class       : SpatialPointsDataFrame
features    : 1757
extent      : -46.58056, 71.00404, -158.0419, 174.9681  (xmin, xmax, ymin, ymax)
crs         : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
variables   : 3
names       : WINDFARM_NAME,  LATITUDE,  LONGITUDE
min values  :   'A_Farrapa', -46.58056, -158.04192
max values  :     'Zuromin',  71.00404,   174.9681

空间数据帧的范围更长,但是RasterLayer中有一些点。

但是它不起作用:(。

> my<-extract(lat41_42_sp,spdf)
> my[1:10]
 [1] NA NA NA NA NA NA NA NA NA NA
> head(my)
[1] NA NA NA NA NA NA
> tail(my)
[1] NA NA NA NA NA NA

3 个答案:

答案 0 :(得分:0)

这可能是因为所有点都在栅格之外。我不能确定这一点,但是所提供的信息表明,这些点的空间范围比栅格的范围要大得多。

您可以通过这样做检查栅格上是否有任何点

plot(lat41_42_sp)
points(spdf)

但是显然您的spdf是不正确的:您的纬度(y)在-158.0419和174.9681之间;当然,这些一定是纬度。这表明您在创建spdf时犯了一个错误,即您使用(“ latitude”,“ longitude”)而不是(“ longitude”,“ latitude”)。您还可以从显示的LONGITUDE和LATITUDE范围中看到这一点。

答案 1 :(得分:0)

尝试仅选择栅格中的点:

library(raster)
spdf_in_lat41_42_sp = crop(spdf ,lat41_42_sp)
my<-extract(lat41_42_sp, spdf_in_lat41_42_sp)

答案 2 :(得分:-1)