Próbuję wykonać połączenie na wspólnym polu po scaleniu dwóch sąsiednich plików kształtów. Pliki kształtów kończą się co najmniej jednym cienkim kawałkiem przestrzeni między nimi. Podczas próby połączenia pojawia się następujący błąd osieroconej dziury:
Błąd w createPolygonsComment (p): rgeos_PolyCreateComment: osierocona dziura, nie można znaleźć zawierającego wielokąt dla dziury o indeksie 17
Pod tym linkiem przesłałem do Dropbox odtwarzalny przykład .
Oto kod, aby odtworzyć problem:
#loading required packages
require(sp)
require(rgdal)
require(maptools)
require(rgeos)
#load example data, set "dsn=" to your working directory or specify the path
example <- readOGR(dsn=".",layer="ReproducibleExample")
#Attempting a UnionSpatialPolygons based on the COUNTY field
example.df <- as(example, "data.frame")
countycol <- example.df$COUNTY
example.diss <- unionSpatialPolygons(example, countycol)
Zwroty:
Błąd w createPolygonsComment (p): rgeos_PolyCreateComment: osierocona dziura, nie można znaleźć zawierającego wielokąt dla dziury o indeksie 17
Wypróbowanie poprawki zaproponowanej tutaj i tutaj :
slot(example, "polygons") <- lapply(slot(example, "polygons"), checkPolygonsHoles)
Zwraca ten sam błąd, który pochodzi z próby połączenia, ale z innym numerem indeksu:
rgeos_PolyCreateComment: osierocona dziura, nie można znaleźć zawierającego wielokąta dla dziury o indeksie 30
Wypróbowanie poprawki zaproponowanej w pomocnym samouczku Rogera Bivanda
fix <- slot(example, "polygons")
fixa <- lapply(fix, checkPolygonsHoles)
Zwraca ten sam błąd przy indeksie 30 jak powyżej.
Inni podnieśli ten problem tu i tutaj , i chociaż powyższe rozwiązania wydają się działać w niektórych przypadkach, inne nie zostały rozwiązane. Jeden użytkownik użył QGIS, aby rozwiązać problem, a drugi miał naprawione 2 z 3 elementów, ale brak ostatecznego rozwiązania.
Wygląda na to, że ludzie nadal mają problemy pomimo tego, że kod działa od czasu do czasu. Czy ktoś znalazł rozwiązanie w R?
W ArcGIS wykonałem narzędzie „napraw geometrię” i to rozwiązało problem, ale wygląda na to, że powinna być poprawka w R.