Outdated version of the documentation. Find the latest one here.

6.4. Lesson: Actions

Maintenant que vous avez vu une action par défaut dans la leçon précédente, il est temps de définir vos propres actions. Une action est quelque chose qui arrive quand vous cliquez sur une entité. Cela peut ajouter beaucoup de fonctionnalités à votre carte, vous permettant de récupérer des informations supplémentaires sur un objet par exemple. Attribuer des actions peut ajouter une nouvelle dimension à votre carte !

Objectif de cette leçon : Apprendre à ajouter des actions personnalisées.

6.4.1. basic Follow Along: Ouvrir une Image

Utilisez la couche school_property que vous avez créé précédemment. Le support de cours inclut des photos de chacun des trois propriétés que vous avez numérisées. Ce qui nous allons ensuite faire, c’est associer chaque propriété avec son image. Puis, nous créerons une action qui ouvrira l’image d’un bien en cliquant sur la propriété.

6.4.2. basic Follow Along: Ajouter un champ pour images

La couche school_property n’a encore aucun moyen d’associer une image avec une propriété. Nous allons d’abord créer un champ à cet effet.

  • Ouvrez la fenêtre Propriétés de la couche.

  • Cliquez sur l’onglet Champs.

  • Basculez en mode édition :

../../../_images/toggle_editing_mode.png
  • Ajoutez une nouvelle colonne :

../../../_images/add_new_column.png
  • Entrez les valeurs ci-dessous :

../../../_images/column_settings.png
  • Après la création du champ, cliquez sur le bouton Édition de ligne à la suite du nouveau champ.

  • Définissez-le en Nom de fichier :

../../../_images/select_file_name.png
  • Cliquez sur OK dans la boîte de dialogue Propriétés de la couche.

  • Utilisez l’outil Identifier pour cliquer sur une des trois entités dans la couche school_property.

Puisque vous êtes toujours en mode d’édition, la boîte de dialogue devrait être activée et ressembler à cela :

../../../_images/school_property_no_image.png
  • Cliquez sur le bouton parcourir (le ... à côté du champ image).

  • Sélectionnez le chemin pour votre image. Les images sont dans exercise_data/school_property_photos/ et sont nommées de la même façon que les entités auxquelles elles devraient être associées.

  • Cliquez OK.

  • Associez toutes les images avec les bonnes entités en utilisant cette méthode :

  • Sauvegardez vos modifications et sortez du mode d’édition.

6.4.3. basic Follow Along: Création d’une Action

  • Ouvrez le formulaire Actions pour la couche school_property.

  • Dans l’onglet Propriétés de l'action, entrez les mots Afficher l'image dans le champ Nom :

../../../_images/show_image_action.png

Ce qui faut ensuite faire varie selon votre système d’exploitation, ainsi choisissez la ligne de conduite appropriée à suivre :

6.4.3.1. Windows

  • Cliquez sur le menu déroulant Type et choisissez Ouvrir.

6.4.3.2. Ubuntu Linux

  • Sous Action, écrivez eog pour le Gnome Image Viewer, ou écrivez display pour utiliser ImageMagick. Souvenez-vous de mettre un espace après la commande !

6.4.3.3. MacOS

  • Cliquez sur le menu déroulant Type et choisissez Mac.

  • Sous Action, écrivez ouvrir. Souvenez-vous de mettre un espace après la commande !

6.4.3.4. Continuez à écrire la commande

Vous souhaitez ouvrir l’image, et QGIS connaît sont emplacement. Il ne reste plus qu’à renseigner le Action où l’image est.

  • Sélectionnez image dans la liste :

../../../_images/select_image.png
  • Cliquez sur le bouton Insérer un champ. QGIS va ajouter la phrase [% "image" %] dans le champ Action.

  • Cliquez sur le bouton Ajouter l’action à la liste.

  • Cliquez sur OK dans la boîte de dialogue Propriétés de la couche.

Nous allons maintenant tester la nouvelle Action :

  • Cliquez sur la couche school_property dans la Légende de la carte afin qu’elle soit en surbrillance.

  • Trouvez le bouton Exécuter l’action de l’entité (sur la même barre d’outils que le bouton Ouvrir la table d’attribut) :

    actionRun

  • Cliquez sur la flèche en bas à droite de ce bouton. Il y a jusqu’ici seulement une action définie pour cette couche, qui est celle que vous venez de créer.

  • Cliquez sur le bouton pour activer l’outil.

  • En utilisant cet outil, cliquez sur une des trois propriétés de l’école.

  • L’image pour cette propriété va maintenant s’ouvrir.

6.4.4. moderate Follow Along: Recherche sur Internet

Disons que nous sommes en train d’examiner la carte et voulons en savoir plus à propos de la zone dans laquelle une ferme se trouve. Supposez que vous ne savez rien de la zone en question et voulez trouver des informations générales sur elle. Votre première impulsion, en considérant que vous êtes en train d’utiliser en ce moment-même un ordinateur, serait probablement de googler le nom de la zone. Alors disons à QGIS de le faire automatiquement pour nous !

  • Ouvrez la table d’attribut pour la couche landuse.

Nous utiliserons le champ nom pour chacune de nos zones d’occupation du sol pour la recherche Google.

  • Fermez la table d’attribut.

  • Retournez à Actions dans Propriétés des couches.

  • Dans le champ Propriétés de l’action ‣ Nom, écrivez Recherche Google.

Ce qui faut ensuite faire varie selon votre système d’exploitation, ainsi choisissez la ligne de conduite appropriée à suivre :

6.4.4.1. Windows

  • Sous Type, choisissez Ouvrir. Cela va dire à Windows d’ouvrir une adresse internet dans votre navigateur par défaut, tel qu’Internet Explorer.

6.4.4.2. Ubuntu Linux

  • Sous Action, écrivez xdg-open. Cela va dire à Ubuntu d’ouvrir une adresse internet dans votre navigateur par défaut, tel que Chrome ou Firefox.

6.4.4.3. MacOS

  • Sous Action, écrivez ouvrir. Cela va dire à MacOS d’ouvrir une adresse internet dans votre navigateur par défaut, tel que Safari.

6.4.4.4. Continuez à écrire la commande

Quelle que soit la commande que vous avez utilisée en-dessus, vous devez dire quelle adresse internet ouvrir après. Vous voulez visiter Google, et rechercher automatiquement une phrase.

Habituellement, lorsque vous utilisez Google, vous entrez votre expression de recherche dans la barre de recherche Google. Mais dans ce que, vous voulez que votre ordinateur le fasse à votre place. La façon de dire à Google de rechercher quelque chose (si vous ne voulez pas utiliser directement sa barre de recherche) est de donner à votre navigateur internet l’adresse http://www.google.com/search?q=SEARCH_PHRASE, où SEARCH_PHRASE est ce que vous voulez rechercher. Comme nous ne savons pas pour le moment quelle est l’expression à rechercher, nous allons juste entrer la première partie (sans l’expression de recherche).

  • Dans le champ Action, écrivez http://www.google.com/search?q=. Souvenez-vous d’ajouter un espace après votre commande initiale avant d’écrire celle-là !

Vous voulez maintenant que QGIS dise au navigateur d’indiquer à Google de chercher la valeur du nom pour chaque entité sur lesquelles vous pourriez cliquer.

  • Sélectionnez le champ nom.

  • Cliquez sur Insérer un champ :

../../../_images/google_search_action.png

Cela va dire à QGIS d’ajouter la phrase suivante :

../../../_images/google_search_entry.png

Cela signifie que QGIS va ouvrir le navigateur et lui envoyer l’adresse http://www.google.com/search?q=[% "name" %]. Mais [% "name" %] dit à QGIS d’utiliser les contenus du champ nom comme une expression de recherche.

Si, par exemple, la zone d’utilisation du sol sur laquelle vous cliquez est nommée Marloth Nature Reserve, alors QGIS va envoyer au navigateur kbd:http://www.google.com/search?q=Marloth%20Nature%20Reserve, ce qui va dire à votre navigateur de visiter Google, qui va à son tour faire une recherche sur “Marloth Nature Reserve”.

  • Si vous ne l’avez pas encore fait, mettez en place tout ce qui a été expliqué ci-dessus.

  • Cliquez sur le bouton Ajouter à la liste d’action. La nouvelle action apparaîtra dans la liste au-dessus.

  • Cliquez sur OK dans la boîte de dialogue Propriétés de la couche.

Il est maintenant temps de tester la nouvelle action.

  • Avec la couche landuse activée dans la Légende de la carte, cliquez sur le bouton Exécuter l’action de l’entité.

  • Cliquez sur une zone d’occupation du sol que vous pouvez voir sur la carte. Votre navigateur va maintenant s’ouvrir, et va automatiquement démarrer une recherche Google pour la ville qui est enregistrée comme valeur de nom pour cette zone.

Note

Si votre action ne fonctionne pas, vérifiez que tout a été correctement entré ; les fautes de frappe sont communes avec ce genre de travail !

6.4.5. hard Follow Along: Ouvrir une page web directement dans QGIS

Ci-dessus, vous avez vu comment ouvrir une page web dans un navigateur externe. Il y a des lacunes dans cette approche, ce qui ajoute une dépendance inconnue – l’utilisateur final aura-t-il le logiciel requis pour exécuter l’action sur son système ? Comme vous l’avez vu, ils n’ont même pas nécessairement la même sorte de commande de base pour le même type d’actions, si vous ne savez pas quel système d’exploitation ils utiliseront. Avec certaines versions d’OS, les commandes ci-dessus pour ouvrir le navigateur pourraient ne pas fonctionner du tout. Cela pourrait être un problème insurmontable.

Cependant, QGIS se trouve au sommet de la libraire Qt4 incroyablement puissante et polyvalente. De plus, les actions de QGIS peuvent être arbitraires, sous forme de jetons (c’est-à-dire en utilisant l’information variable basée sur le contenu d’un attribut champ) des commandes Pythons !

Vous allez maintenant voir comment utiliser une action python pour montrer un page web. L’idée générale est la même que pour ouvrir un site dans un navigateur externe, mais cela ne requière par de navigateur sur le système de l’utilisateur car elle utilise la classe Qt4 QWebView (qui est un widget html de base de webkit) pour afficher le contenu dans une fenêtre pop-up.

À la place de Google, utilisons cette fois-ci Wikipedia. Ainsi, l’URL dont vous avez besoin ressemblera à ça :

http://wikipedia.org/wiki/SEARCH_PHRASE

Créer l’action associée à la couche:

  • Ouvrez la boîte de dialogue Propriétés de la couche et rendez-vous sur l’onglet Actions.

  • Paramétrez une nouvelle action en utilisant les propriétés suivantes:

    • Type: Python
    • Name: Wikipedia
    • Action (all on one line): from PyQt4.QtCore import QUrl; from PyQt4.QtWebKit import QWebView; myWV = QWebView(None); myWV.load(QUrl('http://wikipedia.org/wiki/[% "name" %]')); myWV.show()

../../../_images/python_action_example.png

Il y a quelques choses qui se passent par ici :

  • Tout le code python est sur une seule ligne avec des points virgules séparant les commandes (à la place de nouvelles lignes, la manière habituelle de séparer des commandes python).

  • [% "name" %] sera remplacé par la valeur de l’attribut réel lorsque l’action est invoquée (comme avant).

  • Le code crée simplement une nouvelle instance QWebView, définit son URL, et ensuite appelle show() à ce sujet pour le rendre visible comme une fenêtre sur le bureau de l’utilisateur.

Notez que c’est un exemple un peu farfelu. Python fonctionne avec une indentation qui a un sens, par conséquent si l’on sépare les choses par des points-virgules ce n’est pas la meilleure manière de faire. Ainsi, dans la vraie vie, il est plus fréquent d’importer les éléments d’un module en Python, puis d’appeler une fonction avec comme paramètre un attribut de champ.

Vous pouvez également utiliser la méthode pour afficher une image sans nécessiter que l’utilisateur ait une visionneuse d’image particulière sur son système.

  • Essayez d’utiliser les méthodes décrites ci-dessus pour charger une page Wikipedia en utilisant l’action Wikipedia que vous venez de créer.

6.4.6. In Conclusion

Les actions vous permettent d’ajouter à vos cartes de nouvelles fonctionnalités, utiles pour l’utilisateur final qui verra les mêmes cartes que dans QGIS. Grâce à l’utilisation de commandes shell pour tous les systèmes d’exploitation, tout comme des instructions en Python, il n’y a pas de limite aux fonctions que vous pouvez incorporer.

6.4.7. What’s Next?

Maintenant que vous avez fait toutes sortes de créations de données vectorielles, vous apprendrez à analyser ces données pour résoudre des problèmes. Ceci est le sujet du prochain module.