O erro de auto-interseção 'TopologyException: Input geom 1 is invalid' que surge de geometrias de polígonos inválidas foi amplamente discutido. No entanto, não encontrei uma solução conveniente na Web que dependa apenas da funcionalidade R.
Por exemplo, eu consegui criar um objeto 'SpatialPolygons' a partir da saída da map("state", ...)
boa resposta de Josh O'Brien aqui .
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)
O problema com esse conjunto de dados amplamente aplicado é agora que a auto-interseção ocorre no ponto fornecido abaixo.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
Infelizmente, esse problema impede qualquer uso adicional de 'spydf_states', por exemplo, ao chamar rgeos::gIntersection
. Como posso resolver esse problema no R?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
verá que não há "aparentemente" a respeito - há uma auto-interseção.