【问题标题】:How do you convert from a multipolygon to a spatial polygons data frame如何从多面体转换为空间面数据框
【发布时间】:2021-03-02 05:23:31
【问题描述】:

如何将R 中的MULTIPOLYGON 转换为SpatialPolygonsDataFrame?

我在网上找不到任何其他资源,我试图离散化同一个文件,它是 GEOMETRYCOLLECTION、XY 和 sfg 类,但是,这导致了引用同一个多边形的连续循环,而没有访问各个点。我很高兴提供任何额外的说明,并将感谢任何见解。

用于显示格式的多面体Ref_circles 的输出示例如下:

Ref_circles[1]
[[1]]
[[1]][[1]]
       [,1]     [,2]
[1,] 51.62730 4.340600
[2,] 51.62549 4.343550
[3,] 51.61800 4.357353
[4,] 51.61124 4.371529
[5,] 51.60523 4.386039
[6,] 51.59998 4.400845
...
[311,] 51.63570 4.322473
[312,] 51.62894 4.336649
[313,] 51.62730 4.340600

【问题讨论】:

    标签: r spatial


    【解决方案1】:

    我的第一个问题是:为什么要将sf 对象(MULTIPOLYGON)转换为sp 对象(SpatialPolygonDataFrame),因为sf 取代sp?

    可能有一些方法可以实现您在 sf 库中的最终目标,而无需进行此转换。

    如果你还想这样做,那就是这样的

    library(sf)
    library(sp)
    
    ## using a MULTIPOLYGON data set supplied with library(sf)
    nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
    
    ## convert the geometry of the `sf` object to SpatialPolygons
    spd <- sf::as_Spatial(st_geometry(nc), IDs = as.character(1:nrow(nc)))
    
    class(spd)
    # [1] "SpatialPolygons"
    # attr(,"package")
    # [1] "sp"
    
    ## grab the data from the sf object
    df <- nc
    df$geometry <- NULL
    df <- as.data.frame(df)
    
    ## create the SpatialPolygonsDataFrame
    spd <- sp::SpatialPolygonsDataFrame(spd, data = df)
    
    class(spd)
    # [1] "SpatialPolygonsDataFrame"
    # attr(,"package")
    # [1] "sp"
    
    head(spd@data)
    # AREA PERIMETER CNTY_ CNTY_ID        NAME  FIPS FIPSNO CRESS_ID BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79
    # 1 0.114     1.442  1825    1825        Ashe 37009  37009        5  1091     1      10  1364     0      19
    # 2 0.061     1.231  1827    1827   Alleghany 37005  37005        3   487     0      10   542     3      12
    # 3 0.143     1.630  1828    1828       Surry 37171  37171       86  3188     5     208  3616     6     260
    # 4 0.070     2.968  1831    1831   Currituck 37053  37053       27   508     1     123   830     2     145
    # 5 0.153     2.206  1832    1832 Northampton 37131  37131       66  1421     9    1066  1606     3    1197
    # 6 0.097     1.670  1833    1833    Hertford 37091  37091       46  1452     7     954  1838     5    1237
    

    【讨论】:

    • 我目前正在尝试找出我使用st_buffer(References_coord, dist = 0.3) 设置的一系列圆圈与使用st_voronoi(Hubs_coord) 生成的Voronoi 图之间的重叠区域。由于某种原因,使用st_intersection 时没有输出区域,所以我尝试使用intersect 函数,它需要sp 格式。我知道这似乎是做作的,但这是我一直在努力解决的问题gis.stackexchange.com/questions/269498/…
    猜你喜欢
    • 2014-03-10
    • 2015-06-26
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2013-04-22
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多