Ett rutmönster i ”hex” form är ganska enkelt att skapa i QGIS, men hur gör man för att variera dessa i storlek, färg, med mera baserat på värde i andra data?
Man kan skapa ett sådant mönster på lite olika sätt. Det går att skapa ett punktmönster och använda hex-symboler som markörer, men där behöver man räkna lite för att få till rätt avstånd och storlek på symboler.
Mönstret är förskjutet varannan rad, i exemplet ovan med 1.5 * X. Avståndet i sida mellan symboler på samma höjd är 3 X. När man väger in förskjutningen på varannan rad så är radavståndet cos(30°)*X. Det är således ”bara” att bestämma vad ”X” är, så går det att räkna ut vilka värden man skall ställa in för sitt mönster.
Det finns en hex-markör som kan användas, men den är orienterad på ett annat sätt än här, så man får rotera den markören 90°. Storleken är heller inte speciellt exakt, så där får man justera lite manuellt.
Men här tar denna metod i praktiken stopp.
Javisst, jag har ett hex-mönster, men det är inte ”geometrier”. Varje markör är bara en symbol och den enda geometri som finns är den polygon som man stilsatt med punktmönsterfyllningen. Det går därför inte att ”hämta” värden för varje markör från ett annat lager, eftersom QGIS inte vet vilka koordinater markörerna har.
Då får det bli geometrigeneratorer i stället.
Jag har tidigare skapat stilar som genererar ett geometriskt mönster som blivit grund för punkter och linjer där värden hämtats från ett rasterlager.
Det går så klart att skapa en geometrigenerator som skapar hex-polygoner i ett mönster, som dessutom kan hämta värden från ett rasterlager, men denna blir lite mer komplicerad…
Jag bryr mig inte om att här gå igenom koden för stilen, men jag laddar upp den till QGIS stil-hub (https://plugins.qgis.org) så kan du själv kika på koden om du är intresserad.
Jag har lagt ett antal variabler i början på koden, så att det går att göra lite justeringar och anpassningar, utan att riskera att ställa till det för mycket. För att fungera så behöver stilen en geometri att utgå ifrån. För varje geometri som finns i kartan så kommer generatorn att köras. Det blir därför mindre bra att applicera stilen på ett befintligt lager som innehåller mängder av objekt (långsamt och riskerar att hänga QGIS). Skapa i stället ett polygonlager med en enda gigantisk polygon över det område som är aktuellt, ju större desto bättre. Dessutom så gäller det att alla koordinater är i samma system. Projekt, polygonlager och raster.
Med den här metoden så går det däremot inte att bygga in en färgändring för symbolerna baserat på ett annat värde. Och nu är nog möjligheterna med dynamiska stilar i QGIS uttömda för närvarande (QGIS 3.22). Nästa steg innebär att nya data behöver genereras.
Börja med att välja ett ”studieområde” och generera därefter ett rutnät i hex-form.
Detta mönster kan användas som ”referens” och bakgrund, men är inte det lager som skall användas för den variabla storleksändringen. Det finns möjlighet att använda lagret med ytterligare en massa formler och geometrigeneratorer, men jag tänkte undvika det i det här exemplet, när det ändå skapas nya data.
Generera i stället ett nytt punktlager baserat på hex-polygonernas centroider.
Dessa punkter kan sedan användas med en hex-markör roterad 90° enligt bilden ovan. Storlek och färg kan nu styras betydligt enklare med antingen ett attributvärde som kan genereras i lagrets attributtabell, eller så kan betydligt enklare uttryck användas för att hämta värden från olika rasterlager.
Det går att använda ”assistenten” för att hämta och skala värden från ett uttryck som läser ”raster_value(…)” från ett namngivet lager. En enda funktion i stället för en komplicerad geometrigenerator kan vara mer tillgänglig för många.
Samma funktion kan användas med assistenten för att justera färger, och det är inget som säger att du behöver använda samma rasterkälla som för storleken.
Så, om du ser ett behov av att bygga kartor som visar lite olika värden i ett hex-mönster på det här viset, så kan du göra det. Är det bara storlek som är intressant och du inte vill skapa nya data så kan du hämta min ”Scaling Hex Pattern” stil, men du kan även generera mönster och bygga dessa manuellt med de inbyggda funktionerna lite enklare.