R语言栅格化SpatialPolygonsDataFrame后如何获取正确单元格维度
问题原因
- 单位不匹配:你的矢量使用WGS84经纬度坐标系,单位为十进制度,你设置
res=100意味着每个栅格的宽高为100度,而你的研究区经度跨度仅约0.4度、纬度跨度仅约0.65度,远小于100度,因此只能生成1行1列的栅格。错误的分辨率设置还会导致生成的栅格范围远大于原始矢量范围,出现你看到的extent异常的问题。 - 多余的CRS删除操作:你手动执行
crs(p) <- NULL会破坏矢量的坐标参考系信息,进一步干扰栅格参数计算。
解决方法
如果你需要的res=100是指100米分辨率,需要先将矢量转换为以米为单位的平面投影(如对应区域的UTM投影),再执行栅格化操作,代码如下:
# 加载依赖包 library(raster) library(rgdal) # 读取矢量数据,不要删除CRS p <- shapefile('MadaGranary') # 转换为对应区域的UTM投影(你的研究区对应UTM 47N,EPSG:32647) p_utm <- spTransform(p, CRS("+init=epsg:32647")) # 基于投影后的矢量范围创建栅格,res=100对应100米分辨率 r.raster <- raster(extent(p_utm), res = 100, crs = crs(p_utm)) # 执行栅格化 p.r <- rasterize(p_utm, r.raster, field = "id") # 打印查看维度 print(p.r)
如果你确实需要使用经纬度坐标系生成栅格,可按实际需求设置对应十进制度单位的分辨率,例如100米对应的经纬度分辨率约为0.00089度,可设置res=0.00089,无需转换投影。
内容的提问来源于stack exchange,提问作者Mukhtar Abdi
相关产品推荐
相关产品推荐

