5.4. Lesson: Acties
Nu u de standaard actie hebt gezien in de vorige les, is het tijd om uw eigen acties te definiëren.
Een actie is iets dat gebeurt wanneer u op een object klikt. Het kan zeer veel extra functionaliteit aan uw kaart toevoegen, wat u, bijvoorbeeld, in staat stelt aanvullende informatie op te halen over een object. Toewijzen van acties kan een geheel nieuwe dimensie aan uw kaart toevoegen!
Het doel voor deze les: Leren hoe aangepaste acties toegevoegd worden.
In deze les zult u de laag school_property gebruiken, die u eerder maakte. De voorbeeldgegevens bevatten foto’s van elk van de drie eigendommen die u digitaliseerde. Wat we zullen gaan doen is elk eigendom associëren met zijn afbeelding. Dan zullen we een actie maken die de afbeelding van het eigendom zal openen bij het klikken op het eigendom.
5.4.1. Follow Along: Een veld voor afbeeldingen toevoegen
De laag school_property
heeft nog geen manier om een afbeelding met een eigendom te associëren. Voor dit doel zullen we eerst een veld maken.
Open het dialoogvenster Laageigenschappen.
Klik op de tab Velden.
Schakel naar modus Bewerken:
Voeg een nieuwe kolom toe:
Voer de waarden in zoals hieronder:
Ga, als het veld is gemaakt, naar de tab Formulier attributen en selecteer het veld
afbeelding
.Stel Type widget in op Bijlage:
Klik op OK in het dialoogvenster Laageigenschappen.
Gebruik het gereedschap Objecten identificeren om op één van de drie objecten te klikken in de laag school_property.
Omdat u nog steeds in de modus Bewerken staat, zou het dialoogvenster actief moeten zijn en er uitzien zoals dit:
Klik op de knop Bladeren (de … naast het veld afbeelding).
Selecteer het pad naar uw afbeelding. De afbeeldingen staan in
exercise_data/school_property_photos/
en zij hebben dezelfde naam als de objecten waarmee zij geassocieerd zouden moeten worden.Klik op OK.
Associeer alle afbeeldingen met de juiste objecten met behulp van deze methode.
Sla uw bewerkingen op en verlaat de modus Bewerken.
5.4.2. Follow Along: Een actie maken
Open de tab Acties voor de laag school_property, en klik op de knop Een nieuwe actie toevoegen.
Voer, in het dialoogvenster Nieuwe actie toevoegen, de woorden
Afbeelding weergeven
in het veld Omschrijving in:Wat vervolgens moet worden gedaan is afhankelijk van uw besturingssysteem, dus kies de toepasselijke koers om te volgen:
Windows
Klik op de keuzelijst Type en kies Open.
Ubuntu Linux
Onder Actie, schrijf
eog
voor de Gnome Image Viewer, of schrijfdisplay
om ImageMagick te gebruiken. Onthoud om een spatie achter de opdracht te plaatsen!macOS
Klik op de keuzelijst Type en kies Mac.
Onder Actie, schrijf
open
. Vergeet niet een spatie achter de opdracht te plaatsen!
Nu kunt u doorgaan met het schrijven van de opdracht.
U wilt de afbeelding openen en QGIS weet waar de afbeelding staat. Alles wat het moet doen is is de Actie vertellen waar de afbeelding staat.
Selecteer afbeelding uit de lijst:
Klik op de knop Toevoegen. QGIS zal de frase
[% "image" %]
toevoegen aan het veld Tekst voor actie.Klik op OK om het dialoogvenster Nieuwe actie toevoegen te sluiten
Klik op OK om het dialoogvenster Laageigenschappen te sluiten
Nu is het tijd om de nieuwe actie testen:
Klik op de laag school_property in het paneel Lagen zodat die wordt geaccentueerd.
Zoek de knop Object-actie uitvoeren (op de werkbalk Attributen);
Klik op de pijl naar beneden aan de rechterkant van deze knop. Er is tot nu slechts één actie gedefinieerd voor deze laag, die u zojuist gemaakt heeft.
Klik op de knop zelf om dit gereedschap te activeren.
Klik, met behulp van dit gereedschap, op één van de de drie schooleigendommen.
De afbeelding voor dat eigendom zou moeten openen.
5.4.3. Follow Along: Zoeken op het internet
Laten we aannemen dat we naar de kaart kijken en meer willen weten over een gebied waar een boerderij in ligt. Veronderstel dat u niets weet van het betreffende gebied en dat u algemene informatie erover wilt weten. Uw eerste impuls, overwegende dat u op dit moment een computer gebruikt, zou waarschijnlijk zijn de naam van het gebied te googelen. Laten we dus QGIS vertellen om dat automatisch voor ons te doen!
Open de attributentabel voor de laag landuse.
We zullen het veld
name
gebruiken voor elk van onze gebieden voor grondgebruik om met Google te zoeken.Sluit de attributentabel.
Ga terug naar Acties in Laageigenschappen.
Klik op de knop Standaard acties maken om enkele vooraf gedefinieerde acties toe te voegen.
Verwijder alle acties, behalve de actie URL openen met de verkorte naam Zoeken op het web met behulp van attribuutwaarde, met de knop De geselecteerde actie verwijderen eronder.
Dubbelklik op de resterende actie om die te bewerken
Wijzig de Omschrijving naar
Google zoeken
, en verwijder de inhoud van het veld Verkorte naam.Zorg er voor dat Kaartvenster bij de geselecteerde Bereiken actie staat.
Wat vervolgens moet worden gedaan is afhankelijk van uw besturingssysteem, dus kies de toepasselijke koers om te volgen:
Windows
Kies, onder Type, Open. Dit zal Windows vertellen om een internetadres te openen in uw standaard browser, zoals Internet Explorer.
Ubuntu Linux
Onder Actie, schrijf
xdg-open
. Dit zal Ubuntu vertellen om een Internetadres te openen in uw standaard browser, zoals Chrome of Firefox.macOS
Onder Actie, schrijf
open
. Dit zal macOS vertellen om een Internetadres te openen in uw standaard browser, zoals Safari.
Nu kunt u doorgaan met het schrijven van de opdracht
Welke opdracht u hierboven ook gebruikte, u moet het vervolgens vertellen welk internetadres geopend moet worden. U wilt Google bezoeken en automatisch naar een frase zoeken.
Wanneer u gewoonlijk Google gebruikt, voert u uw zoekvraag in de zoekbalk van Google in. Maar in dit geval wilt u dat uw computer dat voor u doet. De manier waarop u Google vertelt naar iets te zoeken (als u niet direct de zoekbalk wilt gebruiken) is door uw internetbrowser het adres
https://www.google.com/search?q=SEARCH_PHRASE
, waar`SEARCH_PHRASE
is waarnaar u wilt zoeken, op te geven. Omdat we nog niet weten naar welke frase we gaan zoeken, voeren we alleen het eerste gedeelte (zonder de te zoeken frase) in.Schrijf, in het veld Actie,
https://www.google.com/search?q=
. Onthoud om een spatie toe te voegen aan uw initiële opdracht, vóórdat u dit schrijft!Nu wilt u dat QGIS aan de browser vertelt dat Google moet zoeken naar de waarde van
name
voor het object waarop u klikt.Selecteer het veld name.
Klik op de knop Toevoegen
Wat dit betekent is dat QGIS de browser gaat openen en het gaat verzenden naar het adres
https://www.google.com/search?q=[% "name" %]
.[% "name" %]
vertelt QGIS om de inhoud van het veld[% "name" %]
te gebruiken als de frase om naar te zoeken.Dus als, bijvoorbeeld, het gebied voor grondgebruik waarop u klikt, is genaamd
Marloth Nature Reserve
, dan zal QGIS de browser sturen naarhttps://www.google.com/search?q=Marloth%20Nature%20Reserve
, wat er voor zal zorgen dat uw browser Google bezoekt dat op zijn beurt zal zoeken naar “Marloth Nature Reserve”.Als u dat nog niet gedaan heeft, stel dan alles in zoals hierboven is uitgelegd.
Klik op OK om het dialoogvenster Nieuwe actie toevoegen te sluiten
Klik op OK om het dialoogvenster Laageigenschappen te sluiten
Testen van de nieuwe actie.
Klik, met de laag landuse actief in het paneel Lagen, op de pijlknop rechts naast de knop Object-actie uitvoeren, en selecteer de enige voor deze laag gedefinieerde actie (
Google zoeken
).Klik op een willekeurig gebied voor grondgebruik dat u kunt zien op de kaart. Uw browser zal nu openen en zal een zoekactie van Google starten voor de stad die is opgenomen als de waarde
name
voor dat gebied.
Notitie
Als uw actie niet werkt, controleer dan of alles juist is ingevoerd; typefouten komen veel voor bij dit soort werk!
5.4.4. Follow Along: Een webpagina direct in QGIS openen
Hierboven heeft u gezien hoe u een webpagina opent in een externe browser. Er zijn enkele tekortkomingen aan deze benadering met dien verstande dat het een onbekende afhankelijkheid toevoegt – hebben de eindgebruikers de vereiste software om de actie op hun systeem uit te kunnen voeren? Zoals u heeft gezien hebben zij niet noodzakelijkerwijze dezelfde soort basisopdracht voor hetzelfde soort actie, als u niet weet welk OS zij zullen gebruiken. Met sommige versies van een OS, zouden de bovenstaande opdrachten mogelijk helemaal niet werken. Dit zou een onoverkomelijk probleem kunnen zijn.
QGIS staat echter bovenop de ongelooflijk krachtige en veelzijdige bibliotheek Qt. Ook kunnen acties van QGIS willekeurige, getokeniseerde (d.i. variabele informatie gebruikend, gebaseerd op de inhoud van een veldattribuut) opdrachten van Python zijn!
Nu zult u zien hoe u een actie van Python gebruikt om een webpagina weer te geven. Het is hetzelfde algemene idee als het openen van een site in een externe browser, maar het vereist geen browser op het systeem aan de zijde van de gebruiker, omdat het de klasse Qt QWebView gebruikt (wat een op een webkit gebaseerd HTML-widget is) om de inhoud in een pop-upvenster weer te geven.
Laten we deze keer Wikipedia gebruiken. Dus de URL die u nodig heeft, zal er uitzien als deze:
https://wikipedia.org/wiki/SEARCH_PHRASE
De laag-actie maken:
Open het dialoogvenster Laageigenschappen en ga naar de tab Acties.
Start een nieuwe actie met de volgende eigenschappen:
Type:
Python
Omschrijving:
Wikipedia
Tekst voor actie (alles op één regel):
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()
Er gebeuren hier een aantal verschillende dingen:
Alle code voor Python staat in één enkele regel met door punt-komma’s gescheiden opdrachten (in plaats van nieuwe regels, de normale manier om opdrachten voor Python te scheiden).
[%name%]
zal worden vervangen door de feitelijke waarde van het attribuut wanneer de actie wordt uitgevoerd (zoals eerder).De code maakt eenvoudigweg een nieuwe instance van
QWebView
, stelt de URL ervan in en roept danshow()
aan om het als een venster zichtbaar te maken op het bureaublad van de gebruiker.
Onthoud dat dit een ietwat bedrieglijk voorbeeld is. Python werkt met semantisch significant inspringen, dus het scheiden van dingen door punt-komma’s is niet de beste manier om het te schrijven. Dus, in de echte wereld, zou u meer waarschijnlijk uw logica importeren vanuit een module van Python en dan een functie aanroepen met een veldattribuut als parameter.
U zou deze benadering ook kunnen gebruiken om een afbeelding weer te geven, zonder het vereiste dat gebruikers een bepaald programma voor het bekijken van die afbeelding op hun systeem hebben staan.
Probeer de hierboven beschreven methoden te gebruiken om een pagina van Wikipedia te laden met de actie Wikipedia die u zojuist gemaakt heeft.
5.4.5. In Conclusion
Acties stellen u in staat uw kaart extra functionaliteit te geven, handig voor de eindgebruiker die dezelfde kaart bekijkt in QGIS. Wegens het feit dat u shell-opdrachten kunt gebruiken voor elk besturingssysteem, als ook Python, is er geen limiet in termen van functies die u zou kunnen inbouwen!
5.4.6. What’s Next?
Nu u verschillende methoden voor het maken van vectorgegevens heeft gedaan, zult u leren hoe u deze gegevens analyseert om problemen op te lossen. Dat is het onderwerp van de volgende module.