#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
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: 3945
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
Re: QGIS: Altitude de polyligne
merci @santanna
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: 3945
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