L'erreur d'auto-intersection «TopologyException: Input geom 1 is invalid» qui provient de géométries de polygones invalides a été largement discutée. Cependant, je n'ai pas trouvé de solution pratique sur le Web qui repose uniquement sur la fonctionnalité R.
Par exemple, j'ai réussi à créer un objet «SpatialPolygons» à partir de la sortie de la map("state", ...)
suite de la belle réponse de Josh O'Brien ici .
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)
Le problème avec cet ensemble de données largement appliqué est maintenant que l'auto-intersection se produit au point indiqué ci-dessous.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
Malheureusement, ce problème empêche toute autre utilisation de «spydf_states», par exemple lors de l'appel rgeos::gIntersection
. Comment puis-je résoudre ce problème depuis R?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
vous verrez qu'il n'y a pas "apparemment" à ce sujet - il y a une auto-intersection.