如何将 R 列表转换为多边形

Posted

技术标签:

【中文标题】如何将 R 列表转换为多边形【英文标题】:how transform R list to polygons 【发布时间】:2022-01-23 05:06:40 【问题描述】:

数据是一个带有这样列的csv:

“列表(c(-72.6689780388482,-72.6697951984133,……-37.8155440677891,-37.8164165487739,……))” 原始存档是一个 .RDS 文件

我的目标是将 GEOMETRY 行转换为下一个替代品:

    获取多边形,如 POLYGON(LON1,LAT1 LON2,LAT2) 获取经纬度分开的列表 最终将整个colum转换为sf对象以获得几何列

parsed<- list( 
  c(-72.6689780388482, -72.6697951984133,-37.8155440677891, -37.8164165487739)
)
result_b <- list( 
  lat = c(-72.6689780388482, -72.6697951984133 ) ,
  lon = c( -37.8155440677891, -37.8164165487739)
)

【问题讨论】:

请不要创建名为list 的变量。它将覆盖全局环境中的函数list() 您的 CSV 文件在字段中包含 R 表达式对我来说似乎很奇怪。也许您应该要求该数据的创建者提供一个.rda 文件,因为这将排除读取/解析/评估文件内容的需要(和风险)。 Ummm ... 我没有意识到 R-4 无法读取从 R-3.6.0 保存的 RDS 文件。这有记录吗?我在粗略的搜索中没有找到它。我知道您问过如何将“CSV”格式转换为多边形,但也许修复导入过程会更好,这样您就不必解析/评估/转换。 嗨@Cristián Vargas Acevedo。不知道这是否仍然有用,但我只是在答案下方发布。希望它会帮助你。干杯。 哇是一个完整的答案!非常感谢 【参考方案1】:

请使用sfpurrr 库找到以下一种可能的解决方案

Reprex

仅问题 1 的代码
library(sf)
library(purrr)

parsed<- list( 
  c(-72.6689780388482, -72.6697951984133,-37.8155440677891, -37.8164165487739)
)

parsed %>% 
list(lat = c(pluck(.,1,1), pluck(.,1,2) ), lon = c(pluck(.,1,3), pluck(.,1,4))) %>% 
  .[-1]
仅问题 1 的输出
#> $lat
#> [1] -72.66898 -72.66980
#> 
#> $lon
#> [1] -37.81554 -37.81642

问题 1、2 和 3 的代码
library(sf)
library(purrr)

parsed %>% 
  list(lat = c(pluck(.,1,1), pluck(.,1,2) ), lon = c(pluck(.,1,3), pluck(.,1,4))) %>% 
  .[-1] %>% 
  as.data.frame() %>% st_as_sf(., coords = c("lon","lat"), crs = 4326) %>% 
  st_bbox() %>% 
  st_as_sfc() %>% 
  st_sf()
问题 1、2、3 的输出
#> Simple feature collection with 1 feature and 0 fields
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -37.81642 ymin: -72.6698 xmax: -37.81554 ymax: -72.66898
#> Geodetic CRS:  WGS 84
#>                         geometry
#> 1 POLYGON ((-37.81642 -72.669...

由reprex package (v2.0.1) 于 2021 年 12 月 21 日创建

【讨论】:

以上是关于如何将 R 列表转换为多边形的主要内容,如果未能解决你的问题,请参考以下文章

ArcEngine中如何将图形转换为要素

如何将凸包顶点转换为 geopandas 多边形

使用 R 将四次核热图转换为大多边形

如何将 kml 多边形几何数据转换为谷歌多边形坐标

如何将 boost::polygon 中的多边形集数据转换为多边形数据?

Three.js将多边形线条(Line)转换成模型(Mesh)