You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

经纬度点无法在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

火山引擎 最新活动