'TopologyException: Input geom 1 tidak valid' kesalahan persimpangan sendiri yang timbul dari geometri poligon tidak valid telah banyak dibahas. Namun, saya belum menemukan solusi yang mudah di web yang hanya mengandalkan fungsionalitas R.
Sebagai contoh, saya telah berhasil membuat objek 'SpatialPolygons' dari hasil map("state", ...)
mengikuti jawaban bagus Josh O'Brien di sini .
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)
Masalah dengan dataset yang diterapkan secara luas ini sekarang adalah persimpangan-sendiri terjadi pada titik yang diberikan di bawah ini.
rgeos::gIsValid(spydf_states)
[1] FALSE
Warning message:
In RGEOSUnaryPredFunc(spgeom, byid, "rgeos_isvalid") :
Self-intersection at or near point -122.22023214285259 38.060546477866055
Sayangnya, masalah ini mencegah penggunaan lebih lanjut dari 'spydf_states', misalnya saat menelepon rgeos::gIntersection
. Bagaimana saya bisa mengatasi masalah ini dari dalam R?
r
polygon
rgeos
self-intersection
fdetsch
sumber
sumber
plot(spydf_states, xlim=c(-122.1,-122.3),ylim=c(38,38.1))
Anda akan melihat tidak ada "tampaknya" tentang hal itu - ada persimpangan diri.Jawaban:
Menggunakan buffer nol lebar membersihkan banyak masalah topologi di R.
Namun bekerja dengan koordinat lat-panjang yang tidak diproyeksikan dapat menyebabkan Anda
rgeos
membuang peringatan.Berikut adalah contoh lanjutan yang memproyeksikan proyeksi Albers terlebih dahulu:
sumber
gBuffer
"peretasan" bekerja?sf
Anda juga dapat menggunakansf::st_buffer(x, dist = 0)
PostGIS