我知道從XYZ列表中獲取柵格(其中x和y是座標的數字向量,z是數字矩陣),我可以直接使用函數raster
。但是如果我有一個柵格並且我想要一個XYZ列表呢?光柵包中是否有一個簡單的功能?從柵格對象獲取XYZ列表
當然,我知道我可以建立一個索引柵格對象上不同層次的列表,但是我發現我必須做出一些反轉來實現它,所以我想知道是否有一個簡單而高效的辦法。
謝謝。
我知道從XYZ列表中獲取柵格(其中x和y是座標的數字向量,z是數字矩陣),我可以直接使用函數raster
。但是如果我有一個柵格並且我想要一個XYZ列表呢?光柵包中是否有一個簡單的功能?從柵格對象獲取XYZ列表
當然,我知道我可以建立一個索引柵格對象上不同層次的列表,但是我發現我必須做出一些反轉來實現它,所以我想知道是否有一個簡單而高效的辦法。
謝謝。
有一對夫婦的方式做到這一點,但是這似乎是簡單的對我說:
基本上你使用的功能xyFromCell
從raster
包來獲取細胞的座標,然後你就會將它們綁定到您想要的列表。
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 ...
您可以考慮使用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的解決方案...
我嘗試了上述建議,但並未完全獲得所需答案。所以,這裏是一個小的調整和測試,它的工作原理:
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)
歡迎來到StackOverflow。只有代碼在他們的答案往往會被標記爲刪除,因爲他們是「低質量」。請閱讀關於回答問題的幫助部分,然後考慮在答案中添加一些評論。 – Graham
這應該工作:'DF < - as.data.frame(myrast,XY = TRUE)' – lbusett
@LoBu,我說的是有(數值向量,緯度) $ z(帶有長度(x)行和長度(y)的數字矩陣) cols) –
嗨。對不起,但我不知道我是否跟着你:你需要緯度和longitudues作爲載體和圖像矩陣? – lbusett