2017-07-24 116 views
1

我知道從XYZ列表中獲取柵格(其中x和y是座標的數字向量,z是數字矩陣),我可以直接使用函數raster。但是如果我有一個柵格並且我想要一個XYZ列表呢?光柵包中是否有一個簡單的功能?從柵格對象獲取XYZ列表

當然,我知道我可以建立一個索引柵格對象上不同層次的列表,但是我發現我必須做出一些反轉來實現它,所以我想知道是否有一個簡單而高效的辦法。

謝謝。

+1

這應該工作:'DF < - as.data.frame(myrast,XY = TRUE)' – lbusett

+0

@LoBu,我說的是有(數值向量,緯度) $ z(帶有長度(x)行和長度(y)的數字矩陣) cols) –

+0

嗨。對不起,但我不知道我是否跟着你:你需要緯度和longitudues作爲載體和圖像矩陣? – lbusett

回答

2

有一對夫婦的方式做到這一點,但是這似乎是簡單的對我說:

基本上你使用的功能xyFromCellraster包來獲取細胞的座標,然後你就會將它們綁定到您想要的列表。

library(raster) 

# testraster 
r <- raster() 
r[] <- runif(ncell(r)) 

#coordinates 
coords <- xyFromCell(r,1:ncell(r)) 

#create list 
xyzlist <- list(x=coords[,'x'],y=coords[,'y'],z=as.matrix(r)) 

它給你:

> str(xyzlist) 
List of 3 
$ x: num [1:64800] -180 -178 -178 -176 -176 ... 
$ y: num [1:64800] 89.5 89.5 89.5 89.5 89.5 89.5 89.5 89.5 89.5 89.5 ... 
$ z: num [1:180, 1:360] 0.786 0.867 0.0361 0.0605 0.7276 ... 
3

您可以考慮使用rasterToPoints

library(raster) 
r <- raster() 
values(r) <- 1:ncell(r) 

xyz <- rasterToPoints(r) 

head(xyz) 
      x y layer 
#[1,] -179.5 89.5  1 
#[2,] -178.5 89.5  2 
#[3,] -177.5 89.5  3 
#[4,] -176.5 89.5  4 
#[5,] -175.5 89.5  5 
#[6,] -174.5 89.5  6 

但要注意該功能只適用於那些不NA 細胞,而這會傳回值單個矩陣;不是一個列表。但這可能更實際。否則,請參閱@ Val的解決方案...

0

我嘗試了上述建議,但並未完全獲得所需答案。所以,這裏是一個小的調整和測試,它的工作原理:

library(raster) 
xy <- xyFromCell(dem,1:ncell(dem)) 

lns <- contourLines(x=sort(unique(xy[,1])), y=sort(unique(xy[,2])), z=t(as.matrix(dem))) 

plot(dem) 
for (i in 1:length(lns)) lines(lns[[i]]$x, lns[[i]]$y) 
+0

歡迎來到StackOverflow。只有代碼在他們的答案往往會被標記爲刪除,因爲他們是「低質量」。請閱讀關於回答問題的幫助部分,然後考慮在答案中添加一些評論。 – Graham