在R语言中实现空间点与Landsat栅格影像叠加绘图的问题
问题分析与解决方案
看起来你踩了空间数据处理里两个常见的坑:坐标顺序搞反 + 直接给点赋值投影而非做投影转换,这就是单独能画但叠加不上的核心原因,我帮你一步步解决:
1. 先修正坐标顺序
SpatialPoints 默认的坐标规则是 (经度, 纬度)(先东向坐标,再北向坐标),但你的coords_glaciers里把纬度放在了x列、经度放在了y列,这会直接导致空间位置完全错乱。先调整坐标顺序:
# 交换x和y,改成(经度,纬度)的正确顺序 coords_glaciers <- data.frame(x = prec_year$longitude, y = prec_year$latitude) head(coords_glaciers)
2. 给点设置正确的原始坐标系
你的点数据是经纬度格式,对应的标准坐标系是WGS84(也就是EPSG:4326),先给SpatialPoints设置这个地理坐标系,而不是直接套用Landsat的UTM投影:
library(sp) # 定义WGS84地理坐标系的proj4字符串 wgs84_crs <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") pts_glaciers <- SpatialPoints(coords = coords_glaciers, proj4string = wgs84_crs)
3. 将点转换为Landsat的UTM投影
现在需要把经纬度的点转换到和Landsat一致的UTM投影,而不是直接给点赋值UTM投影(直接赋值会把经纬度数值错误当成UTM的米单位坐标,完全不在影像的范围内):
# 获取Landsat影像的投影信息 landsat_proj <- projection(landsat) # 使用spTransform完成投影转换 pts_glaciers_utm <- spTransform(pts_glaciers, CRS(landsat_proj))
4. 再次尝试叠加绘制
现在用转换后的点进行叠加,建议加个显眼的颜色和符号,方便确认是否显示:
plotRGB(landsat, r=5, g=4, b=3) plot(pts_glaciers_utm, add = TRUE, col = "red", pch = 19, cex = 0.8)
补充说明:为什么之前的方法无效?
你之前直接给经纬度点赋值UTM投影,相当于告诉R:“这些29-30、94-96的数值是UTM坐标系下的米单位坐标”,但UTM zone46的实际坐标范围(x大概40万m左右,y大概330万m左右)和你的经纬度数值完全不重叠,所以绘制时点会出现在影像范围之外,自然看不到。
内容的提问来源于stack exchange,提问作者David S.
相关产品推荐
相关产品推荐

