Following on from an answer about intersecting polygons with lines to chop up a polygon into smaller polygon units (in QGIS), I wanted to try the same thing in R. However, I cannot seem to find a method that works!
over()
doesn't have a method for polygons intersecting with lines; I found gIntersection()
from rgeos but it fails:
require(sp)
require(rgeos)
poly <- readShapePoly("polygon.shp")
lines <- readShapeLines("lines.shp")
chopped <- gIntersection(poly, lines)
Giving:
Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") :
UnsupportedOperationException: GeometryGraph::add(Geometry *): unknown geometry type: N4geos4geom18GeometryCollectionE
Update: Here's a link to the files in question.
Update 2: PaulG notes that it works and after updating rgeos and R I got rid of the error above. Thanks PaulG ...
However, gIntersection results in a SpatialLines object no matter whether I put in (poly, lines) or (lines, poly) - whereas the operation I did in QGIS (or Arc, back in the bad ol' days) will divide a polygon with the lines and result in a polygon object, not line.
So, how do I chop up my polygon with the lines and get polygons out?
rgeos::gIntersection()
to also be quite fussy about the nature of theSpatial*
object you pass it. I have also solved very cryptic error messages from this function by using thebyid=TRUE
parameter. Not sure if this will work in your case.Spatial*
object. Try producing aSpatialLines
and aSpatialPolygons
object from first principles and compare what you have there to the object you load usingreadShapePoly()
. It could be something like IDs are not continuous, or hole attributes.