如何将带有坐标的数据框转换为R中的多个多边形

问题描述 投票:0回答:1

我有一个数据框,其中每一行都是邻域的坐标列表;

t <- structure(list(lng = list(c(-43.265319264, -43.265206066, -43.265037676,
-43.264643583, -43.2645450269999, -43.263920055, -43.2639192469999,
-43.263965775, -43.263980804, -43.264317852, -43.264328206, -43.265107563,
-43.2653157409999, -43.265692949, -43.266565236, -43.266706805,
-43.2669489259999, -43.2683438619999, -43.268048516, -43.267176575,
-43.2665180779999, -43.267464548, -43.2670880159999, -43.265996715,
-43.265660937, -43.26551661, -43.265319264), c(-43.265319264,
-43.265206066, -43.265037676, -43.264643583, -43.2645450269999,
-43.263920055, -43.2639192469999, -43.263965775, -43.263980804,
-43.264317852, -43.264328206, -43.265107563, -43.2653157409999,
-43.265692949, -43.266565236, -43.266706805, -43.2669489259999,
-43.2683438619999, -43.268048516, -43.267176575, -43.2665180779999,
-43.267464548, -43.2670880159999, -43.265996715, -43.265660937,
-43.26551661, -43.265319264), c(-43.265319264, -43.265206066,
-43.265037676, -43.264643583, -43.2645450269999, -43.263920055,
-43.2639192469999, -43.263965775, -43.263980804, -43.264317852,
-43.264328206, -43.265107563, -43.2653157409999, -43.265692949,
-43.266565236, -43.266706805, -43.2669489259999, -43.2683438619999,
-43.268048516, -43.267176575, -43.2665180779999, -43.267464548,
-43.2670880159999, -43.265996715, -43.265660937, -43.26551661,
-43.265319264), c(-43.265319264, -43.265206066, -43.265037676,
-43.264643583, -43.2645450269999, -43.263920055, -43.2639192469999,
-43.263965775, -43.263980804, -43.264317852, -43.264328206, -43.265107563,
-43.2653157409999, -43.265692949, -43.266565236, -43.266706805,
-43.2669489259999, -43.2683438619999, -43.268048516, -43.267176575,
-43.2665180779999, -43.267464548, -43.2670880159999, -43.265996715,
-43.265660937, -43.26551661, -43.265319264), c(-43.265319264,
-43.265206066, -43.265037676, -43.264643583, -43.2645450269999,
-43.263920055, -43.2639192469999, -43.263965775, -43.263980804,
-43.264317852, -43.264328206, -43.265107563, -43.2653157409999,
-43.265692949, -43.266565236, -43.266706805, -43.2669489259999,
-43.2683438619999, -43.268048516, -43.267176575, -43.2665180779999,
-43.267464548, -43.2670880159999, -43.265996715, -43.265660937,
-43.26551661, -43.265319264), c(-43.265319264, -43.265206066,
-43.265037676, -43.264643583, -43.2645450269999, -43.263920055,
-43.2639192469999, -43.263965775, -43.263980804, -43.264317852,
-43.264328206, -43.265107563, -43.2653157409999, -43.265692949,
-43.266565236, -43.266706805, -43.2669489259999, -43.2683438619999,
-43.268048516, -43.267176575, -43.2665180779999, -43.267464548,
-43.2670880159999, -43.265996715, -43.265660937, -43.26551661,
-43.265319264), c(-43.265319264, -43.265206066, -43.265037676,
-43.264643583, -43.2645450269999, -43.263920055, -43.2639192469999,
-43.263965775, -43.263980804, -43.264317852, -43.264328206, -43.265107563,
-43.2653157409999, -43.265692949, -43.266565236, -43.266706805,
-43.2669489259999, -43.2683438619999, -43.268048516, -43.267176575,
-43.2665180779999, -43.267464548, -43.2670880159999, -43.265996715,
-43.265660937, -43.26551661, -43.265319264), c(-43.265319264,
-43.265206066, -43.265037676, -43.264643583, -43.2645450269999,
-43.263920055, -43.2639192469999, -43.263965775, -43.263980804,
-43.264317852, -43.264328206, -43.265107563, -43.2653157409999,
-43.265692949, -43.266565236, -43.266706805, -43.2669489259999,
-43.2683438619999, -43.268048516, -43.267176575, -43.2665180779999,
-43.267464548, -43.2670880159999, -43.265996715, -43.265660937,
-43.26551661, -43.265319264), c(-43.265319264, -43.265206066,
-43.265037676, -43.264643583, -43.2645450269999, -43.263920055,
-43.2639192469999, -43.263965775, -43.263980804, -43.264317852,
-43.264328206, -43.265107563, -43.2653157409999, -43.265692949,
-43.266565236, -43.266706805, -43.2669489259999, -43.2683438619999,
-43.268048516, -43.267176575, -43.2665180779999, -43.267464548,
-43.2670880159999, -43.265996715, -43.265660937, -43.26551661,
-43.265319264), c(-43.265319264, -43.265206066, -43.265037676,
-43.264643583, -43.2645450269999, -43.263920055, -43.2639192469999,
-43.263965775, -43.263980804, -43.264317852, -43.264328206, -43.265107563,
-43.2653157409999, -43.265692949, -43.266565236, -43.266706805,
-43.2669489259999, -43.2683438619999, -43.268048516, -43.267176575,
-43.2665180779999, -43.267464548, -43.2670880159999, -43.265996715,
-43.265660937, -43.26551661, -43.265319264)), lat = list(c(-22.891130748,
-22.8911411509999, -22.891046197, -22.8907952669999, -22.89078769,
-22.891165407, -22.891165933, -22.891241755, -22.891230881, -22.891850978,
-22.891870027, -22.891427452, -22.8916389189999, -22.892022089,
-22.8926351289999, -22.892664855, -22.8926343209999, -22.8917045229999,
-22.8911884789999, -22.89174932, -22.8909129579999, -22.890431931,
-22.8897554919999, -22.890296049, -22.890720254, -22.890984793,
-22.891130748), c(-22.891130748, -22.8911411509999, -22.891046197,
-22.8907952669999, -22.89078769, -22.891165407, -22.891165933,
-22.891241755, -22.891230881, -22.891850978, -22.891870027, -22.891427452,
-22.8916389189999, -22.892022089, -22.8926351289999, -22.892664855,
-22.8926343209999, -22.8917045229999, -22.8911884789999, -22.89174932,
-22.8909129579999, -22.890431931, -22.8897554919999, -22.890296049,
-22.890720254, -22.890984793, -22.891130748), c(-22.891130748,
-22.8911411509999, -22.891046197, -22.8907952669999, -22.89078769,
-22.891165407, -22.891165933, -22.891241755, -22.891230881, -22.891850978,
-22.891870027, -22.891427452, -22.8916389189999, -22.892022089,
-22.8926351289999, -22.892664855, -22.8926343209999, -22.8917045229999,
-22.8911884789999, -22.89174932, -22.8909129579999, -22.890431931,
-22.8897554919999, -22.890296049, -22.890720254, -22.890984793,
-22.891130748), c(-22.891130748, -22.8911411509999, -22.891046197,
-22.8907952669999, -22.89078769, -22.891165407, -22.891165933,
-22.891241755, -22.891230881, -22.891850978, -22.891870027, -22.891427452,
-22.8916389189999, -22.892022089, -22.8926351289999, -22.892664855,
-22.8926343209999, -22.8917045229999, -22.8911884789999, -22.89174932,
-22.8909129579999, -22.890431931, -22.8897554919999, -22.890296049,
-22.890720254, -22.890984793, -22.891130748), c(-22.891130748,
-22.8911411509999, -22.891046197, -22.8907952669999, -22.89078769,
-22.891165407, -22.891165933, -22.891241755, -22.891230881, -22.891850978,
-22.891870027, -22.891427452, -22.8916389189999, -22.892022089,
-22.8926351289999, -22.892664855, -22.8926343209999, -22.8917045229999,
-22.8911884789999, -22.89174932, -22.8909129579999, -22.890431931,
-22.8897554919999, -22.890296049, -22.890720254, -22.890984793,
-22.891130748), c(-22.891130748, -22.8911411509999, -22.891046197,
-22.8907952669999, -22.89078769, -22.891165407, -22.891165933,
-22.891241755, -22.891230881, -22.891850978, -22.891870027, -22.891427452,
-22.8916389189999, -22.892022089, -22.8926351289999, -22.892664855,
-22.8926343209999, -22.8917045229999, -22.8911884789999, -22.89174932,
-22.8909129579999, -22.890431931, -22.8897554919999, -22.890296049,
-22.890720254, -22.890984793, -22.891130748), c(-22.891130748,
-22.8911411509999, -22.891046197, -22.8907952669999, -22.89078769,
-22.891165407, -22.891165933, -22.891241755, -22.891230881, -22.891850978,
-22.891870027, -22.891427452, -22.8916389189999, -22.892022089,
-22.8926351289999, -22.892664855, -22.8926343209999, -22.8917045229999,
-22.8911884789999, -22.89174932, -22.8909129579999, -22.890431931,
-22.8897554919999, -22.890296049, -22.890720254, -22.890984793,
-22.891130748), c(-22.891130748, -22.8911411509999, -22.891046197,
-22.8907952669999, -22.89078769, -22.891165407, -22.891165933,
-22.891241755, -22.891230881, -22.891850978, -22.891870027, -22.891427452,
-22.8916389189999, -22.892022089, -22.8926351289999, -22.892664855,
-22.8926343209999, -22.8917045229999, -22.8911884789999, -22.89174932,
-22.8909129579999, -22.890431931, -22.8897554919999, -22.890296049,
-22.890720254, -22.890984793, -22.891130748), c(-22.891130748,
-22.8911411509999, -22.891046197, -22.8907952669999, -22.89078769,
-22.891165407, -22.891165933, -22.891241755, -22.891230881, -22.891850978,
-22.891870027, -22.891427452, -22.8916389189999, -22.892022089,
-22.8926351289999, -22.892664855, -22.8926343209999, -22.8917045229999,
-22.8911884789999, -22.89174932, -22.8909129579999, -22.890431931,
-22.8897554919999, -22.890296049, -22.890720254, -22.890984793,
-22.891130748), c(-22.891130748, -22.8911411509999, -22.891046197,
-22.8907952669999, -22.89078769, -22.891165407, -22.891165933,
-22.891241755, -22.891230881, -22.891850978, -22.891870027, -22.891427452,
-22.8916389189999, -22.892022089, -22.8926351289999, -22.892664855,
-22.8926343209999, -22.8917045229999, -22.8911884789999, -22.89174932,
-22.8909129579999, -22.890431931, -22.8897554919999, -22.890296049,
-22.890720254, -22.890984793, -22.891130748))), row.names = c(NA,
10L), class = "data.frame")

我想将每一行转换为多边形;这样我就可以将坐标与有关交互式地图的多边形的数据交叉。我怎么做?我尝试过

st_as_sf()
但它不适用于列表;我拥有的形状文件是一个多边形(数字列表),所以我对需要执行 st_as_sf() 的数据形式感到困惑

r gis r-sf
1个回答
0
投票

您可以使用

st_multipolygon()

library(sf)

st_sfc(Map(\(x, y) st_multipolygon(list(list(cbind(x, y)))), t$lng, t$lat))

Geometry set for 10 features 
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -43.26834 ymin: -22.89266 xmax: -43.26392 ymax: -22.88976
CRS:           NA
First 5 geometries:
MULTIPOLYGON (((-43.26532 -22.89113, -43.26521 ...
MULTIPOLYGON (((-43.26532 -22.89113, -43.26521 ...
MULTIPOLYGON (((-43.26532 -22.89113, -43.26521 ...
MULTIPOLYGON (((-43.26532 -22.89113, -43.26521 ...
MULTIPOLYGON (((-43.26532 -22.89113, -43.26521 ...
© www.soinside.com 2019 - 2024. All rights reserved.