Fontos
A fordítás közösségi munka, amihez itt tud csatlakozni. Ennek az oldalnak eddig 99.21%-a van lefordítva.
9.1. Kifejezések
A rétegadatokon és az előre elkészített vagy felhasználó által definiált függvényeken alapuló Kifejezések hatékony módot kínálnak az attribútumértékek, a geometria és a változók manipulálására, a geometria stílusának, a címke tartalmának vagy pozíciójának, a diagram értékének, egy elrendezéselem magasságának dinamikus megváltoztatására, valamint elemek kiválasztására és virtuális mezők létrehozására, és így tovább…
Megjegyzés
A kifejezések írásához használt alapértelmezett függvények és változók listája megtalálható A függvények listája címen, részletes információkkal és példákkal.
9.1.1. A kifejezésszerkesztő
A kifejezések létrehozására szolgáló fő párbeszédablak, a Kifejezésszerkesztő a QGIS számos részéből elérhető, első sorban az alábbi módokon:
elemek kiválasztása a
Kiválasztás kifejezéssel… eszközzel;attribútumok szerkesztése például a
Mezőkalkulátor eszközzel;jelrendszer, címkék, elrendezéselemek paramétereinek manipulálása az
Adatvezérelt felülbírálás eszközzel (lásd Adatvezérelt felülbírálási beállítások);szimbólumréteg készítése geometriagenerátorral;
valamilyen geoprocessing elvégzése.
A Kifejezésszerkesztő párbeszédablakból elérhető:
A Kifejezés fül, amely az előre definiált függvényeknek köszönhetően segít megírni és ellenőrizni a kifejezést;
Függvényszerkesztő fül, amely segítségével egyéni függvényekkel bővíthető a függvények listája.
9.1.1.1. A felület
A Kifejezés fül biztosítja a fő felületet a függvényeket, rétegek mezőit és értékeit használó kifejezések írásához. A következő részeket tartalmazza:
9.1. ábra A Kifejezés fül
Egy kifejezésszerkesztő terület kifejezések megadásához vagy beillesztéséhez. A kifejezések írásának felgyorsítása érdekében automatikus kitöltés áll rendelkezésre:
A bevitt szövegnek megfelelő változók, függvénynevek és mezőnevek alatta jelennek meg: a Felfelé és Lefelé nyilakkal válogathat az elemek között, és a Tab gomb megnyomásával vagy a kívánt elemre kattintva beillesztheti a kifejezésbe.
A függvényparaméterek kitöltés közben jelennek meg.
A QGIS ellenőrzi a kifejezés helyességét is, és kiemeli az összes hibát:
Aláhúzás: ismeretlen függvények, rossz vagy érvénytelen argumentumok esetén;
Jelölő: minden más hiba (pl. hiányzó zárójel, váratlan karakter) esetén egyetlen helyen.
Javaslat
Dokumentálja a kifejezéseket megjegyzésekkel
Ha összetett kifejezések használatakor jó gyakorlat a szöveget emlékeztető jegyzetekkel ellátni, akár többsoros, akár soron belüli megjegyzésként.
/* 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 )
A kifejezésszerkesztő felett egy eszköztár segít a következőkben:
Felhasználói kifejezések szerkesztése és kezelése
A kifejezésszerkesztő alatt találja:
Alapvető műveleti jelek készlete, amelyek segítenek a kifejezés felépítésében
A kimenet elvárt formátumának jelzése, amikor adatvezérelt elemtulajdonságokat definiál
A kifejezés élő Előnézetét (legfeljebb 60 karakter), mely alapértelmezetten a réteg első eleme alapján lesz kiértékelve. A 60 karaktert meghaladó előnézeti szöveg megtekintéséhez a kurzort a szöveg fölé mozgatva megjelenik egy felugró eszköztipp, amely a teljes kimeneti előnézetet tartalmazza. A kimeneti előnézeti szöveg vágólapra másolásához kattintson a jobb gombbal az előnézeti szövegre, és válassza a
Kifejezésérték másolása lehetőséget.A réteg többi elemét az Elem legördülő listából választhatja és értékeltetheti ki (az értékek a réteg megjelenített név tulajdonságából származnak).
Hiba esetén jelzi azt, és egy hivatkozáson keresztül elérhetővé teszi a részleteket.
A függvényválasztó megjeleníti a függvények, változók, mezők… listáját csoportokba rendezve. A lista szűrésére, és egy adott függvény vagy mező gyors megtalálására egy keresőmező áll rendelkezésre. Egy elemre duplán kattintva hozzáadja azt a kifejezésszerkesztőhöz.
A súgópanel egy súgót jelenít meg a függvényválasztó kiválasztott eleméhez.
Javaslat
A kurzort a kifejezés egy függvényének neve fölött tartva Ctrl+Kattintással megjelenik annak súgója a párbeszédablakban.
A mezőértékek vezérlő, amely akkor jelenik meg, amikor egy mezőt választ ki a függvényválasztóban, segít az elemek attribútumainak lekérésében:
Egy adott mezőérték keresése
Az Összes egyedi vagy 10 minta érték megjelenítése. Jobb gombbal is elérhető.
Ha a mező egy másik réteggel van összekapcsolva vagy értékkészletre leképezve, azaz ha a mezőtípus RelationReference, ValueRelation vagy ValueMap típusú, akkor lehetőség van a társított mező összes értékének felsorolására (a hivatkozott rétegből, táblázatból vagy listából). Ezenkívül szűrheti a listát a
Csak az aktuális mezőben használt értékek megjelenítése bekapcsolásával.
A vezérlőben lévő mezőértékre való dupla kattintás hozzáadja azt a kifejezésszerkesztőhöz.
Javaslat
A jobb oldali panel, amely a függvények súgóját vagy a mezőértékeket jeleníti meg, a párbeszédablakban összecsukható (rejtett). Nyomja meg az Értékek megjelenítése vagy a Súgó megjelenítése gombot, hogy visszakapja.
9.1.1.2. Kifejezés írása
A QGIS-kifejezések az elemek kiválasztására vagy értékek beállítására szolgálnak. QGIS-ben a kifejezések írása követ néhány szabályt:
A párbeszédablak határozza me a kontextust: ha már használt SQL-t, biztosan ismeri a select elemek from réteg where feltétel vagy update réteg set mező = új_érték where feltétel jellegű lekérdezéseket. A QGIS-kifejezésekben ugyanígy szükség van mind ezen információkra, viszont az az eszköz, amiből megnyitotta a kifejezésszerkesztő párbeszédablakot, biztosítja ezek egy részét. Például adott egy (
épületek) réteg egy (magasság) mezővel:a
Kiválasztás kifejezéssel eszköz megnyomása azt jelenti, hogy az „épületek réteg elemeit akarja kiválasztani”. A feltétel az egyetlen olyan információ, melyet a kifejezésszerkesztőben meg kell adnia. Például a "magasság" > 20megadásával kiválaszthatóak a 20-nál magasabb épületek.ezt a kiválasztást elvégezve nyomja meg a
Mezőkalkulátor gombot, majd a Meglévő mező frissítése alatt a „magasság” mezőt kiválasztva máris készített egy „update épületek set magasság = ??? where magasság > 20” utasítást. Az egyetlen hiányzó láncszem ez esetben az új érték megadása. Például írja be a kifejezésszerkesztő szövegbeviteli mezőjébe, hogy 50, hogy beállítsa a korábban kiválasztott épületek magasságát.
Figyeljen az idézőjelekre: a szimpla idézőjelek szó szerinti értéket adják vissza, így a szimpla idézőjelek közé helyezett szöveg (
'145') karakterláncként lesz értelmezve. A dupla idézőjelek a megadott szöveg értékét adják vissza, amit mezőkhöz használhat ("egyik_mezo"). A mezők idézőjelek nélkül is használhatók (egyik_mezo). A számokat nem kell idézőjelek közé helyezni (3.16).Megjegyzés
A függvények argumentumként a mezőnevet általában karakterláncként várják. Vagyis csinálja így:
attribute( @atlas_feature, 'height' ) -- returns the value stored in the "height" attribute of the current atlas feature
És ne így:
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.
Javaslat
Tegye olvashatóbbá a kifejezéseket megnevezett paraméterek használatával
Egyes függvények sok paraméter megadását igénylik. A kifejezésmotor támogatja a megnevezett paraméterek használatát. Ez azt jelenti, hogy a rejtélyes clamp( 1, 2, 9) kifejezés helyett használható a clamp( min:=1, value:=2, max:=9) kifejezés. Ez lehetővé teszi az argumentumok felcserélését is, például clamp( value:=2, max:=9, min:=1). A megnevezett paraméterek használata egyértelműbbé teszi, hogy egy kifejezésfüggvény argumentumai mire vonatkoznak, ami hasznos, ha később megpróbálja értelmezni a kifejezést.
9.1.1.3. Pár példa a kifejezések használatára
A Mezőkalkulátorban a „pop_density” mező kiszámolása a meglévő „total_pop” és „area_km2” mezők használatával:
"total_pop" / "area_km2"
Elemek címkézése vagy kategorizálása a területük alapján:
CASE WHEN $area > 10 000 THEN 'Larger' ELSE 'Smaller' END
A „density_level” frissítése a „pop_density” értékének megfelelő kategóriákkal:
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
Kategorizált stílus alkalmazása az összes elemre aszerint, hogy az átlagos négyzetméterenkénti lakásáruk kisebb vagy nagyobb, mint 10000 €:
"price_m2" > 10000
A „Kiválasztás kifejezéssel…” eszközzel válassza ki az összes olyan elemet, amely „nagy népsűrűségű” területet képvisel, és amelynek átlagos négyzetméterenkénti lakásárai meghaladják a 10000 eurót:
"density_level" = 'High population density' and "price_m2" > 10000
Az előző kifejezés arra is használható, hogy meghatározzuk, hogy mely elemek legyenek címkézve vagy megjelenítve a térképen.
Azon elemek kiválasztása, amelyek átfedésben vannak egy természeti zónával a „lands” rétegből:
overlay_intersects( layer:='lands', filter:="zone_type"='Natural' )
Megszámolja az egyes elemekhez a bennük található épületek számát:
array_length( overlay_contains( layer:='buildings', expression:=@id ) )
Egy eltérő szimbólum (típus) létrehozása a réteghez a geometriagenerátor segítségével:
point_on_surface( @geometry )
Egy adott pontelemhez létrehoz egy zárt vonalat (a
make_linesegítségével) a geometriája körül: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 ) ) ) )A nyomtatási elrendezés címkéjén megjeleníti az „airports” elemeinek neveit, amelyek az elrendezés „Térkép 1” elemén belül vannak:
with_variable( 'extent', map_get( item_variables( 'Map 1' ), 'map_extent' ), aggregate( 'airports', 'concatenate', "NAME", intersects( @geometry, @extent ), ' ,' ) )
9.1.1.4. Kifejezések mentése
A kifejezésszerkesztő kerete feletti
Az aktuális kifejezés hozzáadása a felhasználói kifejezésekhez gomb segítségével elmentheti azokat a fontos kifejezéseket, amelyekhez gyors hozzáférést szeretne. Ezek a középső panelen található Felhasználói kifejezések csoportból érhetők el. A felhasználói profil (<userprofile>/QGIS/QGIS3.ini fájl) alá kerülnek mentésre, és az aktuális felhasználói profil összes projektjén belül, az összes kifejezés párbeszédablakból elérhetőek.
A kifejezésszerkesztő feletti eszköztár segít a felhasználói kifejezések kezelésében:
Az aktuális kifejezés hozzáadása a felhasználói kifejezésekhez: eltárolja a kifejezést a felhasználói profilban. A könnyebb azonosítás érdekében címk és súgószöveg adható hozzá.
A felhasználói kifejezésekből kiválasztott kifejezés szerkesztése, valamint a címkéje és súgója módosítása
A kiválasztott kifejezés eltávolítása a felhasználói kifejezések közül
Felhasználói kifejezések importálása egy .jsonfájlból az aktív felhasználó profilkönyvtárába
Felhasználói kifejezések exportálása .jsonfájlba; aQGIS3.inifelhasználói profilban lévő összes felhasználói kifejezés megosztásra kerül a fájlban
9.1.2. Függvényszerkesztő
A Függvényszerkesztő fülön saját függvényeket írhat Python nyelven. Ez egy praktikus és kényelmes módja olyan különleges igények kielégítésének, amelyeket az előre definiált függvények nem fednek le.
9.2. ábra A Függvényszerkesztő fül
Új függvény készítéséhez:
Válassza ki, hol legyen eltárolva az új függvény. Választhat, hogy egy Függvényfájlba vagy a Projekt függvényei közé menti el.
Ha a Függvényfájl lehetőséget választja, akkor meg kell adnia a Python
.pyfájl nevét, amely egy QGIS sablonfájlon alapul, és az aktív felhasználói profil könyvtár alatti/python/expressionsmappában található, így minden olyan projekthez elérhető, amelyet ezzel a profillal nyit meg.A Függvény fájlként tárolt egyéni Python függvények automatikusan betöltődnek, amikor új projektet indít a felhasználói profil alatt. Ne feledje, hogy az ilyen Python függvények megosztásához a
/python/expressionsmappában lévő.pyfájlt kell megosztania.Ha a Projekt függvényei lehetőséget választja, az új függvény a projektfájlban lesz eltárolva, és csak az adott projektben lesz elérhető.
A projektfüggvényként tárolt egyéni Python-függvények könnyen megoszthatók a projektfájl megosztásával, ahová az el lett mentve. Egy projektfüggvényeket tartalmazó projekt megnyitásakor a QGIS be tudja tölteni vagy figyelmen kívül tudja hagyni azokat, attól függően, hogy az engedélyezve van-e a beágyazott Python kód beállításban.
A Függvényszerkesztő fül bal oldali panelje új elemmel bővül.
A jobb oldali panel a fájl tartalmát jeleníti meg: egy Python script sablonját.
Uncomment the code block and start editing it according to your needs. You can rely on code autocompletion, code formatting and typing helpers, as defined in Python settings. Online API documentation for Qt and PyQGIS objects is also accessible pressing the F1 key.
A Súgó talál általános információkat a @qgsfunction dekorátor beállításához.
Nyomja meg a
Függvények mentése és betöltése gombot. Az elkészített függvény hozzáadódik a Kifejezés fül függvényeihez, alapértelmezés szerint az Egyénicsoporthoz.Most már használhatja az új függvényt!
Ha a függvény további fejlesztésre szorul, váltson a Függvényszerkesztő fülre végezze el a módosításokat, majd kattintson ismét a
Függvények mentése és betöltése gombra, hogy azok bekerüljenek a fájlba, és vele együtt a kifejezések fülre.
Egyéni függvény törléséhez:
Váltson a Függvényszerkesztő fülre
Jelölje ki a függvényt a listában
Nyomja meg a
Kiválasztott függvény eltávolítása gombot. A függvényt eltávolítja a listából, és a tárolástól függően a megfelelő .pyfájlt törli a felhasználói profil mappából, vagy a Python függvényeket eltávolítja a projektfájlból.
Megjegyzés
Amikor egy projektfüggvényeket tartalmazó projektfájl bezárásra kerül, a benne lévő projektfüggvényeket a QGIS elfelejti, és a további munkamenetben már nem fognak rendelkezésre állni.
Példa
Íme egy rövid példa arra, hogyan hozhatja létre saját my_sum függvényét, amely két értékkel dolgozik.
from qgis.core import *
from qgis.gui import *
@qgsfunction(group='Custom', referenced_columns=[])
def my_sum(value1, value2):
"""
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
A @qgsfunction a következő argumentumokat fogadja el:
A
group='Custom'argumentum azt a csoportot jelöli, amelyben a függvénynek szerepelnie kell a Kifejezés párbeszédablakban.usesgeometry: állítsaTrue-ra, ha a kifejezésnek szüksége van az elemek geometriájához való hozzáférésre. Alapértelmezés szerintFalse.handlesnull: állítsaTrue-ra, ha a kifejezés kezeli a NULL értékeket. HaFalse(alapértelmezett), akkor az eredmény mindig NULL lesz, amint bármelyik paraméter NULL.referenced_columns: A függvény futtatásához szükséges attribútumnevek tömbje. Alapértelmezett értéke[QgsFeatureRequest.ALL_ATTRIBUTES]. A mezők egy részhalmazával vagy üres listával való használat gyorsabb végrehajtást eredményez.params_as_list: ÁllítsaTrue-ra, ha a függvény paramétereit listaként szeretné átadni. HaFalse(alapértelmezett), akkor a függvény a paramétereket egyedi argumentumokként kapja meg.
A függvény maga bármilyen számú és típusú paramétert elfogad, amelyet át szeretne adni a függvénynek. Ezeket a következő opcionális argumentumok előtt kell megadni:
feature: az aktuális elemparent: aQgsExpressionobjektumcontext: Ha van megadva az utolsó helyen egycontextnevű argumentum, akkor az aQgsExpressionContextobjektumot fogja tartalmazni, amely hozzáférést biztosít különböző kiegészítő információkhoz, például a kifejezésváltozókhoz. Pl.context.variable( 'layer_id' )
Ha ezek az argumentumok szerepelnek a függvény szignatúrájában, akkor automatikusan átadódnak a függvénynek, anélkül, hogy meg kellene adni őket a kifejezésben.
Az előző példafüggvény ezután kifejezésekben használható:
9.3. ábra A Kifejezések fülhöz hozzáadott egyéni függvény
További példákat és argumentumokat az egyéni függvényekhez a qgsfunction oldalon talál. Python kód létrehozásával kapcsolatos további információk a PyQGIS fejlesztői szakácskönyv alatt találhatók.

