El error de auto-intersección 'TopologyException: Input geom 1 is invalid' que surge de geometrías de polígonos inválidas ha sido ampliamente discutido. Sin embargo, no he encontrado una solución conveniente en la web que se base únicamente en la funcionalidad R.
Por ejemplo, he logrado crear un objeto 'SpatialPolygons' a partir del resultado de map("state", ...)
seguir la buena respuesta de Josh O'Brien aquí .
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)
El problema con este conjunto de datos ampliamente aplicado es ahora que la auto-intersección ocurre en el punto que se indica a continuación.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
Desafortunadamente, este problema impide el uso posterior de 'spydf_states', por ejemplo, al llamar rgeos::gIntersection
. ¿Cómo puedo resolver este problema desde R?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
verá que no hay "aparentemente" al respecto, hay una auto-intersección.