You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从rgdal迁移至sf包:为SpatialPolygonsDataFrame设置投影报错

解决sf包设置SpatialPolygonsDataFrame投影的错误问题

错误原因很明确:st_crs<-是sf包专为sf类对象设计的方法,而rasterToPolygons()返回的是sp框架下的SpatialPolygonsDataFrame对象,两者不兼容,因此报错。

解决方案:先转sf对象再设置投影

将sp对象转换为sf格式后,再使用sf的投影设置函数即可。具体步骤如下:

  1. 加载所需依赖包(确保raster包已加载,因为用到了栅格相关函数)
  2. 将SpatialPolygonsDataFrame转换为sf对象(用st_as_sf())
  3. 用sf的方法设置投影(两种方式可选)

完整代码示例:

library(sf)
library(raster)

ext <- extent(c(0, 20, 0, 20))
r <- raster(ext, res=1)  
r[] = 1:ncell(r)

# 生成sp格式的多边形对象
Output_Shapefile <- rasterToPolygons(r) 

prj <- "+proj=eqdc +lat_0=17.8333333333333 +lon_0=-66.4333333333333 +lat_1=18.4333333333333 +lat_2=18.0333333333333 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"

# 转换为sf对象
sf_polygons <- st_as_sf(Output_Shapefile)

# 设置投影方式1:赋值形式
st_crs(sf_polygons) <- prj

# 设置投影方式2:函数式(更推荐,符合sf的编程风格)
sf_polygons <- st_set_crs(sf_polygons, prj)

补充:若需保留sp对象的处理方式

如果暂时需要兼容旧的sp代码,可以直接使用sp包的proj4string<-方法(无需sf):

library(sp)
proj4string(Output_Shapefile) <- prj

内容的提问来源于stack exchange,提问作者Ilik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:13:14