我需要能够测量点之间的距离,但是该距离需要与高程的关系进行计算。这些要点是19世纪讲故事的人的住所以及他们的故事中提到的地方。因此,该距离必须是“步行距离”。即使实际笔直距离较短,沿着山谷的路径也可能比沿着山脉的路径短。随附的截图说明了我的想法。因此,在图像中,路径A和C将比路径B短。
这些点来自CSV文件,但是我也有带有高程数据的栅格图层。
我需要能够测量点之间的距离,但是该距离需要与高程的关系进行计算。这些要点是19世纪讲故事的人的住所以及他们的故事中提到的地方。因此,该距离必须是“步行距离”。即使实际笔直距离较短,沿着山谷的路径也可能比沿着山脉的路径短。随附的截图说明了我的想法。因此,在图像中,路径A和C将比路径B短。
这些点来自CSV文件,但是我也有带有高程数据的栅格图层。
Answers:
实现此目标在GIS中是一项基本任务,但是QGIS中的方法可能并不简单。您最好的机会是使用GRASS的r.walk
函数,该函数会创建各向异性的成本面(dem + slope +其他因素)。
首先,您必须创建一个摩擦表面作为的输入r.walk
。在您的情况下,它可以是与DEM范围匹配的单值栅格(1.0)。您可以r.mapcalculator
使用以下公式创建它:A*0+1
其中A是您的DEM。
接下来,您必须从CSV中选择一组起点。这些都是要计算的累计成本面。您必须从每个起点创建一个单独的成本表面。定义与该步骤中每个起点关联的终点(在偏离航向的各个层中)可能是明智的。之后,您可以r.walk
使用创建的输入运行。起点可以在单个图层中,您可以使用对话框中的绿色箭头遍历起点。
现在,在理想情况下,您将具有成本面和每个成本面的终点。从理论上讲,您可以找到成本最低的路径r.drain
,但对我而言,它最终会出错(python无法导入QgisRaster库)。如果您遇到同一问题,则可以使用SAGA的“最低成本路径”算法。它将为具有成本表面的每个终点创建一个点和一个线层(再次使用迭代按钮)。完成所有线条后,您可以使用SAGA的“合并形状图层”工具将它们合并为一个shapefile。
随着点的增加,该方法可能会非常慢,因此,如果有很多点,则可以尝试使用python自动实现该方法。仍然需要很多时间来计算(尤其是成本表面),但是您不必手动创建大量的端点层。
r.walk
。您可以使用摩擦贴图设置无法通过的单元。与重分类的DEM r.reclass
与规则,1 thru 2000 = 1
2000 thru * = 9999
在规则文件(如果您的门槛2000米)。这样,该算法就不会传递具有高摩擦值的单元,因此处理它的成本会更低。