5.4. Lesson: Ações
Now that you have seen a default action in the previous lesson, it is time to define your own actions.
An action is something that happens when you click on a feature. It can add a lot of extra functionality to your map, allowing you to retrieve additional information about an object, for example. Assigning actions can add a whole new dimension to your map!
El objetivo de esta lección: Aprender como añadir acciones personalizadas.
In this lesson you will use the school_property layer you created previously. The sample data include photos of each of the three properties you digitized. What we are going to do is to associate each property with its image. Then we will create an action that will open the image for a property when clicking on the property.
5.4.1. Follow Along: Añadir un Campo para Imágenes
The school_property
layer has no way to associate an image with a
property yet. First we will create a field for this purpose.
Abre el cuadro de diálogo Propiedades de la capa.
Haz clic en la pestaña Campos.
Conmuta el modo de edición:
Añade una nueva columna:
Introduce los valores siguientes:
After the field has been created, move to the Attributes Form tab and select the
image
field.Set Widget Type to Attachment:
Click OK in the Layer Properties dialog.
Utiliza la herramienta Identificar para clicar en uno de los tres elementos en la capa propiedad_escolar.
Since you are still in edit mode, the dialog should be active and look like this:
Haz clic en el botón de búsqueda (the … junto al campo imagen).
Select the path for your image. The images are in
exercise_data/school_property_photos/
and are named the same as the features they should be associated with.Haz clic en Aceptar.
Asocia todas las imágenes con los elementos correctos utilizando este método.
Guarda tu cambios y sal del modo edición.
5.4.2. Follow Along: Creando una Acción
Open the Actions tab for the school_property layer, and click on the Add a new action button.
In the Add New Action dialog, enter the words
Show Image
into the Description field:Qué hacer luego depende del sistema operativo que estés usando, así que elige el curso adecuado a seguir:
Windows
Haz clic en el menú desplegable Tipo y elige Abrir.
Ubuntu Linux
Under Action, write
eog
for the Gnome Image Viewer, or writedisplay
to use ImageMagick. Remember to put a space after the command!MacOS
Haz clic en el menú desplegable Tipo y elige Mac.
Under Action, write
open
. Remember to put a space after the command!
Now you can continue writing the command.
Quieres abrir la imagen y QGIS sabe dónde está. Todo lo que necesita es decirle a la Acción dónde está la imagen.
Selecciona imagen en la lista:
Click the Insert field button. QGIS will add the phrase
[% "image" %]
in the Action Text field.Click the OK button to close the Add New Action dialog
Click OK to close the Layer Properties dialog
Now it is time to test the new action:
Click on the school_property layer in the Layers panel so that it is highlighted.
Find the Run feature action button (in the Attributes Toolbar).
Click on the down arrow to the right of this button. There is only one action defined for this layer so far, which is the one you just created.
Haz clic en el propio botón para activar la herramienta.
Utilizando esta herramienta, haz clic en cualquiera de las propiedades de escuela.
The image for that property should open.
5.4.3. Follow Along: Buscando en Internet
Let’s say we are looking at the map and want to know more about the area that a farm is in. Suppose you know nothing of the area in question and want to find general information about it. Your first impulse, considering that you’re using a computer right now, would probably be to Google the name of the area. So let’s tell QGIS to do that automatically for us!
Abre la tabla de atributos para la capa landuse.
We will be using the
name
field for each of our landuse areas to search Google.Cierra la tabla de atributos.
Vuelve a Acciones en Propiedades de la capa.
Click on the Create Default Actions button to add a number of pre-defined actions.
Remove all the actions but the Open URL action with the short name Search Web using the Remove the selected action button below.
Double-click on the remaining action to edit it
Change the Description to
Google Search
, and remove the content of the Short Name field.Make sure that Canvas is among the checked Action scopes.
Qué hacer luego depende del sistema operativo que estés usando, así que elige el curso adecuado a seguir:
Windows
En Tipo, elige Abrir. Esto le dirá a Windows que abra una dirección de internet en tu buscador por defecto, como Internet Explorer.
Ubuntu Linux
Under Action, write
xdg-open
. This will tell Ubuntu to open an Internet address in your default browser, such as Chrome or Firefox.MacOS
Under Action, write
open
. This will tell MacOS to open an Internet address in your default browser, such as Safari.
Now you can continue writing the command
Para cualquier comando que uses, necesitarás decirle qué dirección de internet abrir luego. Quieres ir a Google y buscar la frase automáticamente.
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
https://www.google.com/search?q=SEARCH_PHRASE
, whereSEARCH_PHRASE`
is what you want to search for. Since we don’t know what phrase to search for yet, we will just enter the first part (without the search phrase).In the Action field, write
https://www.google.com/search?q=
. Remember to add a space after your initial command before writing this in!Now you want QGIS to tell the browser to tell Google to search for the value of
name
for any feature that you could click on.Selecciona el campo name.
Click Insert button:
What this means is that QGIS is going to open the browser and send it to the address
https://www.google.com/search?q=[% "name" %]
.[% "name" %]
tells QGIS to use the contents of thename
field as the phrase to search for.So if, for example, the landuse area you click on is named
Marloth Nature Reserve
, QGIS is going to send the browser tohttps://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”.If you have not done so already, set everything up as explained above.
Click the OK button to close the Add New Action dialog
Click OK to close the Layer Properties dialog
Ahora para comprobar la nueva acción.
With the landuse layer active in the Layers panel, click on the down arrow to the right of the Run feature action button, and select the only action (
Google Search
) defined for this layer.Click on any landuse area you can see on the map. Your browser will now open, and will start a Google search for the place that is recorded as that area’s
name
value.
Nota
Si tu acción no funciona, comprueba que todo está correctamente introducido; ¡ Los errores tipográficos son muy comunes en este tipo de trabajos!
5.4.4. Follow Along: Abrir una Página Web Directamente en QGIS
Above, you’ve seen how to open a webpage in an external browser. There are some shortcomings with this approach in that it adds an unknowable dependency – will the end-user have the software required to execute the action on their system? As you’ve seen, they don’t necessarily even have the same kind of base command for the same kind of action, if you don’t know which OS they will be using. With some OS versions, the above commands to open the browser might not work at all. This could be an insurmountable problem.
However, QGIS sits on top of the incredibly powerful and versatile Qt library. Also, QGIS actions can be arbitrary, tokenized (i.e. using variable information based on the contents of a field attribute) Python commands!
Now you will see how to use a python action to show a web page. It is the same general idea as opening a site in an external browser, but it requires no browser on the user’s system since it uses the Qt QWebView class (which is a webkit based html widget) to display the content in a pop-up window.
Let us use Wikipedia this time. So the URL you request will look like this:
https://wikipedia.org/wiki/SEARCH_PHRASE
Para crear la acción de capa:
Abre el cuadro de diálogo Propiedades de la capa y ve directamente a la pestaña Acciones.
Configure una nueva acción utilizando las siguientes propiedades para la acción:
Type:
Python
Description:
Wikipedia
Action Text (all on one line):
from qgis.PyQt.QtCore import QUrl; from qgis.PyQt.QtWebKitWidgets import QWebView; myWV = QWebView(None); myWV.load(QUrl('https://wikipedia.org/wiki/[%name%]')); myWV.show()
Hay un par de cosas ocurriendo aquí:
Todos los códigos python están en una sola línea con puntos y comas que separan los comandos (en lugar de nuevas líneas, la forma normal de separar comandos Python).
[%name%]
will be replaced by the actual attribute value when the action is invoked (as before).The code simply creates a new
QWebView
instance, sets its URL, and then callsshow()
on it to make it visible as a window on the user’s desktop.
Nota que este es de alguna forma un ejemplo inventado. Python trabaja con sangrías con significado semántico, así que separar cosas con puntos y comas no es la mejor forma de escribirlo. Así, en el mundo real, sería más probable importar la lógica de un módulo de Python y luego utilizar una función con un atributo de campo como parámetro.
You could also use this approach to display an image without requiring that the users have a particular image viewer on their system.
Try to use the methods described above to load a Wikipedia page using the Wikipedia action you just created.
5.4.5. In Conclusion
Actions allow you to give your map extra functionality, useful to the end-user who views the same map in QGIS. Due to the fact that you can use shell commands for any operating system, as well as Python, the sky is the limit in terms of the functions you could incorporate!
5.4.6. What’s Next?
Now that you’ve done all kinds of vector data creation, you will learn how to analyze the data to solve problems. That is the topic of the next module.