Det är många som påverkar utvecklingen av QGIS på olika sätt. Beroende på vad du jobbar med så kan det vara olika grupper och personer som har mest påverkan på ditt arbetsflöde. En av de som påverkar mitt arbetsflöde mest är Nyall Dawson (North-Road).
När jag gjorde min stil med lite ”ruffare” utseende (artikel), så letade jag också efter ett sätt att skapa alternativa övergångar från land till djupare vatten, där jag mer eller mindre ”nöjde” mig med den rasterbildsfyllning i kombination med gradientformfyllning och blandnignseffekter. Nu har Nyall visat hur jag skulle kunnat ha gjort för att komma närmare det jag ville uppnå från början, med en ”prickstil”.
För att bara snabbt visa hur det såg ut i min karta från tidigare så framgår det av bilden nedan.
Detta är inte alls ”fult”, men som sagt inte riktigt vad jag ville från början. Med hjälp av Nyalls tips så skall jag försöka åstadkomma det jag strävade efter.
För att få prickarna att spridas åt båda hållen för linjen, så har jag modifierat Nyalls uttryck något.
concat('0,',array_get(array(-1,1),rand(0,1))*5*randf(0,1) ^ 3)
Uttrycket används som ”offset” för en ”Simple Marker” för en ”Marker Line”…
Det som gör att allt fungerar är att man skapar en markörlinje med väldigt litet intervall. Det intervall man väljer påverkar hur ”tätt” det blir mellan punkterna i resultatet. Detta värde kan man därmed använda för att justera ”tätheten”.
Under inställningarna för ”Simple Marker” så är det de datadefinierade åsidosättningarna för ”Offset” som används för uttrycket tidigare. Uttrycket genererar en textsträng med två värden i en ”lista”. Det första värdet är vertikal offset, det vill säga längs linjen, och är alltid ”0”. Det andra värdet slumpas och positiva värden hamnar till ”höger” och negativa värden till ”vänster”.
Då jag använder QGIS 3 så har jag använt ”array” funktionerna för att även slumpa om värdet är positivt eller negativt, för att därmed slippa göra två lager, ett för vänster och ett för höger. Om du använder QGIS 2.18 så kan du använda två markörlinjer och följande två uttryck (ett för varje markörlinje).
concat('0,', 5*randf(0,1) ^ 3) concat('0,-', 5*randf(0,1) ^ 3)
Skillnaden mellan dessa är ett minustecken…
Det övriga uttrycket har en slumpmässig komponent och en spridningskomponent. Multiplikatorn (5) styr spridningsbredden generellt, och exponenten (3) styr hur snabbt tätheten tunnas ut. Jag tycker att ”3” är lite för lite i vissa sammanhang, så jag använder ”5” i stället.
Jag kommer heller inte att behöva sprida åt båda hållen, utan jag vill bara ha spridning ”inåt” i mina sjöar. Vi får se hur den viljan stämmer med vänster och höger…
Men först. Det finns ett problem med metoden.
När linjen byter riktning så sker ett överlapp, eller glapp, mellan spridningarna som sker vinkelrät mot linjen. Det som framför allt är ett problem är när det blir tomt vid ytterhörn. Genom att även lägga till ett slumpmässigt värde för spridning vertikalt längs linjen, så kan man täppa igen detta.
I bilden ovan har jag ett uttryck bestående av två slumpmässiga komponenter, först längs linjen, som är både positiv och negativ för att minska en annan effekt, nämligen att punkterna tenderar att spridas i linjernas förlängning. Den andra delen är enbart positiv och sprider därmed punkterna enbart på en sida av linjen.
Tyvärr innebär detta ännu ett problem, nämligen när linjen böjs åt andra hållet, så kommer vissa punkter att spridas till ”fel” sida. Detta kan jag hantera genom att placera lagret under ett lager som ”täcker” de punkter som hamnar fel.
Så, hur blev det då?
Riktigt bra om jag får säga det själv. Jag har lagt till lite opacitet och använder en gradientformfyllning från förra artikeln också för att få lite bättre kontroll på spridningen.