2016-12-27 141 views
1

我試圖使用distanceFromPoints功能raster包爲:DistanceFromPoints多個XY座標

distanceFromPoints(object,xy,...) 

在哪裏,對象是柵格和xyx矩陣和y座標

現在,如果我光柵具有例如1000個單元並且xy代表一個點,則我得到表示xy與每個柵格單元之間的距離的1000個值。我的問題是當xy有多個座標,例如10個點。功能描述表明xy可以是多個點,但是當我用多個XY點運行此函數時,我仍然只獲得1000個值,而我期望XY中每個座標的值爲1000。這個怎麼用?

謝謝!

回答

3

在多個點上使用distanceFromPoints爲每個柵格單元格提供單個值,該柵格單元格是距離該單元格最近點的距離。

要創建的光柵層分別給予各點的距離,則可以使用apply

可再現例如:

r = raster(matrix(nrow = 10, ncol = 10)) 
p = data.frame(x=runif(5), y=runif(5)) 
dp = apply(p, 1, function(p) distanceFromPoints(r,p)) 

這給光柵層的列表,每一個具有的距離的一個點

# for example, 1st raster in the list has the distance to the 1st point 
plot(dp[[1]]) 
points(p[1,]) 

enter image description here

爲方便起見,您可以在此列表轉換成光柵棧

st = stack(dp) 
plot(st) 

enter image description here

謹慎的最後一個字:

應該指出的是,光柵對象由此產生不確實包含比它們生成的點列表更多的信息。因此,它們是存儲該信息的計算和內存昂貴的方式。我不能輕易想到任何情況下,這將是一個明智的方式來解決具體問題。因此,可能值得再思考一下您希望這些柵格圖層的原因,並詢問是否有更有效的方法來解決您的整體問題。

+0

非常感謝。我試圖不使用apply或任何循環,因爲我處理的數千個點,這在我的代碼中變成了耗時的計算。但正如你所指出的,這似乎是唯一的選擇。非常感謝你的迴應。 –

+0

很高興幫助。如果這很有用並回答了您的問題,請考慮通過點擊向上箭頭進行upvoting,並通過單擊勾號(檢查)標記來接受答案。這是在SO中表達感謝的偏好方式,而不是在評論中。 – dww