通过R中的sf将经纬度序列转换为多边形

通过R中的sf将经纬度序列转换为多边形,r,sf,R,Sf,我有五个经纬度,它们形成了这样的形状 df <- c(order=1:5, lon=c(119.4,119.4,119.4,119.5,119.5), lat=c(-5.192,-5.192,-5.187,-5.187,-5.191)) 我不知道“sf”,但万一你指的是“sp”,这里是SPDF的完整结构 df <- data.frame(lon=c(119.4,119.4,119.4,119.5,119.5), lat=

我有五个经纬度,它们形成了这样的形状

df <- c(order=1:5,
        lon=c(119.4,119.4,119.4,119.5,119.5), 
        lat=c(-5.192,-5.192,-5.187,-5.187,-5.191))
我不知道“sf”,但万一你指的是“sp”,这里是SPDF的完整结构

df <- data.frame(lon=c(119.4,119.4,119.4,119.5,119.5), 
             lat=c(-5.192,-5.192,-5.187,-5.187,-5.191))

require(sp)
spdf <- SpatialPolygonsDataFrame(
  SpatialPolygons(
    Srl=list(
      Polygons(srl=list(
        Polygon(coords=df)
      ), ID=1)
    )
  ),
  data=data.frame(a=1)
)

plot(spdf)

df相当于@Yo B。回答时使用
sf

library(sf)
df <- data.frame(lon=c(119.4,119.4,119.4,119.5,119.5), 
                 lat=c(-5.192,-5.192,-5.187,-5.187,-5.191))

# You need first to close your polygon 
# (first and last points must be identical)
df <- rbind(df, df[1,])

poly <- st_sf(st_sfc(st_polygon(list(as.matrix(df)))), crs = 4326)
poly

## Simple feature collection with 1 feature and 0 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 119.4 ymin: -5.192 xmax: 119.5 ymax: -5.187
## epsg (SRID):    4326
## proj4string:    +proj=longlat +datum=WGS84 +no_defs
##   st_sfc.st_polygon.list.as.matrix.df....
## 1          POLYGON ((119.4 -5.192, 119...
然后,您可以从空间对象中提取每个元素,并检查它们的类:

完整sf对象:带有sfc几何体列的data.frame

class(poly)
## "sf"         "data.frame"
提取为列表的第三列:sfc对象

class(poly[[3]])
## "sfc_POLYGON" "sfc"    
几何体列的第一个元素:sfg多边形对象

class(poly[[3]][[1]])
## "XY"      "POLYGON" "sfg"  

我看到搜索结果中出现了这个问题,所以我想我应该提供一种更灵活的方法,从一系列
lat
lon
坐标在
sf
中创建多边形

st_as_sf
有一个参数
coords
,它将给定的点作为数据帧中的坐标列,并将这些列转换为
sf
几何图形。然后,由于
sf
dplyr
配合良好,我们可以
st_将这些点组合成一个
MULTIPOINT
st_cast
以转换成
多边形。与使用
st_polygon
的“手动”构造相比,这有一个优点,即我们不必仔细考虑关闭环或传递给构造函数的嵌套列表的正确级别,如果坐标列表中有多个多边形,我们可以使用
groupby
一次创建所有多边形

注意:从技术上讲,您可以使用
do_union=FALSE
summary
中执行此操作,但我认为此语法更清晰,更类似于正常的
summary

df链接到GEOS 3.6.1、GDAL 2.2.3、项目4.9.3
多边形%
st_as_sf(坐标=c(“lon”,“lat”),crs=4326)%>%
总结(几何=联合收割机(几何))%>%
st_cast(“多边形”)
多边形
#>具有1个要素和0个字段的简单要素集合
#>几何体类型:多边形
#>尺寸:XY
#>bbox:xmin:119.4ymin:-5.192xmax:119.5ymax:-5.187
#>epsg(SRID):4326
#>proj4string:+proj=longlat+datum=WGS84+no_defs
#>几何学
#>1个多边形((119.4-5.192119。。。
绘图(多边形)

由(v0.2.0)于2018年10月5日创建。

库(sfheaders)
从20191004开始在CRAN上创建,可以获取一个data.frame并将其转换为
sf
对象

library(sf)
library(sfheaders)

df <- data.frame(
  lon = c(119.4, 119.4, 119.4, 119.5, 119.5),
  lat = c(-5.192, -5.192, -5.187, -5.187, -5.191)
)

sfheaders::sf_polygon(
  obj = df
)
## given only two columns of data are in df there's no need to specify lon & lat arguments

# Simple feature collection with 1 feature and 1 field
# geometry type:  POLYGON
# dimension:      XY
# bbox:           xmin: 119.4 ymin: -5.192 xmax: 119.5 ymax: -5.187
# epsg (SRID):    NA
# proj4string:    
#   id                       geometry
# 1  1 POLYGON ((119.4 -5.192, 119...
库(sf)
图书馆(sfheaders)

df我可以在没有
st_-sf()
的情况下完成同样的事情。例如:
poly我在提供lon和lat列表时似乎无法
group_by
。例如,对于两个多边形,我提供的df如下:
df%group_by(AC_NO)%%st_as_-sf(
等。我得到一个错误,无法强制输入“list”“双重”,你知道我做错了什么吗?
class(poly[[3]][[1]])
## "XY"      "POLYGON" "sfg"  
library(sf)
library(sfheaders)

df <- data.frame(
  lon = c(119.4, 119.4, 119.4, 119.5, 119.5),
  lat = c(-5.192, -5.192, -5.187, -5.187, -5.191)
)

sfheaders::sf_polygon(
  obj = df
)
## given only two columns of data are in df there's no need to specify lon & lat arguments

# Simple feature collection with 1 feature and 1 field
# geometry type:  POLYGON
# dimension:      XY
# bbox:           xmin: 119.4 ymin: -5.192 xmax: 119.5 ymax: -5.187
# epsg (SRID):    NA
# proj4string:    
#   id                       geometry
# 1  1 POLYGON ((119.4 -5.192, 119...