banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB