来自 ArcGIS 的 Shapefile 孔未保留在 R 或 QGIS 中

Shapefile holes from ArcGIS not preserved in R or QGIS

我的同事给我发了几个 shapefile 供我分析。这些 shapefile 中应该有漏洞。以下是其中一个 shapefile 在其计算机上的 ArcGIS 中的外观示例:

但是,在我的电脑上,无论我使用 QGIS 还是 R(我的机器上没有 ArcGIS),文件看起来像这样(在第一个 shapefile 图像的左侧放大):

我在 QGIS 版本 3.12 中尝试了 "Fix Geometries",但并没有让我一路走下去——一些洞被修复了,其他重叠的多边形仍然存在:

我尝试使用 cleanGeo 包中的 clgeo_Clean() 在 R(版本 3.6.1,运行 Mac OS 10.15.4 上修复此问题, 但所做的只是删除重叠的多边形而不将它们变回孔。我需要保留这些洞,但我无法从家用计算机访问 ArcGIS(感谢 covid-19)。有没有办法修复这个文件,或者我的同事在发送给我时可以做些什么不同的事情?这是示例文件的 link(原始文件,不是使用 "Fix Geometries" 处理的文件):link to sample problem shapefile

我阅读了使用 sf 中的 shapefile 并转换为多边形以尝试与覆盖在其他多边形上而不是不同的各个多边形相交。其中一些多边形似乎具有无效的几何形状,因此也有必要使用 lwgeom::st_make_valid()。然后我能够成功地与多边形相交并过滤那些重叠的多边形。

如果您愿意,还可以 st_union 结果返回到多面体而不是多边形集合。

library(lwgeom)
library(sf)
library(dplyr)
library(ggplot2)

shp <- read_sf('AAbe.shp')

shp2 <- shp %>%
  st_cast("POLYGON")  %>%
  st_make_valid() %>%
  st_intersection() %>%
  filter(n.overlaps < 2)

ggplot(shp2) +
  geom_sf(fill = 'yellow') +
  coord_sf(xlim = c(-98, -96), ylim = c(17, 20))