Message posté par : mathieu rajerison
----------------------------------------
J'ai fait un projet avec de nouvelles expressions en PJ, avec données d'exemple
Solution 1
Voici une expression qui récupère en tableau la distance vers chacun des noeuds d'une
ligne, ici la première ligne.
Cela utilise point_n, num_points
-----------------
Code :
with_variable(
'nodes',
nodes_to_points(geometry(get_feature_by_id('lignes2', 1))),
array_foreach(
generate_series(1, num_points(@nodes)),
distance(point_n(@nodes, @element), $geometry)
)
)
-----------------
Renvoie
-----------------
Code :
[ 0.025810520619384398, 0.025361285935177422, 0.0241702017… ]
-----------------
Par contre, je ne sais pas comment on réalise un agrégat d'un tableau (array) : on
pourrait vouloir récupérer la valeur moyenne des distances..Cela serait bien utile !..
Solution 2
Du coup, j'ai tenté cette expression avec un nombre fixe de points interpolé de 3
(selon la méthode de Axel S).
Cela utilise interpolate_point
-----------------
Code :
with_variable(
'mean_distances',
aggregate(
'lignes2',
'array_agg',
with_variable(
-- on récupère la géométrie de la ligne cible à comparer
'feat',
geometry(@parent),
with_variable(
'distances',
array_foreach(
generate_series(0, length(@feat), length(@feat)/3),
distance($geometry, line_interpolate_point(@feat, @element))),
-- moyenne des distances
(@distances[1] + @distances[2] + @distances[3])/3
)
)
),
-- on récupère l'index de la distance mi
array_find(@mean_distances, array_first(array_sort(@mean_distances))) + 1
)
-----------------
Update de la solution du haut
En aparté, en remplacement de l'expression du post du haut, voici une expression qui
utilise array_sort, array_first et qui semble plus élégante :
-----------------
Code :
with_variable(
-- créer tableau de valeurs de distances
'distances',
aggregate('lignes2', 'array_agg', distance(geometry(@parent),
$geometry)),
with_variable(
-- valeur minimale de distance
'min_distance',
array_first(array_sort(@distances)), -- premier élément du tableau ordonné
-- trouver l'index de la valeur minimale
array_find(@distances, @min_distance) + 1
)
)
-----------------
Tout est dans le projet en PJ
Je vais voir si je peux trouver des infos sur les agrégats de types Array pour calculer
des sommes de tableaux, ou moyennes
@Santanna, @JD, avez-vous des infos là-dessus ?
----------------------------------------
Ce message est accompagné de fichiers, pour les télécharger, suivre le lien ci-dessous.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=334815#p334815
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net