如何从栅格提取空间点数据框高程值?提取返回NA问题求助
解决从栅格提取高程返回全NA的问题
从你提供的对象信息来看,问题的根源非常明显——你的spdf空间点数据框把纬度和经度的坐标搞反了,导致所有点的位置完全不在栅格图层的范围内,自然提取不到任何有效值,全返回NA。
问题分析
看spdf的extent信息:
extent : -46.58056, 71.00404, -158.0419, 174.9681 (xmin, xmax, ymin, ymax)
正常地理坐标中,纬度(y轴)的范围是**-90°到90°**,但这里的ymin/ymax居然是-158和174,这明显是把经度(范围-180°到180°)当成了纬度值。再看spdf的变量:LATITUDE列的最小值是-46.58,最大值是71.00,这其实是经度的合理范围;而LONGITUDE列的范围是-158到174,这才是纬度被错误地当成了经度。
简单说,你创建spdf时,把坐标顺序搞反了(用了纬度在前、经度在后,而正确的顺序应该是经度在前、纬度在后)。
解决方案
你需要修正spdf的坐标顺序,让经度作为x轴,纬度作为y轴,具体步骤如下:
- 提取正确的坐标对(经度在前,纬度在后):
# 从原数据框中取出正确的坐标列 correct_coords <- spdf@data[, c("LONGITUDE", "LATITUDE")]
- 重新创建正确的SpatialPointsDataFrame:
# 保持原投影信息不变 spdf_fixed <- SpatialPointsDataFrame( coords = correct_coords, data = spdf@data, proj4string = spdf@proj4string # 直接复用原投影,避免手动输入出错 )
- 验证修正后的范围是否合理:
extent(spdf_fixed)
正常情况下,输出的ymin/ymax应该在-90到90之间,xmin/xmax在-180到180之间。
- 重新执行提取操作:
my <- extract(lat41_42_sp, spdf_fixed) # 查看非NA的结果 my[!is.na(my)]
额外验证步骤
为了确保点确实落在栅格范围内,可以可视化检查:
plot(lat41_42_sp) # 绘制栅格图层 points(spdf_fixed, col = "red", pch = 19, cex = 0.5) # 叠加修正后的点
如果有红色点出现在栅格区域内,说明坐标修正正确,提取结果应该正常。
内容的提问来源于stack exchange,提问作者scastipe87
相关产品推荐
相关产品推荐

