来自坐标的多边形
polygons from coordinates
我有一个 data.frame
,其中 lat
和 lng
定义了矩形框的边界,就像这样
geohash north_lat south_lat east_lng west_lng
1 gbsuv 48.69141 48.64746 -4.306641 -4.350586
2 gbsuy 48.69141 48.64746 -4.262695 -4.306641
将其转换为包含 POLYGON
列的 sf
对象的最简单方法是什么?
创建多边形的关键是坐标必须依次形成一个封闭区域(即最后一个点与第一个点相同)。
因此您的数据将需要一些操作来创建坐标,并按顺序排列它们。在我的示例中,我使用 lapply
完成了此操作
那么剩下的就可以取自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)
我有一个 data.frame
,其中 lat
和 lng
定义了矩形框的边界,就像这样
geohash north_lat south_lat east_lng west_lng
1 gbsuv 48.69141 48.64746 -4.306641 -4.350586
2 gbsuy 48.69141 48.64746 -4.262695 -4.306641
将其转换为包含 POLYGON
列的 sf
对象的最简单方法是什么?
创建多边形的关键是坐标必须依次形成一个封闭区域(即最后一个点与第一个点相同)。
因此您的数据将需要一些操作来创建坐标,并按顺序排列它们。在我的示例中,我使用 lapply
那么剩下的就可以取自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)