Je voudrais aligner plusieurs points sur une ligne, ou des lignes à l'intérieur d'un calque, en utilisant une tolérance ou un tampon spécifié autour des objets de ligne. Veuillez vous référer à l'exemple de croquis ci-joint.
Pour les besoins de cet exemple, les points les plus proches de la ligne dans l'image AVANT sont à moins de 5 unités de carte de la ligne, tandis que les points les plus à l'extérieur sont à plus de 10 unités de carte. Je voudrais accrocher les points les plus proches sur la ligne la plus proche, en utilisant une tolérance de 5 unités de carte pour obtenir le résultat dans l'image APRÈS.
Réponses:
Il existe un outil intégré pour le faire dans la version (non publiée) de QGIS 3.0. Vous pouvez obtenir un instantané nocturne sur le site Web de QGIS pour le tester à l'avance.
Pour faire ça:
Voici le résultat, montrant les points d'origine sous forme de «x» et les points cassés sous forme de points verts. J'ai utilisé une tolérance ici afin que seuls certains points d'entrée soient capturés.
la source
Cela peut être possible avec PyQGIS . Pour la prochaine situation:
le code suivant, considérant une tolérance de 5 unités de carte, a été exécuté sur la console Python de QGIS:
Il a été produit une couche de mémoire où les points ont été capturés selon la tolérance précédemment considérée de 5 unités de carte et un chemin perpendiculaire à la ligne.
la source
Vous pouvez également le faire dans le Field Calculator avec le plugin refFunctions. Vous pouvez utiliser la calculatrice de champs pour mettre à jour une géométrie de couche ainsi que des champs. refFunctions vous donne une fonction "geomdistance" pour trouver la ligne la plus proche dans une distance donnée (ou "geomnearest" si vous ne voulez pas de seuil) et retournera un attribut ou la géométrie, et la fonction "most_point" trouvera la plus proche point sur une géométrie donnée. Enchaînez-les comme pour calculer de nouvelles géométries pour votre couche de points:
closest_point(geom_from_wkt(geomdistance('snap_lines','$geometry',10)) , $geometry)
Au lieu de mettre à jour directement la géométrie, vous pouvez plutôt calculer un champ avec la géométrie accrochée. Je stocke plusieurs géométries pour aligner les points de ponceau sur différentes couches de cours d'eau et je peux facilement mettre à jour la géométrie des points dans la calculatrice de terrain en fonction des lignes de cours d'eau que je dois utiliser.
Il y a quelques limites à cela, les deux couches doivent être le même CRS et la fonction géomdistance vous donnera une erreur si vous avez plus de 100000 points mais vous pouvez changer cette limite si vous éditez le fichier du plugin refFunctions.
la source