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. basic 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.

  1. Open het dialoogvenster Laageigenschappen.

  2. Klik op de tab Velden.

  3. Schakel naar modus Bewerken:

    ../../../_images/toggle_editing_mode.png
  4. Voeg een nieuwe kolom toe:

    ../../../_images/add_new_column.png
  5. Voer de waarden in zoals hieronder:

    ../../../_images/column_settings.png
  6. Ga, als het veld is gemaakt, naar de tab Formulier attributen en selecteer het veld afbeelding.

  7. Stel Type widget in op Bijlage:

    ../../../_images/select_file_name.png
  8. Klik op OK in het dialoogvenster Laageigenschappen.

  9. 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:

    ../../../_images/school_property_no_image.png
  10. Klik op de knop Bladeren (de naast het veld afbeelding).

  11. 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.

  12. Klik op OK.

  13. Associeer alle afbeeldingen met de juiste objecten met behulp van deze methode.

  14. Sla uw bewerkingen op en verlaat de modus Bewerken.

5.4.2. basic Follow Along: Een actie maken

  1. Open de tab Acties voor de laag school_property, en klik op de knop signPlus Een nieuwe actie toevoegen.

    ../../../_images/layer_actions.png
  2. Voer, in het dialoogvenster Nieuwe actie toevoegen, de woorden Afbeelding weergeven in het veld Omschrijving in:

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

    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 schrijf display om ImageMagick te gebruiken. Onthoud om een spatie achter de opdracht te plaatsen!

    • macOS

      1. Klik op de keuzelijst Type en kies Mac.

      2. 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.

  3. Selecteer afbeelding uit de lijst:

    ../../../_images/select_image.png
  4. Klik op de knop Toevoegen. QGIS zal de frase [% "image" %] toevoegen aan het veld Tekst voor actie.

  5. Klik op OK om het dialoogvenster Nieuwe actie toevoegen te sluiten

  6. Klik op OK om het dialoogvenster Laageigenschappen te sluiten

Nu is het tijd om de nieuwe actie testen:

  1. Klik op de laag school_property in het paneel Lagen zodat die wordt geaccentueerd.

  2. Zoek de knop actionRun Object-actie uitvoeren (op de werkbalk Attributen);

  3. 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.

    ../../../_images/run_feature_action_select.png
  4. Klik op de knop zelf om dit gereedschap te activeren.

  5. Klik, met behulp van dit gereedschap, op één van de de drie schooleigendommen.

    De afbeelding voor dat eigendom zou moeten openen.

5.4.3. moderate 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!

  1. 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.

  2. Sluit de attributentabel.

  3. Ga terug naar Acties in Laageigenschappen.

  4. Klik op de knop Standaard acties maken om enkele vooraf gedefinieerde acties toe te voegen.

  5. Verwijder alle acties, behalve de actie URL openen met de verkorte naam Zoeken op het web met behulp van attribuutwaarde, met de knop signMinus De geselecteerde actie verwijderen eronder.

  6. Dubbelklik op de resterende actie om die te bewerken

  7. Wijzig de Omschrijving naar Google zoeken, en verwijder de inhoud van het veld Verkorte naam.

  8. 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.

  9. 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.

  10. Selecteer het veld name.

  11. Klik op de knop Toevoegen

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

    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 naar https://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”.

  12. Als u dat nog niet gedaan heeft, stel dan alles in zoals hierboven is uitgelegd.

  13. Klik op OK om het dialoogvenster Nieuwe actie toevoegen te sluiten

  14. Klik op OK om het dialoogvenster Laageigenschappen te sluiten

Testen van de nieuwe actie.

  1. Klik, met de laag landuse actief in het paneel Lagen, op de pijlknop rechts naast de knop actionRun Object-actie uitvoeren, en selecteer de enige voor deze laag gedefinieerde actie (Google zoeken).

  2. 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. hard 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:

  1. Open het dialoogvenster Laageigenschappen en ga naar de tab Acties.

  2. 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()
      
    ../../../_images/python_action_example.png

    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 dan show() 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.

  3. 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.