Message posté par : AlexisSIG
----------------------------------------
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();
}
}
}
-----------------
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=377353#p377353
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net