Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 20 January 2023 12:48

Pasteque
Juste Inscrit !
Date d'inscription: 9 Jun 2016
Messages: 9

QGIS/Editeur de fonction: calcul longueur ligne intersectee

Bonjour à tous,

Afin de faciliter la manipulation de la calculatrice de champ par les utilisateurs de mon organisation, j'aimerais créer une fonction personnalisée grâce à l'éditeur de fonction. J'ai bien essayé d'en créer une mais d'une part, le calcul était trop long et d'autre part le résultat était faux (reflet de mes faibles compétences en python!).
Le besoin est le suivant : éditer une formule permettant de calculer la longueur totale d'une ligne intersectant un ou plusieurs polygone de même valeur et pondérer les résultats.


Je m'explique. Dans l'image jointe, la ligne traverse différents enjeux, du faible au maximal. Selon l'enjeu traversé, la ligne n'a pas le même impact et son poids ne sera pas le même. On applique un coefficient multiplicateur à la longueur de la portion de ligne (en km) intersectant chaque enjeu : 1 = faible, 2=modéré, 3= fort, 4=très fort, 5= maximal, puis on fait la somme des portions lignes pondérées.

On obtient ainsi, pour l'exemple joint, la somme : 1*(3.19+4.38) + 2*0 + 3*4.8 + 4*0 + 5*9.22

J'ai réussi à traduire ce besoin avec les fonction de base de la calculatrice de champ par la formule (exemple pour l'enjeu maximal, répété pour tous les enjeux ).

Code:

length(intersection($geometry,aggregate('polygone','collect',$geometry,"Clase"='Maxima')))/1000

La formule s'exécute rapidement mais n'est pas simple à manipuler pour les non initiés.
L'idée serait donc d'avoir une fonction personnalisée, intégrée dans la calculatrice de champs, correspondant à cette formule et qui pourrait se présenter de telle sorte :
pond_ligne('Nom de la couche de polygones')

L'un de vous serait-il en mesure de m'aider sur ce sujet ?
Je précise que le géotraitement "Intersecter" répond lui aussi en partie au besoin mais est peu envisageable au vu du résultat généré qui demanderait trop de manipulations.

Merci d'avance pour votre retour,
Bonne journée !

Dernière modification par Pasteque (Fri 20 January 2023 13:51)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

Pied de page des forums

Powered by FluxBB