R 从空间多边形和光栅像素获取边界之间的距离

R 从空间多边形和光栅像素获取边界之间的距离,r,geospatial,distance,raster,euclidean-distance,R,Geospatial,Distance,Raster,Euclidean Distance,我试图计算从光栅的几个像素到R中一些多边形边界的距离,如图所示。我有两个问题: 如何从空间多边形对象正确定义边界。我目前有两个选择,但我不能决定哪一个是最好的。首先,我可以将空间多边形强制为空间线对象,然后强制为空间点。第二,我可以graster::光栅化SpatialPolygon。我想每种选择都有其利弊 我只想计算一下从边界一侧到另一侧的距离。在这个例子中,我只想要从哥伦比亚境内的像素到两国边界的距离。我尝试使用纬度参数“过滤”边界,但实际边界非常不规则,因此使用严格的截止值可能会导致错误

我试图计算从光栅的几个像素到R中一些多边形边界的距离,如图所示。我有两个问题:

  • 如何从
    空间多边形
    对象正确定义边界。我目前有两个选择,但我不能决定哪一个是最好的。首先,我可以将
    空间多边形
    强制为
    空间线
    对象,然后强制为空间点。第二,我可以
    graster::光栅化
    SpatialPolygon
    。我想每种选择都有其利弊

  • 我只想计算一下从边界一侧到另一侧的距离。在这个例子中,我只想要从哥伦比亚境内的像素到两国边界的距离。我尝试使用纬度参数“过滤”边界,但实际边界非常不规则,因此使用严格的截止值可能会导致错误

  • 以下代码可用于获取示例
    SpatialPolygonsDataFrame

    #Get the world map and select two countries [Colombia and Venezuela]
    library(maptools) #To get the polygon data 
    data(wrld_simpl)
    colven <- c("Colombia", "Venezuela")
    colven_map <- wrld_simpl[wrld_simpl$NAME %in% colven, ]
    
    #获取世界地图并选择两个国家[哥伦比亚和委内瑞拉]
    库(maptools)#获取多边形数据
    数据(wrld_siml)
    科尔文
    如果需要从哥伦比亚的所有网格单元到边界的距离,还可以执行以下操作:

    rborder <- rasterize(border,  raster)
    dborder <- distance(rborder)
    dbcol <- mask(dborder, col)
    

    rborder您的图像没有显示。请提出一个好的R问题:创建一个自包含的可复制示例并显示一些代码我修改了问题并添加了一些代码片段以获取空间多边形数据和光栅。谢谢你的推荐Robert。
    d Robert,我添加了更多的细节和可复制的代码,无需下载任何内容。我这样做的前提是,这篇文章可以帮助其他有类似问题的人,并使我的问题更容易理解。谢谢你的建议。谢谢,这就是我的想法。
    reos::gIntersect
    给了我几个错误,因为多边形之间的交叉(我认为)很复杂。我可以从以下一侧屏蔽光栅:
    col\u光栅吗
    
    #example data
    library(maptools) #To get the polygon data 
    data(wrld_simpl)
    colven <- wrld_simpl[wrld_simpl$NAME %in% c("Colombia", "Venezuela"), ]
    
    library(raster)
    raster <- raster(colven, nrow=100, ncol=100)
    raster[] <- 1:length(raster)
    raster <- mask(raster, colven)
    
    set.seed(33)
    cells <- sample(ncell(raster), 10)
    xy <- xyFromCell(raster, cells)
    sp <- SpatialPoints(xy, proj4string=crs(colven))
    
    library(rgeos)
    # inside Colombia only
    col <- colven[colven$NAME == "Colombia", ]
    sp <- gIntersection(sp, col)
    
    # get the border between Venezuela and Colombia
    ven <- colven[colven$NAME == "Venezuela", ]
    border <- gIntersection(col, ven)
    
    # get the distance
    # this fails for me, that seems to be a bug in rgeos for these data
    gDistance(sp, border, byid=TRUE)  
    
    library(geosphere)
    dist2Line(xy, border)
    
    rborder <- rasterize(border,  raster)
    dborder <- distance(rborder)
    dbcol <- mask(dborder, col)