R 如何计算从点A沿其等高线到梯度线通过点B的交点的地理距离?

R 如何计算从点A沿其等高线到梯度线通过点B的交点的地理距离?,r,gis,R,Gis,我有一组带有地理坐标的采样点,在每个采样点内,我测量了一个变量Z。我的目标是,对于每个焦点点a,计算点a和沿垂直于最大梯度Z的线的所有其他点之间的距离。也就是说,沿着穿过场地a的Z等高线。当前使用R软件包字段对采样场地之间的值进行插值。因此,我认为我需要为每个样本点:(1)确定与样本点相交的Z等高线的坐标向量;(2) 确定与采样点相交的Z梯度线(最大坡度线)的坐标向量;(3) 计算沿焦点位置等高线从焦点位置到每个其他采样位置的相交梯度线的距离(不是直线距离) 我的最终目标是估计一个函数的参数,该

我有一组带有地理坐标的采样点,在每个采样点内,我测量了一个变量Z。我的目标是,对于每个焦点点a,计算点a和沿垂直于最大梯度Z的线的所有其他点之间的距离。也就是说,沿着穿过场地a的Z等高线。当前使用R软件包
字段
对采样场地之间的值进行插值。因此,我认为我需要为每个样本点:(1)确定与样本点相交的Z等高线的坐标向量;(2) 确定与采样点相交的Z梯度线(最大坡度线)的坐标向量;(3) 计算沿焦点位置等高线从焦点位置到每个其他采样位置的相交梯度线的距离(不是直线距离)

我的最终目标是估计一个函数的参数,该函数与Z中的梯度平行变化,但也可能与该梯度垂直自相关。所以我想要这些距离

目前,我不知道如何实现上面列出的三个目标中的任何一个,尽管我发现了一个与确定梯度相关的问题:

我将尝试使用文档中的一个示例来说明
字段
R包中的
Krig
函数:

# Fit a 2d surface to the data:
fit <- fields::Krig(ChicagoO3$x, ChicagoO3$y, theta=20) 

# predict on a grid ( grid chosen here by defaults)
out<- fields::predictSurface( fit)

# Plot
fields::surface( out, type="C")
points( fit$x, col=2)
points( fit$x[2,2]~fit$x[2,1], col="brown",pch=16)
points( fit$x[8,2]~fit$x[8,1], col="magenta",pch=16)
#将二维曲面拟合到数据:

fit前几天我开始做这项工作,但遇到了一个问题,不得不自己问一个问题!看看我的问题和几个答案(我还没试过)。这将允许您提取采样场地的等高线

我知道你的问题还有一些内容,但无论如何,这应该是一个开始

编辑:所以上面的链接应该是你寻找等高线坐标的答案。一旦将线作为
sf
对象,我建议将其转换为
光栅
,值为0和1(值为0的单元格表示它们不与线相交,值为1表示单元格与线相交)。我认为
raster::mask
应该为您做这件事

对于Q3),要查找点之间沿(现在为光栅版本)线的距离,请查看此链接,特别是“障碍物周围的距离”部分。基本上,您可以计算
光栅上点之间的最小距离,但请确保路径仅跟随具有特定值的单元格(这就是为什么您将1和0的值指定给行
光栅

对于Q2)-查找从一点到等高线的最大梯度路径-我没有解决方案,但您可以查看
光栅::流径
的文档。此函数的作用与您想要的相反,它查找最大坡度的下坡路径(以查找水从某个点流向)。您可以尝试在等高线中查找每个单元的
流径
,只保留到达采样点的(最短的?)流径(如果有很多单元,可能需要一段时间)。否则,您可以尝试查看
流径
函数的工作原理,或者查看是否可以反转它?我假设在它内部的某个地方,它在单元格的邻域中查找
min
值;也许您可以重写它,以便它在附近查找
max

请注意,
flowPath
在使用
volcano
数据的示例中看起来很棒,但是当我在真实数据(具有像素大小的高程模型)上使用它时