Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB