Detta inlägg skrivs i princip i realtid. Med det menar jag att ”jag har en idé” som jag vill testa, men jag har ingen aning om det kommer att fungera. Jag tror det gör det, men vilka omvägar jag behöver gå för att lyckas det får vi se.
Det jag testar kommer jag att beskriva här och om jag kör fast, så kommer ni att få veta det också.
Min idé handlar om att stilsätta rasterdata med halvtonsfyllning, eller punkter i ett regelbundet mönster där storleken på punkten representerar värdet i rasterdata för positionen.
Mitt första försök är att skapa något som inte kräver att nya data behöver genereras.

Jag tror att jag kan nå bäst framgång med ett minneslager, men om det inte fungerar så har jag ytterligare ett alternativ att testa så här inledningsvis.

Med en geometrigenerator så är det inga problem att generera ett punktlager med regelbundna punkter i ett rutnät med ett intervall som kan styras av en variabel. Här spelar det stor roll vilket koordinatsystem som valts och vilken skala man använder. En förbättring kan vara att i stället ange önskat antal punkter i bredd eller höjd och räkna ut intervallet i uttrycket… Jag tror jag ändrar så det blir så.

Det var ju snabbt fixat. Nu blir det inte så stor skillnad på om det är projicerade eller oprojicerade data som används. Det kommer dock att bli skillnad när det gäller det som visas i kartfönstret och hur det ser ut i exempelvis en layout.
OK, nästa problem. Hur skall värdet för varje punkt hämtas från rasterlagret och omsättas till punktstorlek…
Det går inte att jobba med punktstilen, eftersom det bara är en multipunkt och inte flera individuella punkter. Hmm, kan man göra om detta med en ny geometrigenerator?
Nix, det verkar inte så. Mitt lager innehåller ju bara en enda punkt som platshållare för alla genererade punkter. För QGIS så verkar det bara vara denna första punkt (som måste vara innanför kartans gränser) som uttrycken refererar till.
Plan 2.
I stället för att generera punkter i det första uttrycket så kan man generera polygoner med en buffert…

Om jag helt enkelt klär på make_point(…) ett buffert-uttryck så kan jag skapa en rund polygon. Om @intervall som beräknats tidigare och är avståndet mellan punkterna används som grund så är värdet ”1” samma som 100% täckning och sedan är ett oändligt stort tal samma som 0%. Av praktiska skäl så tycker jag att ”10” räcker, vilket i princip är 1% täckning.
Om jag kan hämta värdet från rasterlagret för varje punkt så kan jag antagligen skala dessa värden mot detta intervall.

Jaha, det gick ju hur bra som helst! Bara man tänker efter i vilken ordning man skall arbeta med ett uttryck så kan man bygga på komplexiteten på ett sätt som kontinuerligt kan bekräftas stegvis. På så sätt så blir inte felsökningen övermäktig när man förr eller senare stöter på problem.
I det här fallet var det siffran ”5” från förra kodexemplet som skulle ersättas med ett värde som representeras av rastervärdet. Värdet hämtas med raster_value(…) och det skalas sedan med antingen en linjär eller som i det här fallet exponentiell funktion. Är rastervärden ganska jämnt fördelade så passar nog linjär metod bättre, men i det här fallet är höga värden betydligt mera sällsynta än låga. Det värde som hämtas skall sättas in i ett sammanhang och i skalningsuttrycket så får man ange vilken ”domän” värdet finns i. I det här fallet har jag anpassat domänen till de värden som syns i aktuellt kartfönster. Detta görs manuellt genom att redigera gränsvärdena i uttrycket. Om man använder en exponentiell skalningsmetod så behöver man ange ”exponent”, vilket inte behövs med linjär skalningsmetod. Exponenten och domänintervallet tillsammans med punkternas tilldelade värden kan man laborera med för att få till ett utseende som man tycker passar.
Beroende på utsträckning och framför allt hur många punkter man väljer att använda i bredd i uttrycket, gör att beräkningen av resultatet kan ta lite tid. Det måste som tidigare nämnts finnas en punkt i den kartvy som visas för att geometrigeneratorn skall fungera i alla lägen (annars finns det ju ingen geometri att generera något ifrån…).
Det här blev ytterligare ett exempel på hur kraftfullt QGIS faktiskt är för att realisera olika idéer. I andra GIS kan man vara beroende av att leverantören tänkt åt användaren och paketerat metoden i en fördefinierad stil. Geometrigeneratorn och kombinationen med uttrycksredigeraren på olika sätt och på olika platser i programmet är så otroligt kraftfullt att den som aldrig använt QGIS tidigare nog har svårt att förstå att något liknande ens skulle vara möjligt i ett GIS.
Eftersom jag nu lyckades med det jag var ute efter så behöver jag ju inte gå vidare. Jag hade dock lite andra idéer att ta till om det inte fungerade och det kan bli nästa steg för att lära mig mer om möjligheter och begränsningar om inte annat. Men det får det bli mer om en annan gång.