R重装后crop函数处理sf对象报错,st_crop无法正常运行求助
解决R代码裁剪地理数据的报错问题
问题1:crop函数不支持sf对象
当前ne_countries()默认返回sf格式的空间对象,而原代码中使用的crop()是raster包针对传统Spatial类的函数,无法兼容sf对象。提供两种解决方法:
方法一:让
ne_countries返回传统Spatial对象
调用时添加returnclass = "sp"参数,即可沿用原crop()逻辑:library(raster) library(rnaturalearth) world <- ne_countries(scale = 110, returnclass = "sp") atl_extent <- extent(-69, 20, -55, 65) study_area <- crop(world, atl_extent)方法二:改用sf生态工具处理
直接基于sf对象操作,但需先解决几何有效性问题(对应第二个报错)。
问题2:st_crop报错几何无效
报错Loop 0 is not valid: Edge 0 crosses edge 78是因为sf默认启用的S2几何引擎对多边形自相交问题检测更严格。按以下步骤解决:
- 先修复sf对象的几何有效性
- 再执行裁剪操作
完整代码:
library(sf) library(rnaturalearth) # 获取sf格式数据并修复几何 world <- ne_countries(scale = 110) |> st_make_valid() # 定义裁剪范围(格式为c(xmin, ymin, xmax, ymax)) atl_extent <- c(-69, -55, 20, 65) study_area <- st_crop(world, atl_extent)
若修复几何后仍报错,可尝试关闭S2几何引擎(适用于无需高精度地理计算的场景):
sf::sf_use_s2(FALSE) # 重新执行裁剪 study_area <- st_crop(world, atl_extent)
内容的提问来源于stack exchange,提问作者Carolina Dias
相关产品推荐
相关产品推荐

