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

This is an old revision of the document!


WKTEditor plugin pour QGIS

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

  • le tutoriel précédent de prise en main de la console Python dans QGIS
  • l'installation des plugins Plugin Builder et Plugin Reloader - voir Chapitre 2.2 Installation des outils du tutoriel INSIT - voir aussi l'introduction de ce tutoriel INSIT

Créer un plugin

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.

Modifier l'UI du plugin

Dans le Chapitre 2.3.4 Marche à suivre – interface graphique du plugin du tutoriel INSIT est indiqué que l'UI a été initialisée par le builder dans le fichier avec l'extension .ui. Aussi que ce fichier peut être modifié avec les outils Qt (QtDesigner ou QtCreator) pour ajouter des éléments d'interface.

  • installez ces outils et customisez l'interface à votre goût
  • ou ajoutez simplement la widget suivante dans votre fichier .ui
  <widget class="QPlainTextEdit" name="plainTextEdit">
   <property name="geometry">
    <rect>
     <x>30</x>
     <y>50</y>
     <width>341</width>
     <height>181</height>
    </rect>
   </property>
  </widget>
  • 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 !

Logique du plugin

D'après le chapitre 2.3.5 Marche à suivre – code Python du plugin du tutoriel INSIT, tout se passe dans la fonction run (tout en bas du script) :

  • on ajoute une instruction print dans la condition qui contrôle le comportement du bouton OK
print('Button OK of the plugin is successfully pushed!')
  • on reload, on lance le plugin, on clique OK et le message apparait dans le console Python

La méthode toPlainText renvoie le contenu du champ texte de la boîte de dialogue

mywkt = self.dlg.plainTextEdit.toPlainText()
print('Content: ' + mywkt)

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 :

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
geoinf18/wktplugin.1540909599.txt.gz · Last modified: 2018/10/30 15:26 by oertz