坐标中的多边形

Posted

技术标签:

【中文标题】坐标中的多边形【英文标题】:polygons from coordinates 【发布时间】:2017-11-04 05:42:42 【问题描述】:

我有一个 data.framelats 和 lngs,它们定义了矩形框的边界,就像这样

  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

将其转换为包含POLYGONs 列的sf 对象的最简单方法是什么?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于坐标中的多边形的主要内容,如果未能解决你的问题,请参考以下文章

坐标中的多边形

在坐标轴中的多边形,以原点为圆心旋转一定角度,旋转公式是啥

二维坐标系中的点积叉积多边形面积

使用JAVA中的geotools从定义距离(km)内的线(GPS坐标)生成多边形

如何测试一个点是不是在二维整数坐标中的凸多边形内?

计算多边形的最小面积矩形