#1 Wed 13 December 2023 11:10
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
QGIS/Python: Localisation sur point et echelle
Bonjour,
QGIS 3.28
Voici une fonction python
Elle devrait permettre de centrer la vue sur un point et à une échelle donnée
Code:
def WBO_CADRE_ZoomPointEchelle(point,echelle): if (type(point) != QgsPointXY): point = QgsPointXY(point) canvas = iface.mapCanvas() canvas.zoomScale(echelle) canvas.setCenter(point) canvas.refresh()
Lancée dans la console, elle fonctionne bien, mais l'exécution du code seul ne fait rien (pas d'erreur non plus)
Avez-vous une idée à me proposer ?
Merci et bonne journée, PYJ
Hors ligne
#2 Wed 13 December 2023 12:15
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS/Python: Localisation sur point et echelle
Pouvez vous indiquer dans quel contexte vous appelez la fonction?
Dans votre extrait vous ne faites que définir la fonction.
Par ailleurs, en python, on écrira plutôt la comparaison de type comme ci dessous.
J'ajoute également un appel à la fonction pour vous montrer comment cela pourrait s'écrire. Vous pouvez copier/coller ce code dans un script de console python qgis et l'éxecuter.
Code:
def WBO_CADRE_ZoomPointEchelle(point,echelle): if not isinstance(point, QgsPointXY): point = QgsPointXY(point) canvas = iface.mapCanvas() canvas.zoomScale(echelle) canvas.setCenter(point) canvas.refresh() if __name__ == '__console__': WBO_CADRE_ZoomPointEchelle(QgsPointXY(100,100), 1000)
Dernière modification par YoLecomte (Wed 13 December 2023 12:17)
Hors ligne
#3 Thu 14 December 2023 07:54
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: QGIS/Python: Localisation sur point et echelle
Bonjour,
Merci pour la réponse
Je lance QGIS en ligne de commande en précisant avec l'option --code le fichier de lancemant.
Ce fichier de lancement appelle une fonction qui
- Premièrement charge des couches dans la vue (sans problème)
- Deuxièmement effectue un cadrage par point et échelle (ne se fait pas)
Voici un extrait:
Code:
for comp in liste_compo: compo = comp.split("|")[0] etat = int(comp.split("|")[1]) nature = comp.split("|")[2] if (etat == 1): flag = True else: flag = False if (not GL_LAYER.WBO_LAYER_IsCoucheChargee(compo)): if (nature == "SHP"): jeu = (GL_GLOBAL.WBO_REP_SHAPE_SOURCE + "\\" + compo + ".shp") layer = GL_LAYER.WBO_LAYER_CoucheAjouter(jeu,compo) pt = GL_CADRE.WBO_CADRE_Centre(cadre) GL_CADRE.WBO_CADRE_ZoomPointEchelle(pt,int(echelle)) iface.mapCanvas().refresh()
Merci
PYJ
Hors ligne
#4 Thu 14 December 2023 09:09
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS/Python: Localisation sur point et echelle
Lorsque vous partagez du code python, il est primordial de l'indenter correctement. En l'état votre extrait est illisible.
Par ailleurs il est impossible pour quelqu'un qui souhaiterais vous aider de tenter de reproduire votre problème a partir des informations que vous donnez. Il est donc impossible de vous aider.
Par exemple:
- Que contiennent les variables cadre, pt, echelle? C'est une liste de quoi liste_compo?
- Qu'est ce que GL_LAYER? Une classe que vous avez créez? Si oui où?
- Quand vous dites, ne se fait pas, est ce que rien ne se fait? est ce que la mise à l'échelle se fait mais pas le centrage?
Qu'avez vous déjà tenté pour résoudre le problème?
Si vous ajoutez un appel à print() dans la fonction, la sortie apparait t-elle bien? cela vous montrera si votre fonction est bien éxecutée.
Bref lorsque vous demandez de l'aide sur un forum, il est important de contextualiser et d'orienter au maximum les personnes qui donnent de leur temps libre pour vous aider.
Il est également important de montrer que vous avez déjà fais des recherches et tentative par vous même pour tenter de résoudre votre problème, ceci permettant de ne pas creuser des pistes que vous auriez déjà explorée.
Hors ligne
#5 Fri 15 December 2023 13:46
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: QGIS/Python: Localisation sur point et echelle
Bonjour,
Désolé,
Pour info, le script que vous m'avez demandé de tester dans le script de la console fonctionne très bien,
Le même code exécuté depuis mon fichier .py de lancement s'exécute bien, mais ne fait rien
PYJ
Hors ligne
#6 Mon 18 December 2023 13:03
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS/Python: Localisation sur point et echelle
Bonjour,
J'ai effectué quelques tests et effectivement, le code n'a pas d'effet lorsqu'il est appelé depuis la ligne de commande (canvas.scale() renvoi toujours 1).
Il est très probable que cela soit dû au fait que lorsque le code python est exécuté l'application n'est pas encore chargée complétement (notamment le canevas de carte).
Cela explique que les appels python qui doivent interagir avec lui n'aient aucun effet.
Il est également possible que QGIS charge un projet vierge au démarrage et ce chargement aura pour effet de modifier les paramètres que vous tentez de mettre en place.
Pour contourner cela, vous pourriez plutôt essayer de créer un plugin et d'appeler votre code dans la fonction d'initialisation du plugin (__init__.py). Les plugins sont chargés tardivement dans le lancement de QGIS et je pense qu'au moment où ils sont initialisés, le canevas de carte contenu dans iface est prêt. C'est à mon avis une piste à explorer. Ceci dit je ne garantis pas que cela fonctionne, il est également possible que la code que vous fournissez dans la ligne de commande soit appelé avec un QGIS dans le même état que lors de l'initialisation des plugins.
A tester donc...
Hors ligne
#7 Mon 18 December 2023 13:13
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: QGIS/Python: Localisation sur point et echelle
OK
Merci en tout cas pour votre réponse,
Je ferai un test avec plugin plus tard
Bonne journée
PYJ
Hors ligne
#8 Wed 20 December 2023 11:10
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: QGIS/Python: Localisation sur point et echelle
Bonjour,
Question subsidiaire,
Si je pars sur un plugin, comment faire un plugin sans interface graphique ?
Merci
PYJ
Dernière modification par pyjoubert (Wed 20 December 2023 11:10)
Hors ligne
#9 Wed 20 December 2023 12:19
- YoLecomte
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 7 Jul 2015
- Messages: 266
Re: QGIS/Python: Localisation sur point et echelle
Bonjour,
Votre question est trop vague. Qu'est ce qui vous empêche de le faire? Avez vous regarder comment faire un plugin QGIS minimal? Il n'y a aucune obligation d'avoir une interface graphique.
Voilà un exemple de plugin sans interface graphique (il ajoute juste des expressions).
https://github.com/opengisch/qgis_timezone_expressions/
Hors ligne
#10 Tue 26 December 2023 15:29
- pyjoubert
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Mar 2006
- Messages: 347
Re: QGIS/Python: Localisation sur point et echelle
C'est tout bon,
Merci encore
PYJ
Hors ligne