如何将DataFrame点数据写入现有栅格图层生成0-1值栅格文件
点坐标匹配栅格赋值实现方案
前置准备
先加载所需依赖包,未安装可先执行install.packages(c("sf", "raster")):
library(sf) library(raster)
实现步骤
- 校准栅格投影
你提供的目标栅格CRS属性为NA,这是坐标匹配失败的核心原因,首先给栅格赋值与点一致的WGS84投影:
# 请将代码中的Blank_Map替换为你自己的栅格对象名称 crs(Blank_Map) <- "EPSG:4326"
- 对齐点与栅格投影(后续更换投影场景可复用该步骤)
points_proj <- st_transform(points, crs = crs(Blank_Map))
- 栅格化点并赋值
将点所在的栅格单元赋值为1,其余单元保留初始0值:
# 若旧版本raster包不兼容sf对象,可先执行转换:points_sp <- as(points_proj, "Spatial"),再将x参数替换为points_sp # fun参数可确保同个栅格内多个点也仅赋值1,不会重复计数 result_raster <- rasterize( x = points_proj, y = Blank_Map, field = 1, fun = function(x) 1, background = 0 )
- 结果验证
# 绘制结果栅格 plot(result_raster) # 叠加原始点验证匹配是否正确,正常所有红点都落在值为1的栅格内 plot(st_geometry(points_proj), pch = 16, col = "red", add = TRUE)
- 保存结果栅格
# 替换为你需要的输出路径,支持tif/asc等常用栅格格式 writeRaster( result_raster, filename = "./point_match_raster.tif", format = "GTiff", overwrite = TRUE )
注意事项
- 若存在落在栅格范围外的点会被自动忽略,可执行
sum(!st_intersects(points_proj, st_as_sfc(st_bbox(Blank_Map)), sparse = FALSE))统计超出范围的点数量 - 如果需要保留原始栅格的其他属性,可删除
background参数,未被点覆盖的栅格会自动继承原始栅格的0值
内容的提问来源于stack exchange,提问作者FanCou
相关产品推荐
相关产品推荐

