从rgdal迁移至sf包:为SpatialPolygonsDataFrame设置投影报错
解决sf包设置SpatialPolygonsDataFrame投影的错误问题
错误原因很明确:st_crs<-是sf包专为sf类对象设计的方法,而rasterToPolygons()返回的是sp框架下的SpatialPolygonsDataFrame对象,两者不兼容,因此报错。
解决方案:先转sf对象再设置投影
将sp对象转换为sf格式后,再使用sf的投影设置函数即可。具体步骤如下:
- 加载所需依赖包(确保
raster包已加载,因为用到了栅格相关函数) - 将
SpatialPolygonsDataFrame转换为sf对象(用st_as_sf()) - 用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
相关产品推荐
相关产品推荐

