L'errore di autointersezione "TopologyException: Input geom 1 is invalid" derivante da geometrie poligonali non valide è stato ampiamente discusso. Tuttavia, non ho trovato una soluzione conveniente sul Web che si basa esclusivamente sulla funzionalità R.
Ad esempio, sono riuscito a creare un oggetto "SpatialPolygons" dall'output di map("state", ...)
seguire la bella risposta di Josh O'Brien qui .
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)
Il problema con questo set di dati ampiamente applicato è ora che l'autointersezione si verifica nel punto indicato di seguito.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
Sfortunatamente, questo problema impedisce qualsiasi ulteriore utilizzo di "spydf_states", ad esempio durante la chiamata rgeos::gIntersection
. Come posso risolvere questo problema da R?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
vedrai che non c'è "apparentemente", c'è un autointersezione.