我有火灾多边形和生态区数据。我正在尝试删除所有not落入指定生态区的火多边形。我曾尝试使用 st_crop 和 st_intersection,但它一直返回相同的错误。
#Subsetting fire polygons according to size
Dplus_size<-ten_yr_fire[ten_yr_fire$GIS_ACRES>=100,]
#Selecting for desired ecoregion (Sierra Nevada)
ecoregion<-st_read("ca_eco_l3.shp")
ecoregion_nad83<-st_transform(ecoregion, st_crs(Dplus_size))
snevada<-ecoregion_nad83[ecoregion_nad83$US_L3NAME == "Sierra Nevada",]
#Here is where I am running into issues:
snv_fire<-st_crop(Dplus_size , snevada)
Error in scan(text = lst[[length(lst)]], quiet = TRUE) :
scan() expected 'a real', got 'ParseException:'
Error in (function (msg) : ParseException: Unknown WKB type 12
两个对象都是类“sf”和“data.frame”。 我一直无法克服上述错误。
我怀疑您的问题来自 CRS 和/或您在
Dplus_size
中使用的 geom 列。
这个可复制的小例子产生你想要的东西:
library(sf)
# one big polygon
pol1 = st_polygon(list(rbind(c(0,0),c(8,0),c(8,8),c(0,8),c(0,0))))
# your two cases: inside and outside
pol_in = st_polygon(list(rbind(c(4,4),c(4,6),c(6,6),c(6,4),c(4,4))))
pol_out = st_polygon(list(rbind(c(10,2),c(10,3),c(11,3),c(11,2),c(10,2))))
fire <- st_sf(data.frame(name = c("pol_in", "pol_out")),
geometry = st_sfc(pol_in, pol_out))
# quick plot
plot(pol1, xlim = c(0,12))
plot(fire$geometry, add = T)
# what you want
fire[pol1, ]
如果它不起作用,问题应该在数据中。