Aangepaste Python expressie-functies gebruiken

Expressies in QGIS zijn bijzonder krachtig en worden in vele bron-mogelijkheden gebruikt - selectie, berekenen van veldwaarden, opmaken, labelen etc. QGIS hefet ook ondersteuning voor gebruikergedefinieerde expressies. Met slechts weinig programmeren in Python kunt u uw eigen functies definiëren die kunnen worden gebruikt binnen het programma voor de expressie.

Overzicht van de taak

We zullen een aangepaste functie definiëren die de UTM Zone van een kaartobject zoekt en deze functie gebruikt om een expressie te schrijven die de UTM-zone als een kaarttip weergeeft als over het punt wordt gegaan.

Andere vaardigheden die u zult leren

  • Hoe het gereedschap Kaarttips te gebruiken om aangepaste tekst weer te geven indien er over een object wordt gegaan.

De gegevens ophalen

We zullen de gegevensset Natural Earth’s Populated Places gebruiken. Download de simple (less columns) dataset

Voor het gemak kunt u direct een kopie van beide gegevenssets downloaden vanaf de links hieronder:

ne_10m_populated_places_simple.zip

Procedure

  1. Open QGIS en ga naar Kaartlagen ‣ Laag toevoegen ‣ Vectorlaag toevoegen.

../_images/129.png
  1. Blader naar het gedownloade bestand ne_10m_populated_places_simple.zip en klik op Open.

../_images/220.png
  1. Ga naar Beeld ‣ Selecteren ‣ Selecteren met expressie....

../_images/313.png
  1. Schakel naar de tab Functiebewerker. Hier kunt u alle code voor PyQGIS schrijven die zal worden uitgevoerd doort het programma voor expressies.

../_images/49.png
  1. We zullen een aangepaste functie maken, genaamd GetUtmZone dat het getal van de UTM-zone zal berekenen voor elk object. Omdat aangepaste functies in QGIS werken op het niveau van objecten. We zullen het zwaartepunt van de geometrie van het object gebruiken en de UTM-zone berekenen uit de latitude en longitude van de geometrie van het zwaartepunt. We zullen ook een bestemmings ‘N’ of ‘S’ toevoegen aan de zone om aan te geven of de zone zich bevindt in de noordelijke of zuidelijke hemisfeer. Typ de volgende code in de bewerker, voer als naam voor het bestand utm_zones.py in en klik op Bestand opslaan.

Notitie

UTM-zones zijn projectiezones op de lengtegraad, genummerd van 1 tot en met 60. Elke UTM-zone is 6 graden breed. Hier gebruiken we een eenvoudige wiskundige formule om de toepasselijke zone te zoeken voor een bepaalde waarde voor de lengtegraad. Onthoud dat deze formule niet enige bijzondere UTM-zones dekt.

import math
from qgis.core import *
from qgis.gui import *

@qgsfunction(args=0, group='Custom', usesgeometry=True)
def GetUtmZone(value1, feature, parent):
    centroid = feature.geometry()
    longitude = centroid.asPoint().x()
    latitude = centroid.asPoint().y()
    zone_number = math.floor(((longitude + 180) / 6) % 60) + 1

    if latitude >= 0:
        zone_letter = 'N'
    else:
        zone_letter = 'S'

    return '%d%s' % (int(zone_number), zone_letter)
../_images/59.png
  1. Klik op Script uitvoeren. Dit zal de code voor Python uitvoeren en de functie``GetUtmZone`` registreren in het programma voor de expressies. Onthoud dat dit slechts één keer behoeft te worden uitgevoerd. Als de functie eenmaal is geregistreerd, zal hij altijd beschikbaar zijn voor het programma voor de expressies.

../_images/68.png
  1. Schakel naar de tab Expressie in het dialoogvenster Selecteren met expressie. Zoek en vergroot de groep Custom in het gedeelte Functies. U zult een nieuwe aangepaste functie $GetUtmZone in de lijst zien. We kunnen nu deze functie nu gebruiken in expressies, net als alle andere functies. Typ de volgende expressie in de bewerker. Deze expressie zal alle punten selecteren die in de UTM Zone 40N vallen. Klik op Selecteren.

$GetUtmZone = '40N'
../_images/78.png
  1. Terug in het hoofdvenster van QGIS zult u vele punten zien die geel zijn geaccentueerd. Dit zijn de punten die vallen in de UTM Zone die we hebben gespecificeerd in de expressie.

../_images/88.png
  1. U zag hoe we een aangepaste functie om objecten met een expressie te selecteren hebben gedefinieerd en gebruikt. We zullen du dezelfde functie in een andere context gebruiken. Eén van de verborgen juwelen in QGIS is het gereedschap Kaarttips. Dit gereedschap geeft gebruiker-gedefinieerde tekst weer indien u over een object gaat. Klik met rechts op de laag ne_10m_populated_places_simple en selecteer Eigenschappen.

../_images/98.png
  1. Schakel over naar de tab Tonen en selecteer HTML. Hier kunt u elke tekst invullen die zal worden weergegeven als u over de objecten van de laag gaat. Beter nog, u kunt veldwaarden van de laag gebruiken en ook expressies om veel betere nuttige berichten weer te geven. Klik op de knop Voorwaarde toevoegen....

../_images/108.png
  1. U zult opnieuw de bekende expressiebewerker zien. We zullen de functie concat gebruiken om de waarde van het veld name samen te voegen met het resultaat van onze aangepaste functie $GetUtmZone. Voer de volgende expressie in en klik op OK.

concat("name", ' | UTM Zone: ', $GetUtmZone)
../_images/1111.png
  1. U zult de expressie zien ingevoerd als de waarde van de tekst in Tonen. Klik op OK.

../_images/1210.png
  1. laten we, vóórdat we doorgaan, de objecten die werden geselecteerd in de vorige stap deselecteren. Ga naar Beeld ‣ Selecteren ‣ Objecten uit alle lagen deselecteren.

../_images/137.png
  1. Activeer het gereedschap Kaarttips door te gaan naar Beeld ‣ Kaarttips.

../_images/147.png
  1. Zoom in op een willekeurig gebied van de kaart en plaats uw muiscursor boven een object. U zult de naam van de stad en de corresponderende UTM-zone weergegeven zien worden als een kaarttip.

../_images/157.png
comments powered by Disqus

This work is licensed under a Creative Commons Attribution 4.0 International License