#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
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
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
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
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