[R-sig-Geo] rgeos::gBuffer(, byid=TRUE) fails
Roger Bivand
Roger.Bivand at nhh.no
Tue Feb 9 14:01:08 CET 2016
On Mon, 8 Feb 2016, Roger Bivand wrote:
> On Mon, 8 Feb 2016, Josh O'Brien wrote:
>
>> Oops. The post's title should have read "rgeos::gBuffer( , byid=TRUE)
>> fails when...". (I inadvertently left out the `byid=TRUE` bit).
>>
>> My apologies.
>>
>> On Mon, Feb 8, 2016 at 9:59 AM, Josh O'Brien <joshmobrien at gmail.com>
>> wrote:
>> > Hello,
>> >
>> > Not sure if this would be considered a bug, but it did recently bite
>> > me (and might bite others using gBuffer(..., byid=TRUE)
>> > programatically).
>> >
>
> Thanks for a reproducible example - for rgeos 0.3-14 this gives a segfault,
> in 0.3-16 an error as the data.frame has only one row, but three Polygons
> objects are returned. As you note, the issue is triggered by byid=TRUE but
> there is only one input object; only one buffer is created, around the NE
> island.
>
> I'll look into this - it'll need debugging in C, close to recent bug-fixes
> (then concerned with pre-sp-MultiPoint object signalling - multiple objects
> making up features).
I have committed a fix to R-Forge (checking whether the length of spgeom
== 1 and byid == TRUE, if so set byid=FALSE and warn). The problem was
visible in the C code, but there we don't have an sp-class generic
"length" measure of the # features, so the modification is at the R level.
Which OS would you like to test under?
Best wishes,
Roger
>
> And yes, this is a reasonable place to report, it should give users a
> realistic view of how many corner cases actually exist and require someone's
> attention.
>
> Roger
>
>> >
>> > library(sp)
>> > library(rgdal)
>> > library(rgeos)
>> >
>> > ## Example SpatialPolygonsDataFrame
>> > x <- readOGR(system.file("etc/shapes", package="spdep"),
>> > "sids")[c(89,28),]
>> > plot(x, col=c('dodgerblue', 'wheat'))
>> >
>> > ## Works fine on object with multiple @Polygons in @polygons, even
>> > ## if one of the @Polygons is multi-part
>> > gBuffer(x, width=0.01, byid=TRUE)
>> >
>> > ## Works with a single single-part @Polygons object in @polygons
>> > gBuffer(x[1,], width=0.01, byid=TRUE)
>> >
>> > ## Fails with a single _multi-part_ @Polygons object in @polygons
>> > gBuffer(x[2,], width=0.01, byid=TRUE)
>> >
>> >
>> > Thanks (and please let me know an rgeos-specific note like this would
>> > be better posted elsewhere),
>> >
>> > Josh O'Brien
>>
>> _______________________________________________
>> 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, Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; fax +47 55 95 91 00
e-mail: Roger.Bivand at nhh.no
http://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
http://depsy.org/person/434412
More information about the R-sig-Geo
mailing list