如何用terra包创建匹配多边形分辨率的栅格并完成矢栅转换?
将多边形Shapefile转换为匹配分辨率的栅格(terra包)
核心思路
要创建与多边形尺寸匹配的栅格对象,关键是让栅格的像素分辨率接近多边形的实际边长,同时保证栅格范围完全覆盖所有多边形。
步骤1:确定匹配的分辨率
从你的数据属性(MER_LU_X/MER_RU_X等)来看,原始多边形应为规则分幅的平面投影数据,当前已转为WGS84经纬度。可通过两种方式确定分辨率:
方式A:自动计算平均分辨率
基于所有多边形的地理面积,推导近似经纬度分辨率:
# 计算每个多边形的地理面积(WGS84下自动采用 geodesic 算法) poly_areas <- expanse(TKshape) # 将平均面积的平方根转换为经纬度单位(1度≈111000米) avg_res <- sqrt(mean(poly_areas)) / 111000
方式B:手动指定已知分辨率
如果明确多边形的物理尺寸(比如TK_25代表25km×25km分幅),直接转换为经纬度分辨率:
# 纬度方向分辨率:25km 换算为度 res_lat <- 25000 / 111000 # 经度方向分辨率:结合平均纬度修正(经度1度的长度随纬度变化) mean_lat <- mean(TKshape$HOCHWERT)/100000 # 从属性提取近似纬度值 res_lon <- 25000 / (111000 * cos(rad(mean_lat)))
步骤2:创建匹配的栅格对象
用rast()函数基于多边形的空间范围和计算好的分辨率生成栅格:
# 方式A:使用自动计算的平均分辨率 r <- rast(TKshape, res = avg_res) # 方式B:使用手动指定的分辨率 r <- rast(TKshape, res = c(res_lon, res_lat))
rast(TKshape)会自动继承多边形的CRS(WGS84)和空间范围res参数控制像素分辨率,顺序为经度(x)、纬度(y)
步骤3:执行栅格化
用rasterize()完成多边形到栅格的转换:
# 将多边形的NAME属性值栅格化 rr <- rasterize(TKshape, r, field = "NAME")
验证结果
查看生成的栅格信息,确认分辨率和范围符合预期:
rr
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

