Annonce
Les inscriptions sont ouvertes ! L'association GeoRezo sera présente.
Pages: 1
- Sujet précédent - QField : Filtrer couche PostgreSQL à partir d'une variable - Sujet suivant
#1 Hier 10:56
- AlexisSIG
- Participant occasionnel
- Date d'inscription: 17 Mar 2025
- Messages: 10
QField : Filtrer couche PostgreSQL à partir d'une variable
Bonjour,
J'ai un projet QGIS avec un ensemble de couches provenant d'une connexion PostgreSQL.
Je mets ce projet sur QField pour une prise de données naturaliste sur le terrain. La connexion avec la base se fait sans problème.
Je souhaite cependant, filtrer l'ensemble de mes couches selon un champ. J'ai donc créé une variable projet sur QGIS que je laisse vide. J'ai ensuite écrit un script QML (ci-dessous) permettant l'ouverture d'un popup à mon ouverture de mon projet sur QField et me permettant de renseigner une valeur pour cette variable et ainsi filtrer mes couches. (Le script présenté n'est fait que pour filtrer une seule couche, je l'adapterai pour les autres lorsque celui-ci fonctionnera). Les logs QField me permettent de voir que j'ai le bon nom de champ reconnu et le bon filtre renseigné lorsque je l'intègre.
Pour autant, ma couche affiche 0 entité. Je n'arrive pas à comprendre où mon script cesse de fonctionner correctement.
Code:
import QtQuick
import QtQuick.Controls
import org.qfield
import Theme
Item {
Component.onCompleted: {
codeetudeDialog.open();
}
QfDialog {
id: codeetudeDialog
parent: iface.mainWindow().contentItem
width: 300
height: 180
x: (iface.mainWindow().width - width) / 2
y: (iface.mainWindow().height - height) / 2
title: "Saisissez un Code Etude"
Column {
id: columnLayout
width: parent.width
TextField {
id: codeetudeField
width: parent.width
text: ""
}
}
onAccepted: {
const valeur = codeetudeField.text.trim();
if (valeur === "") return;
ExpressionContextUtils.setProjectVariable(qgisProject, "code_etude", valeur);
let projectInfo = iface.findItemByObjectName("projectInfo");
projectInfo.saveVariable("code_etude", valeur);
const couches = qgisProject.mapLayersByName("Etude");
if (couches.length === 0) return;
const couche = couches[0];
const valeurSafe = valeur.replace(/'/g, "''");
couche.subsetString = '"Code_Etude" = \'' + valeurSafe + "'";
// Remplace reload() + triggerRepaint() + mapCanvas().refresh()
iface.reloadProject();
}
}
}Hors ligne
#2 Hier 12:53
- Al3+
- Participant actif
- Lieu: Fécamp
- Date d'inscription: 5 Sep 2005
- Messages: 74
Re: QField : Filtrer couche PostgreSQL à partir d'une variable
Bonjour,
N'y a-t-i pas une subtilité avec les ' et les " ?
Je vous propose :
Code:
couche.subsetString = '"Code_Etude" = \'' + valeurSafe + '\'';
au lieu de
Code:
couche.subsetString = '"Code_Etude" = \'' + valeurSafe + "'";
Hors ligne
#3 Hier 13:13
- AlexisSIG
- Participant occasionnel
- Date d'inscription: 17 Mar 2025
- Messages: 10
Re: QField : Filtrer couche PostgreSQL à partir d'une variable
Je viens d'essayer la solution proposer mais rien ne change malheureusement
Hors ligne
#4 Hier 21:19
- fabriceg
- Juste Inscrit !
- Date d'inscription: 3 Mar 2025
- Messages: 4
Re: QField : Filtrer couche PostgreSQL à partir d'une variable
Bonjour,
Je ne suis pas familier avec le QML, en python j'aurais plutôt écrit
Code:
couche.setSubsetString('"Code_Etude" = \'' + valeurSafe + '\'')Hors ligne
Pages: 1
- Sujet précédent - QField : Filtrer couche PostgreSQL à partir d'une variable - Sujet suivant


