Aangepaste Python expressie-functies gebruiken¶
Waarschuwing
Een nieuwe versie van deze handleiding is beschikbaar op Aangepaste Python expressie-functies gebruiken (QGIS3)
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:
Procedure¶
Open QGIS en ga naar
.

Blader naar het gedownloade bestand
ne_10m_populated_places_simple.zip
en klik op Open.

Ga naar
.

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

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 bestandutm_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)

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.

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 Zone40N
vallen. Klik op Selecteren.
$GetUtmZone = '40N'

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.

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 laagne_10m_populated_places_simple
en selecteer Eigenschappen.

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

U zult opnieuw de bekende expressiebewerker zien. We zullen de functie
concat
gebruiken om de waarde van het veldname
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)

U zult de expressie zien ingevoerd als de waarde van de tekst in Tonen. Klik op OK.

laten we, vóórdat we doorgaan, de objecten die werden geselecteerd in de vorige stap deselecteren. Ga naar
.

Activeer het gereedschap
Kaarttips
door te gaan naar .

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.

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)