【问题标题】:creating multipolygon from a list of long lat in sf package r从 sf 包 r 中的长 lat 列表创建多面体
【发布时间】:2018-08-25 03:50:38
【问题描述】:

我有两个包含长纬度的列表,如下所示

> typeof(sec1)
[1] "list"
> sec1
         lon      lat
1   10.77996 76.51189
2   10.78049 76.51223
3   10.78101 76.51257
4   10.78154 76.51290
5   10.78206 76.51324
6   10.78259 76.51358
7   10.78271 76.51357

> typeof(sec2)
[1] "list"
> sec2
         lon      lat
1   10.77224 76.65794
2   10.77090 76.65812
3   10.76956 76.65830
4   10.76821 76.65848
5   10.76687 76.65866
6   10.76552 76.65884
7   10.76559 76.65886
8   10.76566 76.65889
9   10.76574 76.65892

我想使用 R 中的 sf 包创建一个多面几何体。

根据文档,我需要将数字矩阵列表传递给 st_multipolygon 函数...但似乎没有 crs 转换选项

我在下面的尝试

> a<-st_multipolygon(list(sec1,sec2))
Error in vapply(y, ncol, 0L) : values must be length 1,
 but FUN(X[[1]]) result is length 0

失败..

我知道我犯了一些根本性的错误..有人可以帮忙

谢谢

【问题讨论】:

  • 您的 sec1sec2 对象实际上是列表还是 data.frames? (即尝试typeof(data.frame()))。使用dput(sec1)dput(sec2) 共享您的数据
  • 谢谢我想我得到了提示.. dput 告诉他们它们是 calss data.frame...
  • 所以我想我需要将它们转换为长纬度的向量..并创建两个单独的列表..然后使用它创建几何..post 我需要将其转换为 sfc crs...对吗?
  • 你可以先mp &lt;- sf::st_multipolygon(x = list(as.matrix(sec1), as.matrix(sec2)),然后sf::st_sfc(mp)
  • 现在我的dput看起来像> dput(sec1)列表(c(10.77996083,76.51189278),c(10.7804860757556,76.5122294885443),C(10.7810113472407,76.512566195987),C(10.78153644457,76.5129029023281)... . 但我得到 > 扇区多边形

标签: r sf


【解决方案1】:

这几乎正是我想要做的,所以我拿了这些列表并做了一些工作。生成的多边形不是最好的(原始问题中肯定遗漏了一些点),但我成功地采用了这种策略:

sec1 <- list( rbind(c(10.77996, 76.51189), c(10.78049,76.51223), c(10.78101,76.51257), c(10.78154,76.51290), c(10.78206,76.51324), c(10.78259,76.51358), c(10.78271,76.51357), c(10.77996, 76.51189)) )

sec2

a

情节(一)

输入(sec1)

list(structure(c(10.77996, 10.78049, 10.78101, 10.78154, 10.78206, 10.78259, 10.78271, 10.77996, 76.51189, 76.51223, 76.51257, 76.5129, 76.51324, 76.51358, 76.51357, 76.51189), .Dim = c(8L, 2L)))

输入(秒2)

list(structure(c(10.77224, 10.7709, 10.76956, 10.76821, 10.76687, 10.76552, 10.76559, 10.76566, 10.76574, 10.77224, 76.65794, 76.65812, 76.6583, 76.65848, 76.65866, 76.65884, 76.65886, 76.65889, 76.65892, 76.65794), .Dim = c(10L, 2L)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2020-12-29
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多