[R-sig-Geo] How to create inward (shrinking) buffer zones with st_buffer()

Bede-Fazekas Ákos b|@|ev||@t @end|ng |rom gm@||@com
Mon Feb 19 11:24:34 CET 2024


Dear Xiang,

sure it is possible. I suggest using a CRS that is projected, e.g. 3857 
(Web Mercator), or turn off s2 geometry. If you turn off s2, then 
st_buffer() will interpret the dist parameter in degrees. Anyway, if you 
choose a small enough number, then you'll get a non-empty geometry.

 > sf_use_s2(FALSE)
Spherical geometry (s2) switched off
 > st_buffer(a, -100)
dist is assumed to be in decimal degrees (arc_degrees).
Geometry set for 1 feature  (with 1 geometry empty)
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: NA ymin: NA xmax: NA ymax: NA
Geodetic CRS:  WGS 84
POLYGON EMPTY
Warning message:
In st_buffer.sfc(a, -100) :
   st_buffer does not correctly buffer longitude/latitude data
 > st_buffer(a, -0.001)
dist is assumed to be in decimal degrees (arc_degrees).
Geometry set for 1 feature
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -2.533411 ymin: 51.40595 xmax: -2.489763 ymax: 51.4315
Geodetic CRS:  WGS 84
POLYGON ((-2.533083 51.41747, -2.528692 51.4204...
Warning message:
In st_buffer.sfc(a, -0.001) :
   st_buffer does not correctly buffer longitude/latitude data

(I don't know why s2 can't deal with negative distance if the CRS is 
WGS-84.)

HTH,
Ákos
____________
Ákos Bede-Fazekas
Centre for Ecological Research, Hungary

2024. 02. 19. 11:04 keltezéssel, Xiang Ye via R-sig-Geo írta:
> Dear community,
>
> I am learning some basic geometry operation functions of sf package including st_buffer().
>
> It seems there should be no wonder if I provide a negative value to the dist argument in st_buffer(), I should expect an inward/shrinking buffer zone (I also followed here: https://gis.stackexchange.com/questions/392505/can-i-use-r-to-do-a-buffer-inside-polygons-shrink-polygons-negative-buffer). However, it turn out to be as long as I provide a negative value, the output will be an empty geometry:
>
> library(sf)
> library(spDataLarge)
> st_geometry(bristol_zones[1, ]) -> a    # a is the exemplary data set
>
>> a
> Geometry set for 1 feature
> Geometry type: MULTIPOLYGON
> Dimension:     XY
> Bounding box:  xmin: -2.534502 ymin: 51.40487 xmax: -2.488435 ymax: 51.43478
> Geodetic CRS:  WGS 84
> MULTIPOLYGON (((-2.510462 51.42878, -2.507985 5...
>> st_buffer(a, 100)
> Geometry set for 1 feature
> Geometry type: POLYGON
> Dimension:     XY
> Bounding box:  xmin: -2.536248 ymin: 51.40393 xmax: -2.486907 ymax: 51.43598
> Geodetic CRS:  WGS 84
> POLYGON ((-2.517834 51.43188, -2.518218 51.4318...
>> st_buffer(a, -100)
> Geometry set for 1 feature  (with 1 geometry empty)
> Geometry type: POLYGON
> Dimension:     XY
> Bounding box:  xmin: NA ymin: NA xmax: NA ymax: NA
> Geodetic CRS:  WGS 84
> POLYGON EMPTY
>
> So I would like to know if it is possible to create inward buffer zones with st_buffer()? If st_buffer() is not designed to perform this, what is the best alternative?
>
> Thank you, and have a great start of the week!
>
> 叶翔 YE, Xiang
> THINKING SPATIALLY<http://www.linkedin.com/in/spatialyexiang>.
> Ph.D. in Spatial Statistics
>
> 	[[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo


-- 
Ezt az e-mailt átvizsgálta az Avast AntiVirus szoftver.
www.avast.com



More information about the R-sig-Geo mailing list