The key to creating polygons is that the coordinates have to be in sequence to form a closed area (i.e., the last point is the same as the first point).
So your data will need a bit of manipulation to create the coordinates, and put them in order. In my example I've done this with an lapply
Then the rest can be taken from the sf examples
lst <- lapply(1:nrow(df), function(x){
## create a matrix of coordinates that also 'close' the polygon
res <- matrix(c(df[x, 'north_lat'], df[x, 'west_lng'],
df[x, 'north_lat'], df[x, 'east_lng'],
df[x, 'south_lat'], df[x, 'east_lng'],
df[x, 'south_lat'], df[x, 'west_lng'],
df[x, 'north_lat'], df[x, 'west_lng']) ## need to close the polygon
, ncol =2, byrow = T
)
## create polygon objects
st_polygon(list(res))
})
## st_sfc : creates simple features collection
## st_sf : creates simple feature object
sfdf <- st_sf(geohash = df[, 'geohash'], st_sfc(lst))
sfdf
# Simple feature collection with 2 features and 1 field
# geometry type: POLYGON
# dimension: XY
# bbox: xmin: 48.64746 ymin: -4.350586 xmax: 48.69141 ymax: -4.262695
# epsg (SRID): NA
# proj4string: NA
# geohash st_sfc.lst.
# 1 gbsuv POLYGON((48.69141 -4.350586...
# 2 gbsuy POLYGON((48.69141 -4.306641...
plot(sfdf)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…