【发布时间】:2016-02-22 14:06:37
【问题描述】:
我想知道是否有人建立了世界大陆的栅格,其中每个单元格等于该单元格单元格到最近海岸的距离。这张地图将突出显示最偏远的内陆地区。
我想这只是rasterize 一个全局边界的shapefile,然后计算距离。
【问题讨论】:
标签: r distance raster shapefile rasterize
我想知道是否有人建立了世界大陆的栅格,其中每个单元格等于该单元格单元格到最近海岸的距离。这张地图将突出显示最偏远的内陆地区。
我想这只是rasterize 一个全局边界的shapefile,然后计算距离。
【问题讨论】:
标签: r distance raster shapefile rasterize
您可以使用raster::distance 执行此操作,它会计算每个NA 单元格到最近的非NA 单元格的距离。您只需要为陆地像素创建一个具有NA 的栅格,并为非陆地像素创建一些其他值。
方法如下:
library(raster)
library(maptools)
data(wrld_simpl)
# Create a raster template for rasterizing the polys.
# (set the desired grid resolution with res)
r <- raster(xmn=-180, xmx=180, ymn=-90, ymx=90, res=1)
# Rasterize and set land pixels to NA
r2 <- rasterize(wrld_simpl, r, 1)
r3 <- mask(is.na(r2), r2, maskvalue=1, updatevalue=NA)
# Calculate distance to nearest non-NA pixel
d <- distance(r3)
# Optionally set non-land pixels to NA (otherwise values are "distance to non-land")
d <- d*r2
创建上面的图(我喜欢rasterVis 用于绘图,但你可以使用plot(r)):
library(rasterVis)
levelplot(d/1000, margin=FALSE, at=seq(0, maxValue(d)/1000, length=100),
colorkey=list(height=0.6), main='Distance to coast')
【讨论】:
r 的地方设置所需的分辨率(res 参数,此处以度为单位); (2) 看看?raster - 如果数据是“未投影的”(即地理),就像这里一样,那么distance 的输出以米为单位。否则,它是投影的单位。请注意,当我绘制它时,我除以 1000,得到公里。
lon <- lat <- d; lon[] <- coordinates(d)[, 1]; lat[] <- coordinates(d)[, 2]。如果从头开始制作,请从矩阵 m 开始,例如经度,然后是 raster(m)。