比较空间多边形并保留或删除 R 中的公共边界

Compare spatial polygons and keep or delete common boundaries in R

我曾经使用 R 在 GADM(select 比利时)上绘制比利时地图。

我使用以下方法导入并绘制比利时的外部边界:

belgium <-readRDS("gadm36_BEL_0_sp.rds")
plot(belgium)

这给了我:

我使用以下方法导入并绘制比利时各省的边界:

provinces <-readRDS("gadm36_BEL_2_sp.rds")
plot(provinces)

这给了我:

我想要的是 dataframe 省份边界不在比利时边界之外:

我尝试使用 over()intersect() 等,但还没有找到这样做的方法。我猜可以使用几种方法:

谢谢,如果你有解决办法。 格雷戈尔

我从该站点 (https://www.gadm.org/download_country_v3.html) 下载了 sf 格式的文件,因为 sf 包更容易处理。

library(dplyr)
library(sf)

provinces <- readRDS("gadm36_BEL_2_sf.rds")

interiors <- st_intersection(provinces) %>% 
  filter(n.overlaps > 1)

interiors

# Number of columns truncated for clarity:
#   interiors %>% select(VARNAME_2, geometry, n.overlaps)
Simple feature collection with 30 features and 2 fields
geometry type:  GEOMETRY
dimension:      XY
bbox:           xmin: 2.851679 ymin: 49.8004 xmax: 6.033082 ymax: 51.35568
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
First 10 features:
                                                                                                            VARNAME_2
1                                                                            Amberes|Antuérpia|Antwerp|Anvers|Anversa
2                                                                            Amberes|Antuérpia|Antwerp|Anvers|Anversa
3  Brussel Hoofstadt|Brusselse Hoofdstedelijke Gewest|Brüssel|Bruxelas|Région de Bruxelles-Capitale|Brussels|Bruselas
4                                                                                                   Limbourg|Limburgo
5                   Flandres Oriental|Fiandra Orientale|Flandes Oriental|Flandre orientale|East Flanders|Ost Flandern
6                                                                            Amberes|Antuérpia|Antwerp|Anvers|Anversa
7                                                                            Amberes|Antuérpia|Antwerp|Anvers|Anversa
8                                                                            Amberes|Antuérpia|Antwerp|Anvers|Anversa
9                   Flandres Oriental|Fiandra Orientale|Flandes Oriental|Flandre orientale|East Flanders|Ost Flandern
10                                                Brabant Flamand|Brabante Flamenco|Brabante Flamengo|Flemish Brabant
   n.overlaps                       geometry
1           2 MULTILINESTRING ((5.239571 ...
2           2 MULTILINESTRING ((4.327078 ...
3           2 MULTILINESTRING ((4.403365 ...
4           2 MULTILINESTRING ((5.117446 ...
5           2 MULTILINESTRING ((4.243931 ...
6           3       POINT (4.994605 51.0414)
7           3      POINT (4.243931 51.04332)
8           2 MULTILINESTRING ((4.994605 ...
9           2 MULTILINESTRING ((3.466959 ...
10          2 MULTILINESTRING ((5.025736 ...

用图检查:

plot(interiors$geometry)

您在这里所做的是寻找各省与其他所有省的空间交集。然后你过滤掉它只是一个省份重叠的交叉点 (n.overlaps == 1)。这样一来,您只能获得一个或多个省份与另一个省份 (n.overlaps > 1) 接触的内部边界,而不是单独的任何省份(这将是外部边界)。

这是这个优秀答案的更新版本:


要去除地图和数据集中圈出的点(3个省份的交点),可以使用:

interiors %>% filter(!st_is(., "POINT"))