6.4. Lesson: Acties

Nu u een standaard heeft 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.

6.4.1. basic Follow Along: Open een afbeelding

Gebruik de laag school_property die u eerder maakte. Het cursusmateriaal bevat foto’s van elk van de drie eigendommen die u digitaliseerde. Wat we vervolgens 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.

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

  • Open het dialoogvenster Laag-eigenschappen.

  • Klik op de tab Velden.

  • Schakel naar modus Bewerken:

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

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

../../../_images/column_settings.png
  • Klik op de knop Text edit naast het nieuwe veld nadat het veld is gemaakt,

  • Stel het in voor een Bestandsnaam:

../../../_images/select_file_name.png
  • Klik op OK in het dialoogvenster Laag-eigenschappen.

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

6.4.3. basic Follow Along: Een actie maken

  • Open het formulier Acties voor de laag school_property.

  • Voer, in het paneel Actie-eigenschappen, de woorden Afbeelding weergeven in in het veld Naam:

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

Wat vervolgens moet worden gedaan is afhankelijk van uw besturingssysteem, dus kies de toepasselijke koers om te volgen:

6.4.3.1. Windows

  • Klik op de keuzelijst Type en kies Open.

6.4.3.2. 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!

6.4.3.3. MacOS

  • Klik op de keuzelijst Type en kies Mac.

  • Onder Actie, schrijf :kbd:`open `. Vergeet niet een spatie achter het commando te plaatsen!

6.4.3.4. Ga door 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:

../../../_images/select_image.png
  • Klik op de knop Veld invoegen. QGIS zal de frase [% "afbeelding" %] toevoegen aan het veld Actie.

  • Klik op de knop Toevoegen aan actielijst.

  • Klik op OK in het dialoogvenster Laag-eigenschappen.

Nu zullen we de nieuwe actie testen:

  • Klik op de laag school_property in de Lagenlijst zodat die wordt geaccentueerd.

  • Zoek naar de knop Object-actie uitvoeren (op dezelfde werkbalk als de knop Attributentabel openen ):

    mAction

  • Klik op de pijl naar beneden aan de rechterkant van deze knop. Er is tot nu slechts één actie gedefinieerd voor deze laag, welke die u zojuist gemaakt heeft is.

  • 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 zal nu openen.

6.4.4. 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!

  • 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 Laag-eigenschappen.

  • In het veld Actie-eigenschappen ‣ Naam, schrijf Google zoeken.

Wat vervolgens moet worden gedaan is afhankelijk van uw besturingssysteem, dus kies de toepasselijke koers om te volgen:

6.4.4.1. Windows

  • Kies, onder Type, Open. Dit zal Windows vertellen om een internetadres te openen in uw standaard browser, zoals Internet Explorer.

6.4.4.2. Ubuntu Linux

  • Onder Actie, schrijf xdg-open. Dit zal Ubuntu vertellen om een Internetadres te openen in uw standaard browser,, zoals Chrome of Firefox.

6.4.4.3. MacOS

  • Onder Actie, schrijf open. Dit zal MacOS vertellen om een Internetadres te openen in uw standaard browser, zoals Safari.

6.4.4.4. Ga door 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 in de zoekbalk van Google. 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 http://www.google.com/search?q=ZOEK_FRASE op te geven, waar ZOEK_FRASE is waarnaar u wilt zoeken. Omdat we nog niet weten naar welke frase we gaan zoeken, voeren we alleen het eerste gedeelte (zonder de te zoeken frase) in.

  • In het veld Actie, schrijf http://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 Voer veld in:

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

Dit zal QGIS vertellen om vervolgens de volgende frase toe te voegen:

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

Wat dit betekent is dat QGIS de browser gaat openen en het gaat verzenden naar het adres http://www.google.com/search?q=[% "name" %]. Maar [% "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 http://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 de knop Toevoegen aan actielijst. De nieuwe actie zal in de lijst boven verschijnen.

  • Klik op OK in het dialoogvenster Laag-eigenschappen.

Testen van de nieuwe actie.

  • Klik, met de laag landuse actief in de Lagenlijst, op de knop Object-actie uitvoeren.

  • Klik op een willekeurig gebied voor grondgebruik dat u kunt zien op de kaart. Uw browser zal nu openen en zal automatisch 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!

6.4.5. 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 Qt4. 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 Qt4 QWebView gebruikt (wat een op een webkit gebaseerd HTML-widget is) om de inhoud in een pop-upvenster weer te geven.

Laten we, in plaats van Google, deze keer Wikipedia gebruiken. Dus de URL die u nodig heeft zal er uitzien als deze:

http://wikipedia.org/wiki/ZOEK_FRASE

De laag-actie maken:

  • Open het dialoogvenster Laag-eigenschappen en ga naar de tab Acties.

  • Start een nieuwe actie met de volgende eigenschappen:

    • Type: Python
    • Naam: Wikipedia

    • Action (op een regel): 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

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 woordt 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 de benadering op dezelfde wijze kunnen gebruiken om een afbeelding weer te geven zonder het vereiste dat de gebruiker een bepaald programma voor het bekijken van die afbeelding op zijn systeem heeft.

  • Probeer de bovengenoemde beschreven methoden om een pagina van Wikipedia te laden met behulp van de actie Wikipedia die u zojuist gemaakt heeft.

6.4.6. 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!

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