我在想是否有人已经建立了一张世界大陆的栅格图,其中每个单元格等于该单元格到最近海岸的距离。这张地图将突出显示最为孤立的内陆地区。
我想这只需要对全球边界的shapefile进行光栅化,然后计算出距离即可。
我想这只需要对全球边界的shapefile进行光栅化,然后计算出距离即可。
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')
?raster
-如果数据是“未投影的”(即地理空间),则distance
的输出以米为单位。否则,它以投影单位为单位。请注意,在绘制时,我通过除以1000来得到公里。 - jbaumslon <- lat <- d; lon[] <- coordinates(d)[, 1]; lat[] <- coordinates(d)[, 2]
。如果要从头开始创建,请使用矩阵m
,例如经度,然后使用raster(m)
。 - jbaums