2016-12-27 107 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