2017-06-02 199 views
3

我有一个data.framelat S和lng s表示定义的矩形框的界限,像这样多边形

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 

什么是这个转换为持有列的sf对象的最简单方法POLYGON s?

回答

4

创建多边形的关键是坐标必须按顺序形成一个封闭区域(即最后一个点与第一个点相同)。

因此,您的数据需要一些操作来创建坐标,并将它们按顺序排列。在我的例子,我有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) 

enter image description here

采取这样做