我有多条线特征(在多点中也有它们……),它们以不同的GPS精度表示相似的路径(在本例中为山地步道),导致许多线彼此靠近,但并不完全重叠。
出于该项目的目的,我正在寻找一种方法来从所有这些对象中计算一条“均值”线,并生成一条路径的最可能位置的结果线。
使用QGIS或任何其他工具(我认为是OGR ...),您将如何进行?
我有多条线特征(在多点中也有它们……),它们以不同的GPS精度表示相似的路径(在本例中为山地步道),导致许多线彼此靠近,但并不完全重叠。
出于该项目的目的,我正在寻找一种方法来从所有这些对象中计算一条“均值”线,并生成一条路径的最可能位置的结果线。
使用QGIS或任何其他工具(我认为是OGR ...),您将如何进行?
Answers:
测试数据:
一世。)
使用QGIS插件Locate Points Along Lines
(https://plugins.qgis.org/plugins/LocatePoints/)在GPS轨迹上创建点。我在示例中使用了5m的间隔。
II。)
创建一个Concave Hull
具有Processing > Toolbox > QGIS geoalgorithms >Vector geometry tools > Concave hull
。0.1
在示例中,我使用了阈值。如果阈值太低,则输出多边形内可能有孔。
III。)
现在,您可以借助骨架算法来计算“均值”线。在中搜索骨骼Processing Toolbox
。使用中的v.voronoi.skeleton
工具GRASS GIS 7 commands
。
热图方法:
由于处理步骤的计算时间,该方法更加耗时。可以将其视为接近更通用解决方案的想法。
测试数据:
一世。)
使用QGIS插件沿GPS轨迹创建点沿线定位点(https://plugins.qgis.org/plugins/LocatePoints/)。对于热图方法,我使用了2m的间隔。
II。)
使用QGIS热图插件创建热图。我使用的半径为40m。我增加半径,直到输出栅格中没有孔为止。您必须尝试使用不同的半径值。
III。)
编辑无需保留确切的热图栅格值。
现在,我想将栅格稀疏到“白色”区域,其中大多数点都集中在这里。因此,我重新计算了输出栅格。输出栅格的最小/最大值为0
和 89.7935
。我只使用上面的值44
。因此,我使用了“经验法则”。将最大值四舍五入并除以二。再次舍入该值。89/2 = 44,5
-> 44
。我使用了OSGeo4W Shell :gdal_calc -A heatmap.tif --calc="A>=44" --NoDataValue=0 --outfile=heatmap_44_NoData.tif
。
IV。)
已编辑
a)用重新多边形化重新计算的热图 Raster > Conversion > Polygonize ...
b)简化多边形Vector > Geometry Tools > Simplify geometries
。我已使用的公差2
。较简单的多边形可以减少骨骼的处理时间。
c)计算骨架:在“处理工具箱”中搜索骨架。使用v.voronoi.skeleton
GRASS GIS 7命令中的工具。
您会看到,比起我的第一个答案,结果行代表了该路线最可能的位置。特别是对于北部的弯道,中线沿着三个更靠近的轨迹。东部的弯道也一样。
该方法的优点:
缺点:
如果有人可以优化处理步骤,欢迎您!
use weight from field
。可以通过某种方式使用诸如速度(慢速/快速)或其他信息来加权数据吗?加权可以用于改善热图。