Svarbu
Vertimas yra bendruomenės pastangos, prie kurių jūs galite prisijungti. Šis puslapis šiuo metu išverstas 100.00%.
9.1. Išraiškos
Priklausomai nuo sluoksnio duomenų ir standartinių ar naudotojo sukurtų funkcijų, Išraiškos siūlo galingą būdą manipuliuoti atributų reikšmėmis, geometrijomis ir kintamaisiais, siekiant dinamiškai geisti geometrijų stilių, užrašų turinį ar vietą, diagramų reikšmes, išdėstymo elementų aukštį, parinkti kai kuriuos geoobjektus, kurti virtualius laukus…
Pastaba
Numatytųjų funkcijų ir kintamųjų, skirtų išraiškų rašymui, sąrašą galima rasti Funkcijų sąrašas, kartu su detalia informacija ir pavyzdžiais.
9.1.1. Išraiškų teksto kūrėjas
Pagrindinis išraiškų kūrimo dialogas - Išraiškų teksto kūrėjas - pasiekiamas daugelyje QGIS dalių, pavyzdžiui, jį rasite, kai:
parenkate geoobjektus įrankiu
Parinkti su išraiška…;
keičiate atributus pavyzdžiui su įrankiu
Laukų skaičiuotuvas;
keičiate simbologiją, užrašus ar išdėstymo elementų parametrus naudodami įrankį
Nuo duomenų priklausantis permušimas (žr. Nuo duomenų priklausančių permušimų nustatymai);
kuriate geometrijos generatoriaus simbolių sluoksnį;
vykdote kokį nors geoapdorojimą.
Išraiškų kūrimo dialogas teikia:
Išraiškos kortelę, kuri standartinių funkcijų dėka leidžia rašyti ir tikrinti naudojamą išraišką;
Funkcijų keitimo kortelę, kuri padeda išplėsti funkcijų sąrašą kuriant savo funkcijas.
9.1.1.1. Naudotojo sąsaja
Kortelė Išraiška teikia pagrindinę sąsają, skirtą rašyti išraiškas naudojant funkcijas, sluoksnių laukus ir reikšmes. Joje yra šie valdikliai:

Fig. 9.1 Išraiškos kortelė
Išraiškos rašymo plotas, kuriame rašote ar įkeliate išraiškas. Išraiškų rašymo pagreitinimui galite naudoti automatinį užbaigimą:
atitinkamų kintamųjų, funkcijų pavadinimų ir laukų pavadinimų, žemiau esančiame lauke naudokite rodykles Aukštyn ir Žemyn, kad naršytumėte elementus ir spauskite Tab, kad įterptumėte išraišką arba tiesiog spauskite ant norimo elemento.
funkcijų parametrų, kurie rodomi juos pildant.
QGIS taipogi tikrina išraiškų korektiškumą ir paryškina visas klaidas naudojant:
Pabraukimą: nežinomoms funkcijoms, neteisingiems ar netinkamiems argumentams;
Žymeklį: kiekvienai kitai klaidai (pvz. trūkstamiems skliausteliams, netikėtiems simboliams) vienoje vietoje.
Patarimas
Dokumentuokite savo išraišką komentarais
Kai naudojate sudėtingą išraišką, gera praktika yra pridėti tekstą arba kaip kelių eilučių, arba kaip vidinį komentarą, padedanti jums atsiminti.
/* Labels each region with its highest (in altitude) airport(s) and altitude, eg 'AMBLER : 264m' for the 'Northwest Artic' region */ with_variable( 'airport_alti', -- stores the highest altitude of the region aggregate( 'airports', 'max', "ELEV", -- the field containing the altitude -- and limit the airports to the region they are within filter := within( @geometry, geometry( @parent ) ) ), aggregate( -- finds airports at the same altitude in the region 'airports', 'concatenate', "NAME", filter := within( @geometry, geometry( @parent ) ) and "ELEV" = @airport_alti ) || ' : ' || @airport_alti || 'm' -- using || allows regions without airports to be skipped )
Virš išraiškų redaktoriaus rasite įrankius, kurie padės jums:
Kurti ir tvarkyti naudotojo išraiškas
Po išraiškų redaktoriumi jūs raiste:
Aibę bazinių veiksmų, padedančių kurti išraiškas
Tikimosi išvesties formato indikatorių, kai jūs apibrėžiate nuo duomenų priklausančias geoobjektų savybes
Gyvą išraiškos Išvesties peržiūrą (iki 60 simbolių), pagal nutylėjimą įvertinta su pirmu sluoksnio geoobjektu. Jei norite pažiūrėti išvesties peržiūrą, kuri viršija 60 simbolių, galite užvesti pelę, kad pamatytumėte pilnos išvesties peržiūrą. Norėdami nukopijuoti išvesties peržiūrą į iškarpinę, spauskite ant peržiūros dešinį mygtuką ir parinkite
Kopijuoti išraiškos reikšmę.
Galite naršyti ir įvertinti kitus sluoksnio geoobjektus naudodami iškrentantį sąrašą Geoobjektas (reikšmės imamos iš sluoksnio savybės rodomas pavadinimas).
Klaidos atveju ji parodoma ir jūs galite gauti daugiau informacijos naudodami pateikiamą nuorodą.
Funkcijų parinkiklis rodo sąrašą funkcijų, kintamųjų, laukų… sudėliotų į grupes. Yra paieškos laukelis, leidžiantis filtruoti sąrašą ir taip greitai rasti konkrečią funkciją ar lauką. Du kartus paspaudus elementą, jis pridedamas į išraiškų redaktorių.
Pagalbos skydelis rodo kiekvieno funkcijų parinkiklyje pažymėto elemento pagalbą.
Patarimas
Išraiškoje užvedę pelę virš funkcijos pavadinimo spauskite Ctrl+Paspaudimas, kad automatiškai parodytumėte dialoge jo pagalbą.
Lauko reikšmių valdiklis, kuris rodomas funkcijų sąraše parinktus lauką, padeda ištraukti geoobjekto atributus:
ieškant konkrečios reikšmės
rodant sąrašą Visų unikalių ar 10 pavyzdinių reikšmių. Taipogi pasiekiama paspaudus dešinį pelės mygtuką.
Kai laukas susietas su kitu sluoksniu ar aibe reikšmių, t.y. jei lauko valdiklio tipas yra RyšioNuoroda, ReikšmėsRyšys ar ReikšmiųRinkinys, galima išvardinti visas susijusio lauko reikšmes (iš susijusio sluoksnio, lentelės ar sąrašo). Be to, jūs galite filtruoti šį sąrašą
Rodyti tik naudojamas reikšmes.
Du kartus paspaudus lauko reikšmę valdiklyje ji bus pridėta į išraiškos redaktorių.
Patarimas
Dešinį skydelį, kuris rodo funkcijų pagalbą ar laukų reikšmes, galima sutraukti (paslėpti) dialoge. Spauskite mygtuką Rodyti reikšmes ar Rodyti pagalbą, kad jį grąžintumėte.
9.1.1.2. Išraiškos rašymas
QGIS išraiškos naudojamos parenkant geoobjektus ar nustatant reikšmes. Rašant QGIS išraišką laikomasi kelių taisyklių:
Dialogas nustato kontekstą: jei jūs įpratę prie SQL, jūs tikriausiai žinote užklausas, tokias kaip select geoobjektai from sluoksnis where sąlyga ar update sluoksnis set laukas = nauja_reikšmė where sąlyga. QGIS išraiškai irgi reikia visos tokios informacijos, bet įrankis, kurį jūs naudojate išraiškų redaktoriaus atvėrimui, pateikia dalį jį. Pavyzdžiui, jei turite sluoksnį (
pastatai
) su lauku (aukštis
) ir tada:spaudžiate įrankį
Parinkti pagal išraišką, tai jūs norite atlikti „select geoobjektai from pastatai“. Ir sąlyga yra vienintelis dalykas, kurį jums reikia pateikti išraiškos tekstiniame valdiklyje, pvz. įrašykite
"aukštis" > 20
, kad parinktumėte pastatus, kurie yra aukštesni nei 20.atlikus tokį parinkimą, paspaudus mygtuką
Laukų skaičiuotuvas ir parinkus „aukštis“ kaip Keisti esamą lauką, jūs galite pateikti komandą „update pastatai set aukštis = ??? where aukštis > 20“. Jums belieka tik pateikti naują reikšmę, pavyzdžiui tiesiog įveskite
50
išraiškų redaktoriaus tekstiniame laukelyje, kad nustatytumėte prieš tai parinktų pastatų aukštį.
Atkreipkite dėmesį į kabutes: viengubos kabutės grąžina tekstas, taigi tekstas tarp viengubų kabučių (
'145'
) interpretuojamas eilutė. Dvigubos kabutės grąžina reikšmę, taigi naudokite jas laukams ("manolaukas"
). Laukus taipogi galima naudoti be kabučių (manolaukas
). Skaičiams kabučių nereikia (3.16
).Pastaba
Funkcijos paprastai kaip argumento laukia teksto ar lauko pavadinimo. Darykite taip:
attribute( @atlas_feature, 'height' ) -- returns the value stored in the "height" attribute of the current atlas feature
Nedarykite taip:
attribute( @atlas_feature, "height" ) -- fetches the value of the attribute named "height" (e.g. 100), and use that value as a field -- from which to return the atlas feature value. Probably wrong as a field named "100" may not exist.
Patarimas
Naudokite parametrus su pavadinimais, kad palengvintumėte skaitymą
Kai kurioms funkcijoms reikia pateikti daug parametrų. Išraiškų variklis leidžia naudoti pavadintus parametrus. Tai reiškia, kad vietoje to, kad rašytumėte mistišką išraišką clamp( 1, 2, 9)
, galite naudoti clamp( min:=1, value:=2, max:=9)
. Tai taipogi leidžia sukeisti argumentus vietomis, pvz. clamp( value:=2, max:=9, min:=1)
. Pavadintų parametrų naudojimas padeda paaiškinti, ką nurodo vienos ar kitos reikšmės, o tai yra naudinga, kai bandote perskaityti išraišką vėliau!
9.1.1.3. Keli išraiškų naudojimo pavyzdžiai
Laukų skaičiuotuve paskaičiuokite lauko „pop_density“ reikšmę, naudojant esamus laukus „total_pop“ ir „area_km2“:
"total_pop" / "area_km2"
Pažymėti arba kategorizuoti geoobjektus pagal jų plotą:
CASE WHEN $area > 10 000 THEN 'Larger' ELSE 'Smaller' END
Pakeisti lauką „density_level“ kategorijomis pagal lauko „pop_density“ reikšmes:
CASE WHEN "pop_density" < 50 THEN 'Low population density' WHEN "pop_density" >= 50 and "pop_density" < 150 THEN 'Medium population density' WHEN "pop_density" >= 150 THEN 'High population density' END
Pritaikyti kategorizuotą stilių visiems geoobjektams pagal tai, ar jų vidutinė būsto kaina yra mažesnė ar didesnė už 10000€ kvadratiniam metrui:
"price_m2" > 10000
Naudojant įrankį „Parinkti pagal išraišką…“, parinkite visus geoobjektus, reprezentuojančius „Aukšto gyventojų skaičiaus tankumo“ plotus ir kurių vidutinė būsto kaina yra aukštesnė nei 10000€ už kvadratinį metrą:
"density_level" = 'High population density' and "price_m2" > 10000
Ankstesnę išraišką taipogi galima naudoti norint apibrėžti, kuriuos geoobjektus pažymėti ar rodyti žemėlapyje.
Parinkti geoobjektus, kurie dengia „lands“ sluoksnio natūralią zoną:
overlay_intersects( layer:='lands', filter:="zone_type"='Natural' )
Kiekvienam geoobjektui skaičiuoja, kiek juose yra pastatų:
array_length( overlay_contains( layer:='buildings', expression:=@id ) )
Kuria sluoksniui skirtingo (tipo) simbolius, naudojant geometrijos generatorių:
point_on_surface( @geometry )
Pateiktam taškiniam geoobjektui sukuria uždarą liniją (naudojant
make_line
) aplinkjo geometriją:make_line( -- using an array of points placed around the original array_foreach( -- list of angles for placing the projected points (every 90°) array:=generate_series( 0, 360, 90 ), -- translate the point 20 units in the given direction (angle) expression:=project( @geometry, distance:=20, azimuth:=radians( @element ) ) ) )
Spausdinimo išdėstymo užraše rodyti „airports“ geoobjektų pavadinimą, kai jie yra išdėstymo elemento „Map 1“ viduje:
with_variable( 'extent', map_get( item_variables( 'Map 1' ), 'map_extent' ), aggregate( 'airports', 'concatenate', "NAME", intersects( @geometry, @extent ), ' ,' ) )
9.1.1.4. Išraiškų įrašymas
Naudodami virš išraiškų redaktoriaus esantį mygtuką Pridėti dabartinę išraišką į naudotojo išraiškas jūs galite įrašyti svarbias išraiškas, kurias norite greitai pasiekti. Jos bus pasiekiamos grupėje Naudotojo išraiškos skydelio viduryje. Jos įrašomos į naudotojo profilį (
<userprofile>/QGIS/QGIS3.ini
failas) ir jas galima naudoti visuose išraiškų dialoguose visuose dabartinio naudotojo profilio projektuose.
Virš išraiškų redaktoriaus yra keletas įrankių, kurie padeda tvarkyti naudotojo išraiškas:
Pridėti dabartinę išraišką į naudotojo išraiškas: įrašyti išraišką į naudotojo profilį. Paprastesniam identifikavimui galima pridėti užrašą ir pagalbos tekstą.
Keisti parinktą išraišką iš naudotojo išraiškų, taipogi ir jų pagalbą ir užrašą
Importuoti naudotojo išraiškas iš
.json
failo į aktyvaus profilio aplankąEksportuoti naudotojo išraiškas kaip
.json
failą; bendrinamos visos naudotojo profilio faileQGIS3.ini
esančios naudotojo išraiškos
9.1.2. Funkcijų redaktorius
Kortelėje Funkcijų redaktorius jūs galite rašyti savo funkcijas Python kalba. Tai teikia patogų ir paprastą būda atsižvelgti į poreikius, kurių netenkina standartinės funkcijos.

Fig. 9.2 Funkcijų redaktoriaus kortelė
Norėdami sukurti naują funkciją:
Parinkite, kur laikyti naują funkciją. Galite pasirinkti įrašyti arba į Funkcijos failą, arba į Projekto funkcijas.
Jei parinksite Funkcijos failą, jums reikės įvesti Python
.py
failo pavadinimą, kuris remiasi QGIS šablono failu ir saugomas aktyvaus naudotojo profilio aplanko poaplankyje/python/expressions
.Jei parinksite Projekto funkcijas,nauja funkcija bus saugoma projekto faile.
Naujas elementas pridedamas Funkcijų redaktoriaus kortelės kairiame skydelyje.
Skydelyje dešinėje rodomas failo turinys: pythono scenarijaus šablonas. Pakeiskite kodą ir jo pagalbą pagal savo poreikius.
Spauskite mygtuką
Įrašymo ir įkėlimo funkcijos. Jūsų parašyta funkcija pridedama į funkcijų medį kortelėje Išraiškos, pagal nutylėjimą - grupėje
Savo
.Džiaukitės savo nauja funkcija.
Jei funkciją reikia tobulinti, įjunkite kortelę Funkcijų redaktorius, atlikite pakeitimus ir vėl spauskite mygtuką
Įrašyti ir įkelti funkcijas, kad jie atsidurtų faile ir taip būtų prieinami bet kurioje išraiškų kortelėje.
Savos Python funkcijos, saugomos kaip Funkcijų failai, laikomos naudotojo profilio aplanke, o tai reiškia, kad kiekvieną kartą paleidžiant QGIS, bus automatiškai įkeltos visos dabartinio naudotojo profilyje įkeltos funkcijos. Turėkite omenyje, kad bendrindami Python funkcijas, kurios laikomos Funkcijų failuose, jums reikia bendrinti .py
failą iš aplanko /python/expressions
.
Kitavertus, savos Python funkcijos, kurios saugomos kaip Projekto funkcijos, gali būti lengvai bendrinamos tiesiog bendrinant projekto failą, kuriame jos ir įrašytos. Atveriant projektą su projekto funkcijomis, QGIS gali įkelti arba ignoruoti jas priklausomai nuo to, kas nurodyta Bendrųjų nustatymų parinktyje Įjungti projekto įtrauktą pythono kodą.
Norėdami ištrinti savo funkciją:
Įjunkite kortelę Funkcijų redaktorius
Parinkite funkciją sąraše
Spauskite
Išimti parinktą funkciją. Funkcija išimama iš sąrašo ir, priklausomai nuo laikymo vietos, atitinkamas
.py
failas ištrinamas iš naudotojo profilio aplanko, arba Python funkcijos išimamos iš projekto failo.
Kai projekto failas su projekto funkcijomis uždaromas, atitinkamos Projekto funkcijos iškeliamos ir jų daugiau nebegalima naudoti QGIS sesijoje.
Pavyzdys
Štai pavyzdys kaip sukurti jūsų nuosavą funkciją my_sum
, kuri veiks su dviem reikšmėmis.
from qgis.core import *
from qgis.gui import *
@qgsfunction(args='auto', group='Custom')
def my_sum(value1, value2, feature, parent):
"""
Calculates the sum of the two parameters value1 and value2.
<h2>Example usage:</h2>
<ul>
<li>my_sum(5, 8) -> 13</li>
<li>my_sum("field1", "field2") -> 42</li>
</ul>
"""
return value1 + value2
Dekoratorius @qgsfunction
priima šios argumentus:
args
: argumentų skaičius. Naudojantargs='auto'
, funkcijai reikalingų argumentų skaičius bus paskaičiuojamas automatiškai pagal tai, kiek argumentų apibrėžta Python’e (minus 2 -feature
irparent
). Nurodžiusargs = -1
leidžiamas bet koks argumentų skaičius.group
argumentas nurodo grupę, kurioje funkcija turėtų būti rodoma išraiškų dialoge.usesgeometry=True
jei išraiškai reikia prieigos prie geoobjekto geometrijos. Pagal nutylėjimąFalse
.handlesnull=True
jei išraiška turi savo NULL reikšmių apdorojimą. JeiFalse
(numatyta), rezultatas visada bus NULL, jei bet kuris iš parametrų yra NULL.referenced_columns=[list]
: Masyvas atributų pavadinimų, kurie yra privalomi funkcijai. Numatyta reikšmė[QgsFeatureRequest.ALL_ATTRIBUTES]
.
Pati funkcija priima tokius argumentus:
bet kokį skaičių bet kokio tipo parametrų, kuriuos norite perduoti jūsų funkcijai, nustatytus prieš šiuos argumentus.
feature
: dabartinis geoobjektasparent
: klasėsQgsExpression
objektascontext
: Jei paskutinėje pozicijoje yra argumentas, pavadintascontext
, šiame kintamajame bus klasėsQgsExpressionContext
objektas, kuris duoda prieigą prie įvairios papildomos informacijos, tokios kaip išraiškos kintamieji. Pvz.context.variable( 'layer_id' )
Ankstesnio pavyzdžio funkciją tada galima naudoti išraiškose:

Fig. 9.3 Savo funkcija, pridėta į išraiškų kortelę
Daugiau informacijos apie Python kodo kūrimą galima rasti PyQGIS Developer Cookbook.