GIS and Media fusion

"The explosive growth of the GeoWeb and geographic information has made GIS powerful media for the general public to communicate, but perhaps more importantly, GIS have also become media for constructive dialogs and interactions about social issues." - Sui & Goodchild

User Tools

Site Tools


geoinf18:wktplugin

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
geoinf18:wktplugin [2018/10/30 15:14]
oertz [Pré-requis]
geoinf18:wktplugin [2018/11/13 10:14] (current)
oertz [Logique du plugin]
Line 1: Line 1:
 ====== WKTEditor plugin pour QGIS ====== ====== WKTEditor plugin pour QGIS ======
  
-**Objectif : ajouter des entités géographiques formalisées avec le format WKT dans la couche sélectionnée dans la table des couches** ​+**Objectif : créer un plugin permettant d'ajouter des entités géographiques formalisées avec le format WKT dans la couche sélectionnée dans la table des couches.** 
  
 ===== Pré-requis ===== ===== Pré-requis =====
Line 11: Line 11:
  
 Initialiser un dossier de configuration d'un nouveau plugin avec le Plugin Builder préalablement installé et selon le //Chapitre 2.3.3 Marche à suivre – structure du plugin// du tutoriel INSIT. Initialiser un dossier de configuration d'un nouveau plugin avec le Plugin Builder préalablement installé et selon le //Chapitre 2.3.3 Marche à suivre – structure du plugin// du tutoriel INSIT.
 +
 +D'​après la marche à suivre, avant de pouvoir tester le plugin de base, il faut transformer le fichier **resources.qrc** avec la commande [[http://​pyqt.sourceforge.net/​Docs/​PyQt5/​resources.html|pyrcc5]] (pour  l'​intégration de ressources telles que des icônes et des fichiers de traduction dans une application) :
 +<​code>​
 +pyrcc5 -o resources.py resources.qrc
 +</​code>​
 +
 +En cas de problème, le fichier **resources.py** résultat pour PyQt5 disponible ci-dessous pourrait aussi convenir : 
 +https://​drive.switch.ch/​index.php/​s/​jHcUvhFSRwEneES
  
 ===== Modifier l'UI du plugin ===== ===== Modifier l'UI du plugin =====
Line 31: Line 39:
 </​code>​ </​code>​
  
-  * son identifiant d'​objet est **plainTextEdit**,​ il est possible de le manipuler avec les instructions ci-dessous dans la logique du plugin (script python NomDeMonPlugin.py). +  * son identifiant d'​objet est **plainTextEdit**,​ il est possible de le manipuler avec les instructions ci-dessous dans la logique du plugin (script python ​**NomDeMonPlugin.py**). 
-  * __notez ​bien :__ pour voir le résultat des modifications sans relancer QGIS, le plugin Reloader est bien utile !+  * voir aussi la documentation Qt : http://​doc.qt.io/​ 
 + 
 +__Notez ​bien :__ pour voir le résultat des modifications sans relancer QGIS, le plugin Reloader est bien utile !
  
 ===== Logique du plugin ===== ===== Logique du plugin =====
Line 43: Line 53:
   * on reload, on lance le plugin, on clique OK et le message apparait dans le console Python   * on reload, on lance le plugin, on clique OK et le message apparait dans le console Python
  
- +La méthode Qt5 [[http://​doc.qt.io/​qt-5/​qplaintextedit.html#​toPlainText|toPlainText]] renvoie le contenu du champ texte de la boîte de dialogue 
 +<​code>​ 
 +mywkt = self.dlg.plainTextEdit.toPlainText() 
 +print('​Content:​ ' + mywkt) 
 +</​code>​ 
 + 
 +Supposant que ce contenu est une représentation WKT d'une géométrie,​ il est possible d'​ajouter à la couche sélectionnée une entité géographique portant cette géométrie comme suit : 
 +<​code>​ 
 +layer = iface.activeLayer() ​                 # load the current selected layer 
 +mywkt = self.dlg.plainTextEdit.toPlainText() # get the WKT content in the textfield 
 +layer.startEditing() ​                        # set the layer in edit mode 
 +geom = QgsGeometry() ​                        # create an empty geometry 
 +geom = QgsGeometry.fromWkt(mywkt) ​           # parse the WKT content to initialize the geometry 
 +feat = QgsFeature() ​                         # create an empty feature 
 +feat.setGeometry(geom) ​                      # attach the geometry to the feature 
 +layer.dataProvider().addFeatures([feat]) ​    # add the new feature to the layer 
 +layer.commitChanges() ​                       # save changes 
 +</​code>​  
 + 
 +NB: sans oublier d'​ajouter en entête les imports qui vont bien : 
 +<​code>​ 
 +# Import QGIS stuff 
 +from qgis.core import * 
 +from qgis.utils import * 
 +</​code>​ 
 + 
 +===== Tester ===== 
 +Pour tester le plugin, il faut sélectionner une couche dans la table des couches (soit en créant une couche vide ou en ajoutant une source de données existantes, ex. shapefile). Le type de géométrie de la couche que l'on souhaite alimenter est important, il doit y avoir adéquation entre le type de géométrie décrit par la représentation WKT et le type de la couche sélectionnée (POINT, LINE, POLYGON). 
 + 
 +Quelques WKT pour tester : 
 +<​code>​ 
 +POINT(6.644375 46.78025) 
 +POINT(6.64711 46.784599) 
 + 
 +POLYGON((6.646721 46.781629,​6.647439 46.781350,​6.647354 46.781159,​6.647836 46.781012,​6.648148 46.781291,​6.648309 46.781240,​6.647579 46.780343,​6.646131053352633 46.780916,​6.646721 46.781629)) 
 +POLYGON((6.659504 46.780179,​6.657723 46.778783,​6.659976 46.778298,​6.660749 46.778761,​6.661017 46.780407,​6.659912 46.779885,​6.659504 46.780179)) 
 + 
 +LINESTRING(6.647343 46.781315,​6.649264 46.781624,​6.655175 46.779420,​6.655765 46.778472,​6.659059 46.778964) 
 +LINESTRING(6.647370 46.781338,​6.646330 46.781316,​6.644742 46.781838,​6.643176 46.780236,​6.641062 46.780993,​6.641448 46.781397) 
 +</​code>​ 
 + 
 +**Notez bien** : les coordonnées sont en longitude/​latitude WGS84 (EPSG:4326)
  
 +{{:​geoinf18:​screenshot_from_2018-10-30_15-58-36.png?​nolink|}}
geoinf18/wktplugin.1540908849.txt.gz · Last modified: 2018/10/30 15:14 by oertz