计算距离栅格避开土地

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算距离栅格避开土地相关的知识,希望对你有一定的参考价值。

我正在寻找一种方法来计算距离点的距离光栅,类似于raster::distance所做的,但是避开了陆地。所以,就像我可以制作一个距离光栅(没有任何约束)的方式一样:

library(sp)
library(raster)


# create cooridnates sp points
col_coord <- data.frame(x      = c(-13.8309),
                        y      = c(28.9942))
coordinates(col_coord) <- ~x+y
col_coord@proj4string <- CRS(projections$WGS84)

#create base raster
baseRaster <- raster(xmn = -80, xmx =55, ymn = -70, ymx = 70, crs = CRS("+proj=longlat +ellps=WGS84"), resolution = 1)

#rasterize spatial point
colraster <- rasterize(col_coord, baseRaster)

#calculate distance
coldist <- raster::distance(colraster, doEdge = T)

#plot
plot(coldist) 

并获得此图片:enter image description here

我想制作相同的光栅,但是“避开一个区域的最短距离”(在这种情况下是陆地)。我知道包gdistance并且我试图遵循关于this帖子的建议,但这是我所拥有的:( Trans是一个过渡层,因为它需要很长时间才能计算出here

library(gdistance)
# load transition layer (change directory if needed). This is in another CRS so we transform everything
load("data/Transition_layer.RData")

col_coord <- spTransform(col_coord, Trans@crs)
A <- accCost(Trans, col_coord)
plot(A) #this shows high cost in contintents which is good

enter image description here

# create a raster for water
mapWGS <- rgeos::gBuffer(rworldmap::getMap(resolution = "high"), width = 0)
water <- rasterize(mapWGS, baseRaster, mask = F, field = 1)
table(is.na(water[]))

water[water == 1] <- 0
water[is.na(water)] <- 1
water[water == 0] <- NA
plot(water)

enter image description here

water <- projectRaster(water, crs = Trans@crs)

# change resolution of A to match that of water
A <- resample(A, water)
A2 <- mask(A, water, inverse = F)

plot(A2) # this doesn't make that much sense. 

enter image description here

所以,任何关于如何从这个到类似于第一个但包含避开土地的距离的栅格的想法将非常感激!

答案

我认为你可以使用raster::gridDistanceomit参数

library(raster)
xy <- data.frame(x=-13.8309, y=28.9942)
r <- raster(xmn=-120, xmx=55, ymn=-70, ymx=70, res=.25)

library(maptools)
data(wrld_simpl)

r <- rasterize(wrld_simpl, r, field= -1)
rr <- rasterize(xy, r, update=TRUE)

x <- gridDistance(rr, 1, omit=-1)
plot(x / 1000000)
points(xy)

distance through water

地图显示它适用于太平洋,也适用于红海(因为wrld_simpl没有巴拿马和苏伊士运河)。

但是因为使用gridDistance,路径必须通过栅格单元的中心,估计的距离比实际距离稍长。

以上是关于计算距离栅格避开土地的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS风暴ArcGIS创建栅格数据集色彩映射表案例--以GlobeLand30土地覆盖数据为例

[jzoj]2938.NOIP2012模拟8.9分割田地

栅格数据的列数和行数很大怎么回事

栅格数据的空间分析——密度分析

向量使用1:pygame编写篮球游戏-火柴人运球避开防守跳起投篮(向量法处理防守者逼近投篮者前进数据)

向量使用1:pygame编写篮球游戏-火柴人运球避开防守跳起投篮(向量法处理防守者逼近投篮者前进数据)