#1 Wed 19 October 2022 09:05
- BOYER.M
- Participant actif
- Date d'inscription: 5 Sep 2012
- Messages: 148
QGIS 3: Z geometrique de lignes depuis des attributs
Bonjour à tous,
Je cherche à modifier le Z géométrique de mes lignes à partir de la table attributaire.
Ayant plusieurs plusieurs centaines parfois milliers de tronçons, je cherche à s'il existe un outil pour automatisé cela.
Ces valeurs Z amont et Z aval sont présentent dans ma table attributaire pour chaque ligne. (Certaines ont un ou les deux Z égals à 0 car inconnu).
Pensez vous qu’il soit possible d’attribuer ces Z à la géométrie de la couche, chaque ligne étant dessinée dans le sens amont vers aval ?
Quelques-uns ont des sommets intermédiaires devant rester à Z=0.
Bien cordialement et merci par avance
Dernière modification par BOYER.M (Wed 19 October 2022 09:06)
Hors ligne
#2 Wed 19 October 2022 23:49
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: QGIS 3: Z geometrique de lignes depuis des attributs
Bonjour,
mea-culpa: Je me suis rendu compte après coup que la fonction geometries_to_array n'est disponible qu'en version dev (soit en 3.28 à partir de vendredi) donc soit vous attendez avec la 3.28 soit vous faites avec une version osgeo4w nightly. Il y a peut-être moyen de remplacer par un autre jeu de fonctions mais pourquoi faire simple quand on peut faire compliqué...
Depuis la calculatrice de champ, sélectionnez le champ <geometry> et appliquez la formule ci-après (la logique est de décomposer l'entité en une liste de sommets,d'éditer le z du premier et du dernier puis de recomposer la ligne). EXECUTEZ SUR UN JEU DE DONNEES TEST D'ABORD!!!
Code:
with_variable( 'listesommets', geometries_to_array( -- on convertit en une liste de points nodes_to_points(@geometry) -- les sommets de la ligne ), make_line( -- on recrée la ligne array_foreach( -- à partir de @listesommets, -- la liste make_point( -- des points dont on conserve les x et y x(@element), y(@element), case -- mais modifie le z selon un scénario when array_find(@listesommets, @element) = 0 then z_amont when array_find(@listesommets, @element) = array_length(@listesommets)-1 then z_aval else coalesce(z(@element), 0) end ) ) ) )
Il y a certainement d'autres moyens, genre fonction python, SQL mais bon...
Hors ligne
#3 Thu 20 October 2022 08:19
- BOYER.M
- Participant actif
- Date d'inscription: 5 Sep 2012
- Messages: 148
Re: QGIS 3: Z geometrique de lignes depuis des attributs
Bonjour SANTANA,
Merci de pour votre aide.
Je vais attendre vendredi pour tester votre formule.
Cordialement,
MAJ : J'ai testé la formule elle fonctionne parfaitement.
Encore merci, cela va me faire gagner de nombreuse journées de "travail".
Dernière modification par BOYER.M (Fri 28 October 2022 15:14)
Hors ligne