'TopologyException: Geom đầu vào 1 không hợp lệ' Lỗi tự giao nhau phát sinh từ hình học đa giác không hợp lệ đã được thảo luận rộng rãi. Tuy nhiên, tôi chưa tìm thấy một giải pháp tiện lợi nào trên web chỉ dựa vào chức năng R.
Chẳng hạn, tôi đã quản lý để tạo một đối tượng 'SpatialPolygons' từ đầu ra của map("state", ...)
câu trả lời hay của Josh O'Brien tại đây .
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)
Vấn đề với bộ dữ liệu được áp dụng rộng rãi này là bây giờ việc tự giao nhau xảy ra tại điểm được đưa ra dưới đây.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
Thật không may, vấn đề này ngăn không cho sử dụng thêm 'spydf_states', ví dụ như khi gọi rgeos::gIntersection
. Làm thế nào tôi có thể giải quyết vấn đề này từ bên trong R?
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
bạn sẽ thấy không có "dường như" về điểm đó - có một giao điểm tự.