经纬度点无法在1000x1000m栅格上绘制的技术求助
解决经纬度点无法绘制到1000x1000m ETRS89栅格的问题
嘿,我一眼就看出核心问题大概率是坐标系统不匹配搞的鬼!你的点是经纬度(应该是WGS84坐标系,也就是咱们常说的GPS坐标),而两个栅格是ETRS89投影坐标系(用米做单位的平面坐标)。虽然250m的栅格能显示,可能是R偷偷帮你做了临时转换,但1000m的栅格要么范围不搭,要么转换参数没对齐,咱们得手动规范处理才行。
第一步:先搞清楚所有数据的坐标系
先确认你的1000m栅格具体用的是ETRS89下的哪个投影(比如UTM带,ETRS89 UTM 32N对应的EPSG是25832),跑个代码看看:
# 查看1000m栅格的坐标系信息 library(raster) crs(raster_1000m)
另外你的经纬度点默认是WGS84(EPSG:4326),这个基本没跑。
第二步:把点数据转成和栅格一致的坐标系
别直接给SpatialPoints硬套proj4string,那是错的!咱们得先把地理坐标的点转换成栅格用的ETRS89投影坐标,推荐用更现代的sf包(比rgdal好用多了):
library(sf) # 1. 把经纬度转成sf格式的点,明确指定WGS84坐标系 points_sf <- st_as_sf(data.frame(lon = ds$lon, lat = ds$lat), coords = c("lon", "lat"), crs = 4326) # WGS84的EPSG代码 # 2. 转换成和1000m栅格完全一致的坐标系 points_proj <- st_transform(points_sf, crs = crs(raster_1000m)) # 要是你非得用老的SpatialPoints格式,转一下就行 library(sp) points_sp <- as(points_proj, "Spatial")
第三步:验证并绘制
现在用转换后的点来画图,肯定能显示:
# 先画1000m栅格,再叠加转换后的点 plot(raster_1000m) plot(points_sp, add = TRUE, col = "darkred", pch = 19, cex = 0.8)
额外排查点
- 看看点是不是不在栅格范围内:用
extent(raster_1000m)看栅格的坐标范围,再对比st_coordinates(points_proj)里的点坐标,要是点全在栅格外面,那肯定看不到! - 确认坐标系参数完全一致:如果你的栅格用的是自定义的proj4字符串,别自己瞎写,直接复制栅格的crs参数用,确保转换时参数100%匹配。
为啥250m的栅格能显示?大概率是R的自动投影匹配在小范围栅格上凑巧生效了,但这不是规范操作,手动转换才是稳当的做法。
内容的提问来源于stack exchange,提问作者Dunce Joe




