Der "TopologyException: Input Geom 1 is invalid" -Selbstschnittfehler, der sich aus ungültigen Polygongeometrien ergibt, wurde ausführlich erörtert. Im Internet habe ich jedoch keine bequeme Lösung gefunden, die sich ausschließlich auf die R-Funktionalität stützt.
Zum Beispiel habe ich es geschafft, ein 'SpatialPolygons'-Objekt aus der Ausgabe von map("state", ...)
Josh O'Briens netter Antwort hier zu erstellen .
library(maps)
library(maptools)
map_states = map("state", fill = TRUE, plot = FALSE)
IDs = sapply(strsplit(map_states$names, ":"), "[[", 1)
spydf_states = map2SpatialPolygons(map_states, IDs = IDs, proj4string = CRS("+init=epsg:4326"))
plot(spydf_states)
Das Problem mit diesem weit verbreiteten Datensatz besteht nun darin, dass die Selbstüberschneidung an dem unten angegebenen Punkt auftritt.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
Leider verhindert dieses Problem die weitere Verwendung von 'spydf_states', zB beim Aufruf rgeos::gIntersection
. Wie kann ich dieses Problem in R lösen?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
Sie feststellen, dass es keinen "scheinbaren" Umstand gibt - es gibt eine Selbstüberschneidung.