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.
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é.
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 :
Ajoutez une nouvelle colonne :
Entrez les valeurs ci-dessous :
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 :
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 :
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.
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 :
Ce qui faut ensuite faire varie selon votre système d’exploitation, ainsi choisissez la ligne de conduite appropriée à suivre :
Cliquez sur le menu déroulant Type et choisissez Ouvrir.
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 !
Cliquez sur le menu déroulant Type et choisissez Mac.
Sous Action, écrivez ouvrir. Souvenez-vous de mettre un espace après 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 :
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 :
Click on the school_property layer in the Layers list so that it is highlighted.
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) :
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.
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 :
Sous Type, choisissez Ouvrir. Cela va dire à Windows d’ouvrir une adresse internet dans votre navigateur par défaut, tel qu’Internet Explorer.
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.
Sous Action, écrivez ouvrir. Cela va dire à MacOS d’ouvrir une adresse internet dans votre navigateur par défaut, tel que Safari.
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.
Usually when you use Google, you enter your search phrase into the Google Search bar. But in this case, you want your computer to do this for you. The way you tell Google to search for something (if you don’t want to use its search bar directly) is by giving your Internet browser the address http://www.google.com/search?q=SEARCH_PHRASE, where SEARCH_PHRASE is what you want to search for. Since we don’t know what phrase to search for yet, we’ll just enter the first part (without the search phrase).
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 :
Cela va dire à QGIS d’ajouter la phrase suivante :
What this means is that QGIS is going to open the browser and send it to the address http://www.google.com/search?q=[% "name" %]. But [% "name" %] tells QGIS to use the contents of the name field as the phrase to search for.
So if, for example, the landuse area you click on is named Marloth Nature Reserve, then QGIS is going to send the browser to http://www.google.com/search?q=Marloth%20Nature%20Reserve, which will cause your browser to visit Google, which will in turn search for “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.
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 !
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:
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.
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.
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.