在R语言中从空间点创建凸包多边形并裁剪栅格的问题求助
凸包创建与栅格裁剪问题解决
问题根源
报错是因为raster包的crop/extract函数不直接支持纯sfc_POLYGON类型对象,且你的凸包仅为sfc几何对象而非完整的空间数据框,同时可能存在投影不匹配的问题。
修正步骤
1. 完善凸包对象并保存为多边形格式
st_convex_hull(st_union(pts_1949))返回的是单个几何对象(sfc_POLYGON),需要转为完整的sf数据框才能正常保存和后续处理:
# 将凸包转为sf数据框 hull_1949_sf <- st_sf(geometry = hull_1949) # 保存为Shapefile(或其他多边形格式) st_write(hull_1949_sf, "hull_1949.shp") # 若需GeoJSON格式 st_write(hull_1949_sf, "hull_1949.geojson")
2. 正确裁剪栅格
注意crop仅裁剪栅格到凸包的边界范围,若需按多边形形状精确保留内部栅格值,需配合mask使用。以下提供两种兼容方案:
方案一:基于sf对象直接处理(推荐,主流空间数据框架)
先确保凸包与栅格投影一致,再执行裁剪和mask:
# 对齐凸包与栅格的投影 hull_1949_sf <- st_transform(hull_1949_sf, crs = crs(temp_1940)) # 裁剪栅格到凸包范围 temp_cropped <- crop(temp_1940, extent(hull_1949_sf)) # 按凸包形状精确裁剪(外部栅格值设为NA) temp_masked <- mask(temp_cropped, hull_1949_sf)
方案二:转为Spatial对象兼容旧版raster
若你的raster版本较旧,可将sf对象转为传统Spatial类型:
# 转为SpatialPolygon对象 hull_1949_sp <- as(hull_1949_sf, "Spatial") # 对齐投影 hull_1949_sp <- spTransform(hull_1949_sp, CRSobj = crs(temp_1940)) # 裁剪+精确mask temp_cropped <- crop(temp_1940, hull_1949_sp) temp_masked <- mask(temp_cropped, hull_1949_sp)
内容的提问来源于stack exchange,提问作者Morgan Mize
相关产品推荐
相关产品推荐

