Message posté par : Gabi63
----------------------------------------
Bonjour,
Tant mieux si vous arrivez à vos fins.
Je ne peux pas reproduire le code chez moi, il me manque l'import CoordClickDialog. Je
ne peux donc pas reproduire vos problèmes.
Néanmoins, il me semble que votre code tourne deux fois car vous connectez deux signaux
différents à votre méthode display_point : ligne 233 et ligne 256 (appelé dans la
déclaration de add_action l. 224).
Quelques suggestions qui, j'espère, vous serons utiles :
Pour récupérer les attributs, si la couche est active vous pouvez récupérer directement
l'entité sélectionné, le code suivant est écrit de mémoire, je n'ai pas QGIS pour
tester le fonctionnement :
-----------------
Code :
def show_attr():
"""
"""
feature = layer.selectedFeatures()
if bool(feature):
feature = feature[0]
# Introduire self.dlg sinon, le code suivant affichera un bandeau en haut du
canvas qui ne disparaîtra pas (duration=0)
msg_level = Qgis.MessageLevel(Qgis.Info)
iface.messageBar().pushMessage(title="Displaying attributes",
text=f"{feature['attr1']}, {feature['Commentaires']}",
level=msg_level, duration=0)
global layer # A éviter si le script est exécuté dans un projet plus important
layer = QgsProject.instance().mapLayersByName(name)[0]
layer.selectionChanged.connect(show_attr)
-----------------
Si la couche n'est pas active je vous suggère d'utiliser des requêtes lors du
getFeatures() pour accélérer le code en cas de couche avec un nombre important
d'entité :
- QgsFeatureRequest.setFilterRect(pc.boundingBox()) : récupérera toutes les entités
intersectant la boundingBox de votre point.
- QgsFeatureRequest.setDistaneWithin(pc, 20) : récupérera toutes les entités dans une
distance de 20 mètres de votre point.
Les requêtes sont à déclarer en amont puis à appeler dans le get de la manière suivante
:
-----------------
Code :
request = QgsFeatureRequest.setFilterRect(point.boundingBox())
entites = coucheParcelles.getFeatures(request)
-----------------
Bon courage.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=372511#p372511
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