Obtenir le segment d'une ligne, traversé par un autre avec l'expression QGIS

Nov 30 2020

J'ai deux couches de lignes dans QGIS 3.16: ligne 1 (bleue), ligne 2 (rouge). Les points blancs sont les sommets (nœuds) des deux lignes. Ils n'ont pas de sommet commun, ne sont pas connectés. Comment puis-je obtenir le segment de la ligne 1 qui est traversé par la ligne 2 à l'aide d'expressions QGIS? Je voudrais générer une ligne par générateur de géométrie du segment jaune en surbrillance (voir capture d'écran).

J'ai essayé cela en tant que couche de symboles générés par la géométrie sur la ligne 1: je segmente d'abord la ligne 1 pour obtenir les segments, puis je la croise avec la ligne_2 sur l'autre couche. J'obtiens une sortie booléenne (vrai / faux) et je suis également capable de créer un point de croisement où les deux lignes se croisent. Cependant, j'ai essayé en vain d'aborder directement le segment qui est traversé.

crosses ( 
   segments_to_lines (  
      $geometry),   
   geometry (
      get_feature( 
        'line_2', 
        'fid', 
        1
      )
   )
)

Dans ce cas simple, je pourrais obtenir le segment avec l'expression (c'est la façon dont je la ligne jaune généré): geometry_n (segments_to_lines ( $geometry), 3). Cependant, je dois définir le numéro de segment (3 dans ce cas) manuellement, mais je veux créer ce numéro automatiquement car j'ai beaucoup de cas différents et je ne peux pas le faire manuellement. Comment cela peut-il être fait?

Pour le contexte de cette question, voir: Repositionner des points de manière aléatoire à une certaine distance dans QGIS (étape 5)

Réponses

1 Taras Nov 30 2020 at 17:21

S'il n'est pas obligatoire de déployer une expression QGIS, vous pouvez essayer le workflow suivant

Étape 1. Appliquer des "lignes éclatées" pour le calque'Line 1'

Étape 2. Utilisez le géoalgorithme «Géométrie par expression» , où le résultat de l'étape 1 croise les entités de la couche 'Line 2'. Vous pouvez également utiliser une "Intersection" de base .