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 22 May 2019 10:13

felixd
Participant occasionnel
Date d'inscription: 20 Jun 2017
Messages: 46

QGIS 3: Modeleur graphique - Execute SQL et geometry

Bonjour,

Un plugin permettait de faire du calcul de longueur et de surface trés simplement dans QGIS 2. Cette outil dont j'ai perdu le nom, désolé, n'est pas porté dans la version 3 de QGIS.

Je tente donc d'utiliser le modeleur graphique pour réaliser une opération très simple:
  - Calculer le longueur totale des entités linéaires sélectionnées

J'ai une entré, un algorithmes qui me ressort les entités sélectionnées (Extraire les entités séléctionnées) suivi de l'algorithme Exécuter SQL dans lequel j'ai écrit.

select longueur as longueur, sum(st_length(geometry)) from "input" group by longueur

Mais voici le message d'erreur en retour:

ERROR 1: Undefined function 'st_length' used.

C'est pareil pour length.

Ne peut on pas faire des fonctions géométrique dans Executer SQL. J'utilise le paramètre SQL OGR, et OGR connait la commande ST_Length ???

Voila si vous avez une idée elle sera la bien venue.

Merci pour votre aide.

Dernière modification par felixd (Wed 22 May 2019 10:24)

Hors ligne

 

#2 Wed 22 May 2019 10:44

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

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

Bonjour,
Je ne suis pas sûr que l'algorithme "Exécuter SQL" soit fait pour générer des couches. J'avoue ne pas m'être penché sur le sujet et ne pas bien comprendre son usage. Mais ça c'est une autre histoire.
Sinon, vous pouvez calculer dans un champ de la couche la longueur/surface de chaque entité dans la couche puis utiliser le panneau des Statistiques sur vos éléments sélectionnés (sans créer de champ, vous pouvez aussi juste taper la formule $length).

Hors ligne

 

#3 Wed 22 May 2019 13:52

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

Bonjour,

pourquoi ne pas créer dans votre couche de ligne avec la calculatrice de champs un champs virtuel (pour la mise à jour auto) nommé par exemple
long_totale_select et la formule suivante :

Code:

 sum($length, filter:=is_selected( ))

Cordialement,

Hors ligne

 

#4 Wed 22 May 2019 14:14

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

Sinon pour répondre à vos questions :

felixd a écrit:

select longueur as longueur, sum(st_length(geometry)) from "input" group by longueur


Si vous mettez input, input de ne doit pas correpondre à votre nom de couche mais votre nom de fichier. (par exemple input.shp)

felixd a écrit:

Ne peut on pas faire des fonctions géométrique dans Executer SQL. J'utilise le paramètre SQL OGR, et OGR connait la commande ST_Length ???


Non, il faut utiliser le dialect SQLITE

En bref, pour plus de souplesse,
il vaut mieux utiliser Execute SQL du fournisseur QGIS au lieu de celui de GDAL.

Hors ligne

 

#5 Wed 22 May 2019 14:53

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

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

lejedi76 a écrit:

Bonjour,

pourquoi ne pas créer dans votre couche de ligne avec la calculatrice de champs un champs virtuel (pour la mise à jour auto) nommé par exemple
long_totale_select et la formule suivante :

Code:

 sum($length, filter:=is_selected( ))

Cordialement,


Hé c'est malin, ça!

Hors ligne

 

#6 Wed 22 May 2019 16:46

felixd
Participant occasionnel
Date d'inscription: 20 Jun 2017
Messages: 46

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

Bonjour et merci pour vos réponses

Vos suggestions bien que pertinentes, ne me satisfont pas.
Je veux réaliser un outil qui soit utilisable sur n'importe quelle couche de linéaire et utilisable par n'importe quelle personne du service.

Dernière modification par felixd (Wed 22 May 2019 16:59)

Hors ligne

 

#7 Wed 22 May 2019 17:01

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

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

Je veux réaliser un outil qui soit utilisable sur n'importe quelle couche de linéaire et utilisable par n'importe quelle personne du service.


Ah ça, c'était pas dans l'énoncé de départ big_smile
Faudrait peut-être un peu plus préciser ce que vous souhaitez comme rendu: une couche, une fenêtre? Je comprends que vous faites un script ou un modèle. Peut-être que l'algorithme aggregate peut remplacer le "Exécuter SQL"...

Hors ligne

 

#8 Wed 22 May 2019 20:55

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

SANTANNA a écrit:

Peut-être que l'algorithme aggregate peut remplacer le "Exécuter SQL"...


Clairement c'est ce qu'il faut utiliser avec les paramètres suivants :

Expression en entrée : $length
Fonction d'aggrégat : sum
Nom : longueur_totale
Type : Integer

Ceci s'incorpore facilement dans un modèle.  Execute SQL n'est pas l'outil le plus adapté pour faire cela. Bien joué SANTANNA.

Hors ligne

 

#9 Thu 23 May 2019 09:01

felixd
Participant occasionnel
Date d'inscription: 20 Jun 2017
Messages: 46

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

YYYEEEESSSS

Trop trop fort. Merci
Donc, dans mon modeleur (mon premier):
Une entrée
Extraire les entités
Calculatrice de champ
Agrégation

Et le tours est joué.

MERCI ENCORE.

Hors ligne

 

#10 Wed 07 August 2024 08:55

triird
Participant occasionnel
Date d'inscription: 13 Jan 2022
Messages: 18

Re: QGIS 3: Modeleur graphique - Execute SQL et geometry

Bonjour,

Ayant été confronté au problème je poste la solution ici pour pouvoir utiliser la géométrie dans l'outil "Executer SQL"  :

SELECT
ROUND(SUM(champ_sum)) AS nom_champ_sum,
champs_pour_grouper,
champs_lat,
champs_lon,
MakePoint(champs_lon, champs_lat, 4326) AS geom
FROM input1
GROUP BY champs_pour_grouper;

Théo

Hors ligne

 

Pied de page des forums

Powered by FluxBB