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 Fri 15 February 2019 10:52

upriste
Participant occasionnel
Date d'inscription: 14 Feb 2019
Messages: 48

QGIS: Altitude de polyligne

Bonjour,

Je travaille sur un réseau de voirie. Je souhaiterais  sur chacun de mes tronçons pouvoir déterminer :
==> l'altitude du début du tronçon et de fin du tronçon
==> l'altitude mini et maxi mesurée le long du tronçon

J'ai d'abord utilisé l'outil d'extraction des sommets de qgis : vecteur/outil de geometrie/extraire les sommets
J'ai obtenu une couche de ponctuelle "ponctuelles-sommet-voirie" de tous les sommets des tronçons (et pas seulement les extrémités de mes tronçons). Ce qui est intéressant dans le cadre de mon besoin mais pas suffisant.
Comment faire pour n'obtenir que les extrémités des tronçons (les noeuds)?

Ensuite, j'ai utilisé l'extension "point sampling tools" pour extraire les points de mon MNT (5m) et les aient affecté à la couche "ponctuelle-sommet-voirie".
J'ai obtenu une nouvelle couche "ponctuelle-sommet-voirie-altitude" contenant les sommets des voiries ainsi que l'indication d'altitude.

Ensuite, j'ai fait une jointure spatiale (intersecter) entre ma couche voirie et la couche ponctuelle "ponctuelle-sommet-voirie-altitude".
J'ai obtenu une couche voirie contenant les informations d'altitude. Chaque troçon est doublonné autant de fois qu'il y a de sommets le reliant à un autre tronçon. Je me retrouve avec plusieurs altitude pour chaque tronçon.

J'ai créé 4 champs : Z debut, Z fin, Z min, Z max

Comment faire pour affecter toutes ces altitudes dans les bons champs?
Autrement dit comment savoir où se trouve l'altitude du début du tronçon et celle de fin? Et comment les classer dans les champs correspondant?
Et comment classer le Z min et le Z max dans les bons champs?

Merci par avance de votre aide.

Hors ligne

 

#2 Fri 15 February 2019 11:52

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: Altitude de polyligne

Bonjour,

- Considérant que la couche points possède une colonne id relative aux lignes, une vertex_index indiquant l'ordre du noeud/point, et une colonne z relative à l'altitude
- Que la couche lignes possède une colonne id (naturellement)

Pour avoir le z min, créer ce champ :

Code:

aggregate('Sommets','min',"z", filter:=id=attribute(@parent,'id'))

Pour le z de début de ligne:

Code:

aggregate('Sommets','max',"z", filter:=id=attribute(@parent,'id') and vertex_index=0)

Pour le z de fin de ligne, c'est plus compliqué :

Code:

with_variable('endpoint',

    aggregate('Sommets','max',"vertex_index", 
        filter:=id=    attribute(@parent,'id')),

    aggregate('Sommets','max',"z", 
        filter:=id=attribute(@parent,'id') and vertex_index=@endpoint)

)

geodata au cerema et petits billets en géomatique

Hors ligne

 

#3 Fri 15 February 2019 13:06

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3940

Re: QGIS: Altitude de polyligne

Bonjour,
Et la partie

- Considérant que la couche points possède une colonne id relative aux lignes, une vertex_index indiquant l'ordre du noeud/point, et une colonne z relative à l'altitude
- Que la couche lignes possède une colonne id (naturellement)


peut s'obtenir directement avec les algorithmes de la boîte à outils Traitements tels que Drape (set z value from raster) et Extraire les sommets, même si le champ "z" devra être calculé ou remplacé par z($geometry) dans les expressions de Matthieu.
Je me demande bien pourquoi il n'y a pas de z_min et z_max comme fonction par défaut.
@MathieuR Jolie, la formule pour obtenir le z de fin.

Hors ligne

 

#4 Fri 15 February 2019 13:20

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: Altitude de polyligne

merci @santanna smile

Je me dis qu'il manque peut-être une fonction dans le calculateur d'expression qui permette de retourner des objets selon une expression. Dans mon expression, c'est un peu un hack qui détourne l'usage de aggregate à cette fin

Par exemple, une fonction du type :

Code:

get_features(layer:='layer', expression:='expression')

avec un résultat en array

Ce qui aurait permis, ici d'écrire

Code:

get_features(layer:='layer', expression:='id=mon_id and vertex_index=mon_vertex_index')

Pour le moment, on ne peut faire que

Code:

get_feature('layer', 'attribute', 'value')

@santanna, sais-tu si ce type de mécanisme est implémenté, ou si cela le sera. Sinon, cela mériterait-il une Feature Request selon toi ?

Les fonctions du calculateur d'expression me semblent encore calées sur l'ancien schéma d'unicité des résultats. Avec la prise en compte des arrays, ça change tout


geodata au cerema et petits billets en géomatique

Hors ligne

 

#5 Fri 15 February 2019 17:16

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3940

Re: QGIS: Altitude de polyligne

Je dirais pas que c'est un "gros" détournement; je pense que c'est le genre de traitements attendu de ces outils. Ce n'est juste pas très "friendly" et un raccourci via la récupération des entités elles-mêmes peut simplifier la chose, en effet.

@santanna, sais-tu si ce type de mécanisme est implémenté, ou si cela le sera. Sinon, cela mériterait-il une Feature Request selon toi ?


Je ne crois pas que cela existe déjà (j'ai pas trop suivi les discussions ces derniers temps pour dire si c'est dans les tuyaux, cela dit) et une feature request (voire une QEP si le cœur t'en dit) est un premier pas vers la mise en place éventuelle.

Je me demande bien pourquoi il n'y a pas de z_min et z_max comme fonction par défaut.


Requête déposée pour l'accès au z_min et z_max des géométries: https://issues.qgis.org/issues/21280

Hors ligne

 

Pied de page des forums

Powered by FluxBB