R语言栅格化SpatialPolygonsDataFrame失败,无法生成填充Shapefile的规则点
问题诊断与修复方案
核心错误点:
你的代码步骤3没有完成平面坐标系转换——spTransform(GUA, projGUA)是将数据转换为它本身的坐标系,等于没做任何转换。原Shapefile采用地理坐标系(经纬度,单位为度),直接用res=500创建栅格的话,500度的分辨率远大于关岛的地理范围,导致栅格为空,后续步骤全部失效。
修复后的完整代码
# 加载依赖包 library(raster) library(sp) # 1. 加载Shapefile GUA <- raster::shapefile('Guam3BufferPoly.shp') # 3. 转换为关岛对应的UTM平面坐标系(EPSG:32655,单位为米) utm_crs <- CRS("+proj=utm +zone=55 +datum=WGS84 +units=m +no_defs") putm <- spTransform(GUA, utm_crs) # 4. 创建栅格(此时res=500代表500米间隔) ext <- extent(putm) r <- raster(ext, res = 500) # 5. 栅格化多边形并提取点 r2 <- rasterize(putm, r) pts <- rasterToPoints(r2, spatial = TRUE) # 6. 转换回经纬度并绘图 wgs84 <- CRS("+proj=longlat +datum=WGS84") pts_lonlat <- spTransform(pts, wgs84) plot(pts_lonlat, pch = '*')
关键修正说明
- 替换步骤3的目标CRS为UTM 55N(关岛所在的标准平面投影带),单位为米,这样
res=500的设置符合实际需求(500米间隔的规则点)。 - 明确用
CRS()函数定义坐标系对象,避免格式错误。 - 补充了依赖包加载的代码,确保运行环境完整。
额外验证技巧
如果不确定目标区域的UTM带,可以用以下代码自动计算:
# 计算多边形中心经度,确定UTM带 center_lon <- coordinates(GUA)[1,1] utm_zone <- floor((center_lon + 180)/6) + 1 # 自动生成对应UTM坐标系字符串 utm_crs_auto <- CRS(paste0("+proj=utm +zone=", utm_zone, " +datum=WGS84 +units=m +no_defs"))
内容的提问来源于stack exchange,提问作者Heidi
相关产品推荐
相关产品推荐

