2016-02-22 84 views
2

我想知道是否有人建立了一個世界大陸的光柵,每個細胞等於該細胞到最近岸的距離。該地圖將突出顯示內陸最爲孤立的陸地區域。地理距離的全球柵格

我會想象這只是rasterize一個shapefile的全局邊界,然後計算距離。

回答

5

您可以使用raster::distance來計算從每個NA單元到最近的非NA單元的距離。您只需創建一個柵格像素爲NA的柵格,以及非地面像素的其他值。

enter image description here

方法如下:

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') 
+0

偉大的答案!兩個後續問題:1)像素的分辨率是否可以進一步縮小? 2)地圖的值被解釋爲公里? –

+0

@IDelToro(1)你可以在我們定義'r'的地方設置所需的分辨率('res'參數,這裏以度爲單位)。 (2)看看'柵格' - 如果數據是「未投射的」(即地理的),就像它在這裏一樣,那麼'距離'的輸出是以米爲單位的。否則,它以投影的單位。請注意,當我繪製它時,我除以1000,得到公里。 – jbaums

+0

謝謝!你會以同樣的方式創建一個緯度(或經度)值的柵格嗎? –