【问题标题】:Transform CircleRange in SpatialPolygon in R在 R 中的 SpatialPolygon 中变换 CircleRange
【发布时间】:2016-08-10 08:17:27
【问题描述】:

一个非常常见的过程是使用 sp 包中的 Polygon 函数将线条和边框转换为 SpatialPolygons 对象。但是是否可以将其他对象类转换为SpatialPolygons?我使用 dismo 中的函数circles 来创建一个距已知空间点具有特定半径距离的圆周。此函数返回类CirclesRange 的对象。

circ<-circles(spcoords,d=100000)

class(circ)
[1] "CirclesRange"
attr(,"package")
[1] "dismo"

当我尝试将CirclesRange 对象转换为SpatialPolygons 时,出现以下错误:

Error: is.integer(pO) is not TRUE

然后,我搜索了其他方法来转换这个对象,但我没有成功。我认为首先有必要将“circ”转换为另一个类,然后尝试将其转换为SpatialPolygons,但我找不到这方面的信息。

【问题讨论】:

    标签: r polygon spatial sp


    【解决方案1】:

    查看str(circ),所需的SpatialPolygons 对象已经是创建对象的一部分。您只需运行circ@polygons 即可提取多边形。下面是一些基于meuse 数据集的示例代码。

    ## sample data
    data(meuse)
    coordinates(meuse) <- ~ x + y
    proj4string(meuse) <- CRS("+init=epsg:28992")
    
    ## circle around the first 'meuse' feature (top-right corner)
    circ <- circles(meuse[1, ], d = 1000, lonlat = FALSE)
    
    poly <- circ@polygons
    proj4string(poly) <- proj4string(meuse)
    
    ## display data
    library(latticeExtra)
    
    spplot(meuse, "elev", scales = list(draw = TRUE),
           col.regions = topo.colors(100), key.space = "right") + 
      as.layer(spplot(poly, fill = "transparent", lwd = 2))
    

    【讨论】:

    • fdetsch 是对的!但是,如果您不介意使用另一个包,则来自library(rgeos) 的函数gBufferlibrary(dismo) 执行相同的操作,但返回类SpatialPolygons 的对象。按照@fdetsch 的建议使用data(meuse),它将是:poly &lt;- gBuffer(meuse[1, ], width = 1000)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多