【问题标题】:DistanceFromPoints with multiple XY coordinates具有多个 XY 坐标的 DistanceFromPoints
【发布时间】:2017-05-12 01:17:15
【问题描述】:

我正在尝试将 raster 包中的 distanceFromPoints 函数用作:

distanceFromPoints(object,xy,...)

其中,对象是栅格,xyxy 坐标的矩阵

现在,如果我的栅格有 1000 个像元,xy 代表一个点,我会得到 1000 个值,表示 xy 和每个栅格像元之间的距离。我的问题是xy 有多个坐标,例如 10 个点。函数描述表明xy 可以是多个点,但是当我使用多个XY 点运行此函数时,我仍然只得到1000 个值,而我期望XY 中的每个坐标有1000 个值。这是如何工作的?

谢谢!

【问题讨论】:

    标签: r spatial raster


    【解决方案1】:

    在多个点上使用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,])
    

    为方便起见,您可以将此列表转换为栅格堆栈

    st = stack(dp)
    plot(st)
    

    最后一句警告:

    应该注意的是,这样创建的栅格对象实际上并没有包含比生成它们的点列表更多的信息。因此,它们是一种存储该信息的计算和内存昂贵的方式。我无法轻易想到任何情况下这将是解决特定问题的明智方法。因此,可能值得再次考虑您需要这些栅格图层的原因,并询问是否有更有效的方法来解决您的整体问题。

    【讨论】:

    • 非常感谢。我试图不使用 apply 或任何循环,因为我正在处理数千个点,这在我的代码中变成了一个耗时的计算。但正如你所指出的,这似乎是唯一的选择。非常感谢您的回复。
    • 很高兴它有帮助。如果这对您有用并回答了您的问题,请考虑通过单击向上箭头进行投票,并通过单击对勾(复选)标记接受答案。这是在 SO 中表示感谢的首选方式,而不是在 cmets 中。
    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 2017-11-18
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2011-05-05
    • 2014-12-31
    相关资源
    最近更新 更多