【问题标题】:Get centroid from map with changing boundaries从具有变化边界的地图中获取质心
【发布时间】:2020-08-07 18:00:27
【问题描述】:

我正在使用一个名为 histmaps 的包(可在此处找到 https://github.com/junkka/histmaps ) 存储有关瑞典行政区历史边界的信息。我有兴趣找到 1900 年到 1920 年间存在的每个教区的质心。由于教区的边界会随着时间而变化,因此需要进行一些调整。

包的创建者通过引入 hist_boundaries 解决了这个问题,比如:

period_map

现在,我完全不知道如何从周期图中找到每个教区的质心。

我试过这段代码:

centroids <- 
  gCentroid(
    spgeom = methods::as( object = period_map, Class = 'Spatial' )
    , byid = TRUE
  )

但这只会返回:

Error in methods::as(object = period_map, Class = "Spatial") : 
  no method or default for coercing “list” to “Spatial”

有什么建议吗?

【问题讨论】:

    标签: r gis sp centroid


    【解决方案1】:

    我建议你下载{sf}包格式的教区边界(似乎有格式参数只是为了这个目的);然后您就可以应用函数sf::st_centroid()

    library(histmaps)
    library(dplyr)
    library(sf)
    
    polygons <- hist_boundaries(1900, format = "sf")
    
    centroids <- polygons %>% 
      st_centroid()
    
    plot(st_geometry(polygons))
    plot(centroids, pch = 4, col = "red", add = T)
    

    【讨论】:

    • @johnny 我已经更新了我的答案以展示如何:) 关键部分是你的 hist_boundaries() 调用中的 format = "sf" 参数
    • 很抱歉打扰你,@Jindra,但还有一件事。当多边形
    • 不,但这不是质心的问题,而是 hist_boundaries 函数的问题 - 它返回多个时期的结果似乎不太合法。考虑 object.size(hist_boundaries(c(1900, 1920), format = "sf")) - 你会期望它大致等于 object.size(hist_boundaries(c(1900), format = "sf") 的总和) 和 object.size(hist_boundaries(c(1920), format = "sf"))。显然不是。
    • 啊,我现在明白了。周末愉快,感谢您的耐心等待!
    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 2015-08-08
    • 2019-03-06
    • 2021-10-19
    • 2014-09-19
    • 2014-03-01
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多