invalid geometries from negative buffering in rgeos/sp
On Mon, Oct 7, 2013 at 5:51 AM, Roger Bivand <Roger.Bivand at nhh.no> wrote:
On Mon, 7 Oct 2013, Robert J. Hijmans wrote:
A more general fix might be to support NULL geometries in Spatial objects.
Maybe, but we do not have in sp a class for mixed types of geometries either,
True, but that is a different issue.
so we would have to define NULL of everything. OGC SFS has NULL, but I would argue that NULL geometries have no analytical meaning, like a point with no coordinate values - so we don't know where it is. It doesn't fit the Spatial class, unless we open for a bounding box with NA corners.
There have been cases where I thought it would have been handy, for example when geometries (e.g. point locations) are known for some, but not for all records in a data set. However, addition this type of support would add a significant amount of overhead to all functions (check for / remove NULL values; NA bounding box vaues).
In rgeos, the typical output if there is no positional data is the R NULL value. One might go towards objects with mixed geometries (GDAL is permitting them for the drivers that have them in the development version), but I don't see an analytical need.
Me neither
How often does, for example, newdata for predicting from a geostatistical model include both points and lines? Roger
Robert On Thu, Oct 3, 2013 at 6:29 AM, Roger Bivand <Roger.Bivand at nhh.no> wrote:
On Thu, 3 Oct 2013, Barry Rowlingson wrote:
Using scot_BNG from the rgdal package:
dsn <- system.file("vectors", package = "rgdal")[1]
scot_BNG <- readOGR(dsn=dsn, layer="scot_BNG")
and buffering with a sufficiently large negative width:
b=gBuffer(scot_BNG,width=-10000,byid=TRUE)
produces an object that gives an error on plot:
Yes, but ... The user gets a SpatialPolygonsDataFrame object with the data slot intact, but some of the polygons are clearly now invalid. Should we do book-keeping to only retain the data slot rows for valid polygons, only return the subset of valid polygons, or proceed as now, and have the user do: plot(b[gArea(b, byid=TRUE) > 0,]) What makes more sense? I'm open to suggestions ... Roger
plot(b)
Error in checkSlotAssignment(object, name, value) : assignment of an object of class ?NULL? is not valid for slot "coords" in an object of class ?Line?; is(value, "matrix") is not TRUE Which I think is because the negative buffer has shrunk a feature to nothing. b[1,] is fine but:
b[2,]
Error in SpatialPolygons(x at polygons[i], proj4string = CRS(proj4string(x))) : INTEGER() can only be applied to a 'integer', not a 'NULL' I'm not sure what the right thing to do here is. Either return a valid zero-area polygon (if that's not a contradiction in terms) or drop the degenerate cases? Barry
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
-- Roger Bivand Department of Economics, NHH Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
-- Roger Bivand Department of Economics, NHH Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no