R:删除边界框的重叠区域并创建多边形

问题描述

我想创建一个不包含 2 个选定区域的多边形边界框:

我有 2 个边界框:

bb1 <- c(xmin = 11.23602,ymin =  47.80478,xmax = 11.88867,ymax =  48.24261)
bb2 <- c(xmin = 11.46067,ymin = 48.05556,xmax = 11.69851,ymax  = 

我可以使用他的函数将它们转换为点矩阵:

library(sf)
get_sc_bBox<- function(bb){
  return(st_coordinates(st_as_sfc(st_bBox(bb))))
}

我如何从 bb1删除 bb2 的区域并创建一个新的边界框(多边形)来排除 bb2 的那些区域重叠 bb1 ?

解决方法

应该这样做:

suppressMessages(library(sf))
suppressMessages(library(ggsflabel))

# use st_bbox() to make it an actual bounding box,## then st_as_sfc to make a it a polygon
bb1 <- c(xmin = 11.23602,ymin =  47.80478,xmax = 11.88867,ymax =  48.24261) %>% 
  st_bbox() %>%
  st_as_sfc()
bb2 <- c(xmin = 11.46067,ymin = 48.05556,xmax = 11.69851,ymax  = 48.21477) %>% 
  st_bbox() %>%
  st_as_sfc()
bb3 <- c(xmin = 12.08761161,ymin = 47.82664071,xmax = 12.17363439,ymax = 47.88453729) %>% 
  st_bbox() %>%
  st_as_sfc()

#polygon covering all three rectangles
bb_all <- st_union(bb1,bb2) %>%
  st_union(bb3) %>%
  st_bbox() %>%
  st_as_sfc()

# remove bb3 and bb2 from the full bounding box
polygon_with_holes <- st_difference(bb_all,bb3) %>%
  st_difference(bb2)

ggplot(polygon_with_holes) + 
  geom_sf(fill = 'green',alpha = .3)

reprex package (v0.3.0) 于 2021 年 3 月 30 日创建