我正在寻找一种计算距离点的栅格的方法,类似于
并获得这个图像:
我想做同样的栅格,但是避免某个区域(在这种情况下为陆地)的“最短距离”。我知道有一个叫做
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)
并获得这个图像:
![在此输入图像描述](https://istack.dev59.com/XFjyT.webp)
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
# 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)
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.
所以,有什么想法可以将这个转换成类似第一个的栅格图,但包含避开陆地的距离吗?非常感谢!