如何将 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】:
请使用sf
和purrr
库找到以下一种可能的解决方案
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 列表转换为多边形的主要内容,如果未能解决你的问题,请参考以下文章