【问题标题】:Create a sfc-column from nested lists in R从 R 中的嵌套列表创建一个 sfc 列
【发布时间】:2019-11-15 20:22:38
【问题描述】:

所以问题是我有一个列“位置”,它是一个列表列表。嵌套列表的长度为 2,并且都在索引 1 处具有纬度值,在索引 2 处具有点的经度值。由于我想从该列创建一个sfc-object,我想将每个嵌套列表转换为sfg-object,以便之后将其转换为sfc-object。

前三个嵌套列表如下所示:

> geometry[1:3]
[[1]]
[1] 49.45082 11.07702

[[2]]
[1] 49.45006 11.07262

[[3]]
[1] 49.45704 11.08664

所以我只是有点卡住了,不知道如何从这个嵌套列表中创建一个sfc-object。 任何提示都会很棒!

【问题讨论】:

  • 转换为 sfg_POINT 对象,然后使用 st_as_sfc 。例如pts <- lapply( geometry, sf::st_point ); sfc <- sf::st_as_sfc( pts )
  • 非常感谢!!比我想的要容易得多……抱歉这个天真的问题:/

标签: r list vector spatial sf


【解决方案1】:

如果您只是一个带有坐标的向量列表,您可以使用purrr::map 或lapply 遍历每个向量并转换为sf 点对象的列表,然后将其转换为sfc .

library(dplyr)
library(sf)

coords <- list(
  c(49.45082, 11.07702),
  c(49.45006, 11.07262),
  c(49.45704, 11.08664)
)

purrr::map(coords, st_point) %>%
  st_as_sfc()
#> Geometry set for 3 features 
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: 49.45006 ymin: 11.07262 xmax: 49.45704 ymax: 11.08664
#> epsg (SRID):    NA
#> proj4string:    NA
#> POINT (49.45082 11.07702)
#> POINT (49.45006 11.07262)
#> POINT (49.45704 11.08664)

如果您有更常见的几何形式作为数据框列,您可以对该列执行相同的操作:

dat <- tibble(geometry = coords)

dat %>%
  mutate(geometry = purrr::map(geometry, st_point) %>%
           st_as_sfc())
#> # A tibble: 3 x 1
#>              geometry
#>               <POINT>
#> 1 (49.45082 11.07702)
#> 2 (49.45006 11.07262)
#> 3 (49.45704 11.08664)

或者将整个东西转换成sf 数据框:

dat %>%
  mutate(geometry = purrr::map(geometry, st_point)) %>%
  st_as_sf()
#> Simple feature collection with 3 features and 0 fields
#> geometry type:  POINT
#> dimension:      XY
#> bbox:           xmin: 49.45006 ymin: 11.07262 xmax: 49.45704 ymax: 11.08664
#> epsg (SRID):    NA
#> proj4string:    NA
#> # A tibble: 3 x 1
#>              geometry
#>               <POINT>
#> 1 (49.45082 11.07702)
#> 2 (49.45006 11.07262)
#> 3 (49.45704 11.08664)

这些之间的选择仅取决于您的使用。

【讨论】:

  • 哇非常感谢您的回答!您对如何交换每个嵌套 lisk 中的值有任何想法吗?因为我认为 sf_point-obejct 的 lat 和 lon 位置错误
  • st_point 假设您的坐标按 (x, y) 顺序排列。您可以在坐标向量上调用rev 来反转它们的顺序
  • 非常感谢!我试过了,但没能成功。我可以简单地还原最终的 sfc 列及其所有条目吗?
  • 我不确定。只是事先反转向量有什么问题?
  • 抱歉回复晚了。正如你所说,事实证明这非常简单;)
猜你喜欢
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多