使用其他多边形裁剪多边形。 (R 中的 sf 对象)

问题描述 投票:0回答:1

我有火灾多边形和生态区数据。我正在尝试删除所有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”。 我一直无法克服上述错误。

r geospatial spatial sf
1个回答
0
投票

我怀疑您的问题来自 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, ]

如果它不起作用,问题应该在数据中。

© www.soinside.com 2019 - 2024. All rights reserved.