#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 :
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)
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
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
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
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