Suite

Créer une ligne "moyenne" à partir de plusieurs lignes à l'aide de QGIS


J'ai plusieurs caractéristiques de lignes (les ont également en multipoints…) représentant des chemins similaires (sentiers de montagne, dans ce cas) avec diverses précisions GPS, ce qui entraîne de nombreuses lignes proches les unes des autres, mais pas parfaitement superposées.

Pour les besoins de ce projet, je cherche un moyen de calculer une ligne "moyenne" à partir de tous et de générer une ligne résultante de la position la plus probable du sentier.

Comment procéderiez-vous, en utilisant QGIS ou tout autre outil (j'ai pensé à OGR…) ?


Données de test:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 pistes GPS
  • dans une grille de 1x1km

JE.)

Créez des points le long de vos traces GPS avec le plugin QGISLocaliser des points le long des lignes(https://plugins.qgis.org/plugins/LocatePoints/). J'ai utilisé un intervalle de 5 m dans mon exemple.

II.)

Créer unCoque concaveavecTraitements > Boîte à outils > Géoalgorithmes QGIS > Outils de géométrie vectorielle > Coque concave. J'ai utilisé un seuil de0.1dans mon exemple. Si le seuil est trop bas, il peut y avoir des trous dans le polygone en sortie.

III.)

Maintenant, vous pouvez calculer la ligne "moyenne" à l'aide de l'algorithme squelette. Recherche de squelette dans leBoîte à outils de traitement. Utiliserv.voronoi.squeletteoutil de laCommandes GRASS GIS 7.


L'approche de la carte thermique :

L'approche est plus chronophage, en raison du temps de calcul des étapes de traitement. Cela pourrait être considéré comme une idée peut-être pour se rapprocher d'une solution plus générale.

Données de test:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 pistes GPS
  • dans une grille de 1x1km

JE.)

Créez des points le long de vos traces GPS avec le plugin QGIS Locate Points Along Lines (https://plugins.qgis.org/plugins/LocatePoints/). Pour l'approche de la carte thermique, j'ai utilisé un intervalle de 2m.

II.)

Créez une carte thermique avec le plugin de carte thermique QGIS. J'ai utilisé un rayon de 40m. J'augmente le rayon jusqu'à ce qu'il n'y ait plus de trous dans le raster en sortie. Vous devez essayer avec différentes valeurs de rayon.

III.)

ÉDITÉ Il n'est pas nécessaire de conserver la valeur raster exacte de la carte thermique.

Maintenant, je veux éclaircir le raster jusqu'aux zones "blanches", où le plus de points sont concentrés. Par conséquent, je recalcule le raster en sortie. Les valeurs min/max du raster en sortie sont0et89.7935. Je n'utilise que les valeurs ci-dessus44. Pour cela, j'ai utilisé une "règle empirique". Arrondissez la valeur max et divisez-la par deux. Arrondissez cette valeur une autre fois.89/2 = 44,5-->44. J'ai utilisé le Shell OSGeo4W :gdal_calc -A heatmap.tif --calc="A>=44" --NoDataValue=0 --outfile=heatmap_44_NoData.tif.

IV.)

ÉDITÉ

a) Polygoniser la carte thermique recalculée avecRaster > Conversion > Polygoniser…

b) Simplifier le polygoneVector > Outils de géométrie > Simplifier les géométries. J'ai utilisé une tolérance de2. Un polygone plus simple réduit le temps de traitement des squelettes.

c) Calculer les squelettes : recherchez squelette dans la boîte à outils de traitement. Utiliserv.voronoi.squeletteà partir des commandes GRASS GIS 7.

Vous pouvez voir que la ligne résultante représente plus la position la plus probable de la piste que dans ma première réponse. Surtout pour le virage au Nord, la ligne moyenne suit les trois pistes qui sont plus proches les unes des autres. De même pour le virage à l'Est.

Avantages de l'approche :

  • de bons résultats raisonnables en utilisant exclusivement QGIS

Désavantages:

  • temps de traitement pour les grands ensembles de données
  • il faut essayer les paramètres a priori (rayon de la heatmap, valeurs min/max )
  • difficile d'automatiser les étapes de traitement
  • non testé pour les virages/courbes étroites et pour les pistes qui sortent vraiment de la ligne

Si quelqu'un peut optimiser les étapes de traitement, soyez le bienvenu !