ข้อผิดพลาด 'TopologyException: Input geom 1 ไม่ถูกต้อง' ซึ่งเกิดขึ้นจากรูปหลายเหลี่ยมที่ไม่ถูกต้องซึ่งมีการกล่าวถึงกันอย่างกว้างขวาง อย่างไรก็ตามฉันไม่พบวิธีแก้ไขปัญหาที่สะดวกบนเว็บที่อาศัยการทำงานของ R เพียงอย่างเดียว
ยกตัวอย่างเช่นฉันมีการจัดการเพื่อสร้างวัตถุ 'SpatialPolygons จากการส่งออกของmap("state", ...)
ต่อไปนี้เป็นคำตอบที่ดี Josh โอไบรอันที่นี่
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))
คุณจะเห็นว่าไม่มี "ที่ดูเหมือน" เกี่ยวกับมัน - มีจุดตัดด้วยตนเอง