相当于@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 小插图以获得清晰而详细的解释sf
,sfc
并将sfg
对象总结为:
用于表示简单特征的三个类是:
- sf,具有特征属性和特征几何的表(data.frame),其中包含
- sfc,包含每个特征(记录)的几何图形的列表列,由
- sfg,单个简单特征的特征几何。
该st_sfc
函数仅构建几何列(这是一个多边形列表 - 这里只有一个多边形)。中的“c”sfc
代表“列”。该函数st_sf
构建一个完整的sf
对象(它也有一个data.frame
类),它是一个带有几何列的数据框。在给定的示例中,多边形没有附加数据(无属性)。您可以通过构建 data.frame 来附加数据:
poly <- st_sf(data.frame(landuse = "Forest",
size = 23 ,
st_sfc(st_polygon(list(as.matrix(df))))),
crs = 4326)
poly
## ## Simple feature collection with 1 feature and 2 fields
## geometry type: POLYGON
## dimension: XYZ
## bbox: xmin: 1 ymin: 119.4 xmax: 5 ymax: 119.5
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## landuse size geometry
## 1 Forest 23 POLYGON Z ((1 119.4 -5.192,...
然后,您可以从空间对象中提取这些元素中的每一个并检查它们的类:
完整的 sf 对象:带有 sfc 几何列的 data.frame
class(poly)
## "sf" "data.frame"
提取为列表的第三列:sfc 对象
class(poly[[3]])
## "sfc_POLYGON" "sfc"
几何列的第一个元素:sfg 多边形对象
class(poly[[3]][[1]])
## "XY" "POLYGON" "sfg"