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 Fri 15 June 2012 14:02

nawak
Participant assidu
Date d'inscription: 11 Sep 2007
Messages: 216

QGIS : Utiliser Plugin dans boucle python

Bonjour
Personne ne sait si c'est possible ? utiliser les outils de ftools dans console python

Hors ligne

 

#2 Fri 22 June 2012 22:58

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

Re: QGIS : Utiliser Plugin dans boucle python

Bien sur que oui, c'est enfantin:

1) vous ouvrez la console Python
2) vous tapez

Code:

import ftools

et vous avez accès à toutes les classes ou fonctions du module Python ftools

Dernière modification par gene (Fri 22 June 2012 22:59)

Hors ligne

 

#3 Sat 23 June 2012 13:12

nawak
Participant assidu
Date d'inscription: 11 Sep 2007
Messages: 216

Re: QGIS : Utiliser Plugin dans boucle python

Bonjour et merci pour ce début de réponse,

voilà ce que me retourne un "import ftools"

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/qgis/utils.py", line 283, in _import
    mod = _builtin_import(name, globals, locals, fromlist, level)
ImportError: No module named ftools

Sinon j'aimerai, plus précisemment, boucler sur un ensemble de couches dans un répertoire (ou même sur les couches actives) avec l'outil "différencier"...

est -ce qu'il y a une doc succeptible de m'aider ?

y a t-il des personnes qui font des traitements similaires ?

Merci

Hors ligne

 

#4 Sat 23 June 2012 17:54

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

Re: QGIS : Utiliser Plugin dans boucle python

alors là, vous avez un problème de PATH (chemin), ce n'est pas normal. Vous le faites bien depuis la console Python de QGIS ? (et pas depuis le Shell Python, c'est possible mais il faut ajuster les chemins)

Pourquoi vouloir utiliser ftools ? Sa seule particularité est d'utiliser PyQGIS et c'est lourd car vous devez connaitre PyQt

Pour traiter les shapefiles, vous avez du beaucoup plus léger, non lié à un logiciel particulier comme http://www.portailsig.org/content/pytho … e-utiliser
qui a donné http://geospatialpython.com/2011/02/mer … ickly.html ou http://furiousgis.blogspot.be/2012/05/p … ility.html ou ogr/gdal (voir http://wiki.dreamsteep.com/PYTHON_OGR) ou ....

Vous avez tous les choix à http://pypi.python.org/pypi?:action=bro … &c=391, un livre (http://pypi.python.org/pypi?:action=bro … &c=391) et des cours (http://www.gis.usu.edu/~chrisg/python/2009/)

Moi je travaille toujours en Python pur, même dans QGIS (voir mes papiers à  http://www.portailsig.org/content/qgis- … avec-scrip ou http://www.portailsig.org/content/pytho … -de-shapef publié dans http://plugins.qgis.org/snippets/6/). C'est beaucoup plus léger

Si vous voulez faire de la topologie, utilisez le module Shapely, c'est le plus puissant (voir http://www.portailsig.org/content/pytho … e-clementi). Je l'utilise même dans la console Python de QGIS et dans GRASS GIS.

Alors, si vous voulez utiliser Python, pas besoin de QGIS ni de ftools, tout peut être fait en pur Python.

Dernière modification par gene (Sat 23 June 2012 19:00)

Hors ligne

 

#5 Sun 24 June 2012 15:15

nawak
Participant assidu
Date d'inscription: 11 Sep 2007
Messages: 216

Re: QGIS : Utiliser Plugin dans boucle python

Merci pour ces éléments !

Oui je suis bien dans la console python de Qgis.

En fait, je cherche à faire soit une intersection, soit une différenciation sur un ensemble de couches.

Dans le menu vecteur de qgis, outils de géotraitements, l'outil différencier fonctionne parfaitement sur une couche mais je voudrais automatiser cette fonction sur un jeu de couches.

Il semblerait que le module shapely puisse faire ça mais cela semble tout de même un peu compliqué.

Hors ligne

 

#6 Sun 24 June 2012 16:05

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

Re: QGIS : Utiliser Plugin dans boucle python

si vous savez où est le dossier de l'extension ftools un simple sys.path.append vous permettra de l'utiliser (pour autant que ce ne soit pas la même chose avec les autres modules comme ceux de PyQGIS)

Mais je persiste à croire que vous avez un problème de PATH. Sur Ubuntu ou Mac OS X je n'ai auncun problème.

Dernière modification par gene (Sun 24 June 2012 16:06)

Hors ligne

 

#7 Mon 02 July 2012 15:14

nawak
Participant assidu
Date d'inscription: 11 Sep 2007
Messages: 216

Re: QGIS : Utiliser Plugin dans boucle python

Bonjour,

Toujours dans mon exploration pythonesque...J'ai essayé de trier dans tout ce que gene à pu me fournir comme doc (et je l'en remercie) mais j'avoue avoir du mal à m'en sortir...Donc je pose une question très ciblée : pouvez-vous m'expliquer, en python pur, comment réaliser une intersection entre deux couches (en préservant les attributs etc.)?

Merci

Dernière modification par nawak (Mon 02 July 2012 15:19)

Hors ligne

 

#8 Mon 02 July 2012 16:03

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

Re: QGIS : Utiliser Plugin dans boucle python

la même question a été posée dans le temps chez les voisins


http://www.forumsig.org/showthread.php?t=33055

ou
http://www.forumsig.org/showthread.php?t=33857

Quelque soit le module Python que vous allez utiliser, le principe est toujours le même. Le problème est que l'intersection a comme résultat une géométrie qu'il est très facile d'exporter en shapefiles, ce qui n'est pas le cas de la table d'attributs  où il faut "chipoter"

>>> from osgeo import ogr
>>> g1 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 10 10, 10 0, 0 0))' )
>>> g2 = ogr.CreateGeometryFromWkt( 'POLYGON((0 0, 0 10, 10 0, 0 0))' )
>>> result = g1.Intersection( g2 )
>>> result.ExportToWkt()
'POLYGON ((0 0,5 5,10 0,0 0))'

>>> g1 = ogr.CreateGeometryFromWkt( 'LINESTRING(0 0, 10 10)' )
>>> g2 = ogr.CreateGeometryFromWkt( 'POLYGON((20 20, 20 30, 30 20, 20 20))' )
>>> result = g1.Intersect( g2 )
>>> result.ExportToWkt()
>>> result
False
>>>

idem avec Shapely et pas avec PyQGIS où c'est plus complexe... mais réalisable (voir http://code.google.com/p/dimitrisk-gis/ … tersect.py)

Le traitement des tables attributaires est plus complexe:
- il faut créer une table vide avec tous les champs des N tables traitées
- puis remplir cette table en fonction des éléments traités

En pratique,tout ça demande une très bonne connaissance de Python et des modules utilisés (ogr, Shapely, PySAL , PyQGIS ou n'importe quel module qui sait traiter les shapefiles et les géométries. Le dernier d'entre eux, nommé Fiona est le plus puissant mais le plus complexe).

Dernière modification par gene (Mon 02 July 2012 20:01)

Hors ligne

 

Pied de page des forums

Powered by FluxBB