我需要使用空间数据帧点从栅格中提取高度值。
跨越两个对象(光栅和矢量),我刚刚获得了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
答案 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)