Jag satt och kikade på geometrigeneratorn i QGIS och hade lite problem att få kombinationer av stilar att fungera utan att krascha QGIS. En av lösningarna var att bygga buffertlagret virtuellt i stället.
Då slog det mig att jag kanske skulle testa vilket som går snabbast i QGIS. Buffert i ett virtuellt lager, eller buffert med geometrigeneratorn?
Det skall vara ett lager av godtycklig typ så jag väljer ett polygonlager från lantmäteriets öppna data lagrat i ett GeoPackage.
Virtuella lager skapas i ”Lägg till datakällor” och i det här fallet skapar jag ett uttryck som pekar på my lagret.
select st_buffer(geometry, -20) from my
Det var här en sak blev uppenbar. Det tar lååång tid att skapa ett virtuellt lager när varje geometri i lagret först måste beräknas och läggas i minnet.
Inte nog med att det tog lång tid, när jag jämförde med geometrigeneratorns buffer så var det inte ens i närheten av en rättvis kamp (dessutom kraschade QGIS hela tiden*).
När väl båda lagren renderas (virtuellt lager till vänster och geometrigeneratorn till höger) så är det vad jag kan se ingen som helst skillnad i resultatet. Den stora skillnaden är snabbheten. Det är inte praktiskt hanterbart att jobba med virtuella lager av den här typen.
Det blir en helt annan sak när jag väljer ett linjelager med färre objekt. Då går det till synes precis lika snabbt med såväl virtuella lager som med geometrigeneratorn. När jag utökar försöken så verkar det finnas en gräns för när det blir märkbart långsammare med virtuella lager. Objekt med färre än några tusen brytpunkter går snabbt, men när man passerar 20’000 så börjar det bli påtagligt.
Det handlar inte om att den ena metoden är tekniskt snabbare än den andra, utan om i vilken omfattning de tillämpas. Geometrigeneratorn tillämpas på det som skall renderas, det vill säga bara det som skall ritas ut, medan virtuella lager alltid beräknas i sin helhet. En jämförelse mellan de olika metoderna kan därför bara göras om allt i geometrigeneratorn renderas, det vill säga allt syns på skärmen.
Polygoner: virt-1m09s, geom-0m56s
Linjer: virt-0m11s, geom-0m09s
Punkter: virt-4m29s , geom-3m17s (gigantiskt lager)
Nu blir det mindre skillnader, men geometrigeneratorns buffer är något snabbare hela tiden.
Som jämförelse så testar jag även att skapa ett buffertlager med processverktygen. Det tar ungefär 3 minuter att skapa ett buffertlager av punkterna ovan, men att sedan rita ut lagret på skärmen tar bara 16 sekunder!
Den här fördelen försvinner gentemot geometrigeneratorn ju mer man zoomar in. När det är färre punkter som skall ritas ut så är geometrigeneratorn faktiskt snabbare än det buffrade lagret.
Slutsatser
I den mån man kan dra några slutsatser så är det att du kan välja virtuella lager för att skapa ett buffertlager om det är väldigt litet, med få objekt. Om det är ett större lager och du bara normalt visar delar av datamängden samtidigt så fungerar geometrigeneratorn bättre. I alla andra fall så är det i längden bäst att skapa ett buffertlager med nya data, så länge man inte som regel är väldigt inzoomad. Då är geometrigeneratorn alltid snabbast!
Man får inte glömma fördelarna med geometrigeneratorn/virtuella lager, men det är bra att känna till begränsningarna som är förknippade med dessa.
Virtuella lager har säkert andra fördelar, men för att skapa ett lager med buffertar är det inte det bästa alternativet.
*QGIS kraschar
Jag är inte riktigt nöjd med stabiliteten i QGIS för närvarande! Jag experimenterar en hel del så krascher förekommer, men det har varit lite väl vanligt med 3.0 och 3.2. Det som framför allt är oroande är att det är totalkrascher utan att dessa fångas upp av kraschhanteraren. Det är inte helt lätt att felsöka när man inte har en enda indikation på vad som gick fel. När man startar QGIS från terminalen så får man viss information, men det är bara delvis hjälpsamt.
Ett annat problem är att jag jobbar med QGIS på Linux vilket kan leda till problem som inte kan återskapas av andra som använder Windows. Man kan tycka att jag skulle testa på Windows i stället, men det löser ju inte problemet, och jag vägrar använda Windows när jag har ett val. Sedan är det ju inte så att allt är problemfritt för att man använder QGIS på Windows.
Jag försöker felsöka så långt det går och rapportera de problem jag någorlunda konsekvent kan återskapa, men detta tar tid som jag inte riktigt har. I en del fall så blir det tyvärr bara att jag struntar i problemet och försöker hitta en annan väg att lösa uppgiften.
Sammantaget så är jag väldigt nöjd med QGIS 3 generellt, men det är inte så stabilt när man som jag vill testa gränserna och komplicera saker och ting. Detta kommer förhoppningsvis att lösa sig så småningom, men för mig så känns det lite överväldigande just nu. Jag vet inte riktigt var jag skall börja…
Jag kanske skall ta ett inlägg om hur jag rapporterar en av mina favoritkrascher i morgon?
[UPPDATERING]
De krascher jag upplever som har med geometrigeneratorn att göra verkar bli fixade i och med https://github.com/qgis/QGIS/pull/7355
Att rapportera buggar hjälper med andra ord. Häng med i morgon så visar jag hur jag jobbade med att rapportera just den här buggen.