Широко обговорювалася помилка самоперетину "TopologyException: Input geom 1", що виникає внаслідок неправильної геометрії полігону. Однак я не знайшов зручного рішення в Інтернеті, яке покладається виключно на функціональність R.
Наприклад, мені вдалося створити об’єкт "SpatialPolygons" з результатів map("state", ...)
наступних приємних відповідей Джоша О'Браєна тут .
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)
Проблема з цим широко застосовуваним набором даних полягає в тому, що самоперетин відбувається в точці, наведеній нижче.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
На жаль, ця проблема перешкоджає подальшому використанню 'spydf_states', наприклад при дзвінку rgeos::gIntersection
. Як я можу вирішити це питання зсередини R?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
ви побачите, що в цьому немає "начебто" - є самоперетин.