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é ?

#1 Wed 16 July 2014 10:50

snaileater
Participant actif
Date d'inscription: 5 Nov 2008
Messages: 121

QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

Bonjour,
je fais mes premières armes en programmation python sous QGIS 2.2 ...
J'ai déroulé les "exercices" qu'on trouve sur http://www.qgisworkshop.org qui sont plutôt bien fait et pas trop difficile à saisir ...

Cependant (excusez moi la question un peu "iconoclaste" d'un débutant qui veut peut-être aller trop vite, mais ...) :

l'aide officielle sur l'API Python QGIS est-elle finalisée ? (voire fonctionnelle...)

Sauf erreur de ma part, j'y vois un "inventaire" des classes avec une visualisation (plus ou moins explicite) des hiérarchies entre les différents "objets". Mais quand je regarde une méthode donnée je vois juste les paramètres à passer, leurs types mais pas l'ombre d'une explication sur le sens des paramètres à passer ...

Enfin quasiment rien qui puisse aider un débutant (AMHA) ....

Au jour d'aujourd'hui je ne vois pas trop d'autre méthode qu'avancer pas à pas en explorant les exemples de code que l'on trouve un peu partout en vrac sur le net ...

Donc ... faut-il aller voir ailleurs (dans l'API C++) ? Quelle est au jour d'aujourd'hui la source de documentation la plus "explicite" ... ?

Merci pour votre retour ...

Hors ligne

 

#2 Wed 16 July 2014 12:20

Leyan
Participant assidu
Date d'inscription: 14 Oct 2013
Messages: 160

Re: QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

La meilleure ressource pour avoir une idée de ce qui est possible est le cookbook http://docs.qgis.org/testing/en/docs/py … _cookbook/

Cependant, il n'est pas à jour de la nouvelle API, donc tu devrais lire ça aussi : http://nathanw.net/2013/06/13/new-qgis-20-api/ pour comprendre les quelques changements (simplifications !)

Ensuite, c'est bien d'essayer plein de plugins et de s'inspirer de leur code quand ils font un truc intéressant. Normalement tous les plugins sont distribués sous la forme d'un fichier py donc tu peux directement lire et modifier leur code.

Ce dont tu parles est la documentation générée automatiquement depuis le code (http://www.qgis.org/api ), elle est en effet beaucoup plus succincte et sert plus de référence que de documentation pour débutant. Après, les classes les plus importantes ont quand même une ligne d'explication sur le sens de chaque méthode.

Dernière modification par Leyan (Wed 16 July 2014 12:22)

Hors ligne

 

#3 Wed 16 July 2014 12:45

gene
Participant actif
Lieu: Louvain-la-Neuve
Date d'inscription: 14 Dec 2006
Messages: 104
Site web

Re: QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

Bonjour,

I - la documentation
-----------------------

- La documentation officielle la plus à jour est traduite par des membres de l'OSGEO-fr à http://docs.qgis.org/2.2/fr/docs/pyqgis … _cookbook/
- il y a aussi le livre du "créateur" de QGIS (Gary Sherman),  "PyQGIS Programmer's guide" chez  https://locatepress.com/ppg

Cependant, pour un programmeur Python, habitué à sa simplicité et à l'utilisation d'autres modules spatiaux, la manière d'expliquer les choses est rendue complexe à souhait alors qu'il y a moyen de simplifier le tout  de manière plus "Pythonesque"  (voir chez les voisins http://www.forumsig.org/showthread.php/ … -le-retour).  La raison est historique : l'API de QGIS est une API SIP, générée à partir de l'API C++, d'où le renvoi à l'API C++ pour les détails.

Alors, dans le détail:

1) contrairement à ce qu'il est souvent dit, il faut bien connaître et comprendre Python avant de commencer (le traitement des listes en Python, par exemple)
2) il y a trois moyens d'utiliser Python dans QGIS:
a) dans la console Python,
b) dans un Plugin 
c)  dans un script de la Boîte à outils de Traitement (Processing)
3) la solution a) est la plus facile pour commencer et apprendre les principes, c) ne nécessite pas de connaître PyQT4 pour créer un interface  et b) est la plus complexe (PyQGIS + PyQT4)

Malheureusement, les fonctions Python utilisées dans a), b) et c) pour traiter les données ne sont pas tout à fait les mêmes, mais une fois qu'on a bien compris a), c'est facile de passer aux autres (ce sont les mêmes principes).

La majorité des utilisateurs  a tendance à choisir directement  la solution Plugin (pour avoir un bel interface, c'est ce que les gens demandent) sans réellement avoir compris a), ni PyQT4 (car il y a un livre de recettes tout fait pour créer un Plugin)

II  l'apprentissage
---------------------

Ici, si on veut le faire de manière sérieuse, il n'y a malheureusement pas de solution  tout faite. Il faut farfouiller dans les exemples dans

- http://gis.stackexchange.com/questions qui est le site de questions/réponses international le plus important: il y a moyen de trouver de nombreux exemples sur PyQGIS et des cas pratiques.
- de nombreux sites comme le http://www.portailsig.org/ offrent aussi des exemples de traitements. (il y en a d'autres)

Je constate néanmoins que, si l'on connaît bien Python, il n'y a pas de grosses difficultés à utiliser la documentation de l'API C++ comme aide (les classes et les fonctions sont les mêmes). De plus, si on a la chance de maîtriser d'autres modules spatiaux (comme osgeo, Shapely, Fiona, Pyshp ...), c'est facile.

III Conclusions
------------------

Pourquoi n'existe-t-il  rien de plus concret, comme dans le cas d'ArcPy, par exemple ?

Car il faut du temps, des volontaires et éventuellement de l'argent. Ce n'est donc pas une question de volonté mais de capacité. Il existe 2 livres dans le domaine géospatial  OpenSource avec Python:

- https://www.packtpub.com/python-geospat … pment/book
- http://www.packtpub.com/learning-geospa … ython/book

Hors ligne

 

#4 Wed 16 July 2014 13:00

snaileater
Participant actif
Date d'inscription: 5 Nov 2008
Messages: 121

Re: QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

Merci pour ces éléments ... !

Hors ligne

 

#5 Wed 16 July 2014 13:15

snaileater
Participant actif
Date d'inscription: 5 Nov 2008
Messages: 121

Re: QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

Euh ... excusez moi ... je ne vois pas clairement où se situe la documentation de l'API C++ ... quelqu'un peut-il m'aiguiller ?
Merci d'avance.

Hors ligne

 

#6 Wed 16 July 2014 15:37

gene
Participant actif
Lieu: Louvain-la-Neuve
Date d'inscription: 14 Dec 2006
Messages: 104
Site web

Re: QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

http://qgis.org/api/2.4/modules.html (mais aussi 2.2 etc.)

J'ai oublié une dernière manière: par de simples  script à l'aide du Plugin Script Runner (voir http://spatialgalaxy.net/2012/01/29/scr … s-in-qgis/)

Dernière modification par gene (Wed 16 July 2014 15:40)

Hors ligne

 

#7 Wed 16 July 2014 15:45

snaileater
Participant actif
Date d'inscription: 5 Nov 2008
Messages: 121

Re: QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

Ah euh ... j'étais déjà dedans alors ... j'avais cru comprendre qu'il y avait une documentation de l'API C++ différente et plus explicite(...) que la documentation Python ...

Hors ligne

 

#8 Wed 16 July 2014 17:08

gene
Participant actif
Lieu: Louvain-la-Neuve
Date d'inscription: 14 Dec 2006
Messages: 104
Site web

Re: QGIS 2.X : Quelle aide pour la programmation python sous QGIS ? ...

La documentation est explicite... pour les développeurs, mais il y a moyen de s'en sortir

1) avec la documentation seule
-------------------------------------
Sélection de la couche active dans la console:

Code:

macouche = qgis.utils.iface.activeLayer()
macouche
<qgis._core.QgsVectorLayer object at 0x12f879938>

correspond donc à la classe http://qgis.org/api/2.4/classQgsVectorLayer.html


Les champs de la table attributaire:

Code:

champs= macouche.pendingFields() 
champs
<qgis._core.QgsFields object at 0x12f879808>

correspond à la classe http://qgis.org/api/2.4/classQgsFields.html

Code:

for champ in champs:
   print champ
<qgis._core.QgsField object at 0x12f8799d0>
<qgis._core.QgsField object at 0x12f879a68>

correspond à la classe http://qgis.org/api/2.4/classQgsField.html


2) avec Python
------------------
Si vous ne vous vous y retrouvez pas,une autre solution est d'utiliser  Python lui même avec dir() ou le module  see (https://github.com/inky/see)

Code:

dir(champ)
['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'comment', 'displayString', 'length', 'name', 'precision', 'setComment', 'setLength', 'setName', 'setPrecision', 'setType', 'setTypeName', 'type', 'typeName']

#ou 

from see import see
see(champ)
<                 <=                ==                !=                >
    >=                hash()            help()            repr()
    str()             .comment()        .displayString()  .length()
    .name()           .precision()      .setComment()     .setLength()
    .setName()        .setPrecision()   .setType()        .setTypeName()
    .type()           .typeName()

Je vois donc que la classe field a  une fonction name que je retrouve bien dans http://qgis.org/api/2.4/classQgsField.h … 211622113b, d'où

Code:

nom_champs = [champ.name() for champ in macouche.pendingFields() ]
nom_champs
[u'DIP', u'DIP_DIR']

de même:

Code:

type_champs = [champ.typeName() for champ in macouche.pendingFields() ]
type_champs
[u'Integer',  u'String']

etc.

Dernière modification par gene (Wed 16 July 2014 19:30)

Hors ligne

 

Pied de page des forums

Powered by FluxBB