Publicerad den Lämna en kommentar

Lek med geometrigeneratorn

Jag satt och kikade på ”kartogram” i en bok, där man förvränger formen på geometrier för att representera exempelvis befolkningstäthet. Att gå hela vägen med detta är lite väl överkurs för mig, men det borde gå att använda geometrigeneratorn för att skapa geometrier som representerar såväl positioner som värden i attribut.

Kartogram på Wikipedia: https://en.wikipedia.org/wiki/Cartogram

När jag testar använder jag Sveriges kommuner som exempel. Då jag inte har något bra lager med exempelvis befolkning så använder jag ytan ($area), men det går att använda vilken datakälla som helst.

Det första blir att definiera ett nytt centrum för varje polygon.

Det kan göras med centroid() eller pole_of_inaccessability().

Skärmklipp från 2018-09-28 15:36:38.png

Det är marginell skillnad på dessa i det här fallet och centroid är lite enklare att använda så jag väljer den.

Jag skulle kunna använda ”buffer” för att skapa en cirkel där ”värdet” används för radien, men jag vill använda mer komplexa former längre fram så jag börjar med att testa make_circle().

Skärmklipp från 2018-09-28 15:41:07.png

När jag kör med $area som variabel för cirkelradien (make_circle(centroid($geometry),$area/10000000)) så blir det uppenbart att jag har lite för stora variationer i mitt värde. Jag skalar i stället om värdet exponentiellt och leker lite med variablerna för att hitta något som ser ok ut.

make_circle( centroid($geometry), scale_exp($area/200000000,0,105,5000,40000,1)
)

Nästa test blir att skapa fyrkanter i stället för cirklar. Dessa måste byggas upp punkt för punkt till en linje, som i sin tur blir en polygon. Med värdet för radie ovan kan detta göras med en skapligt enkel funktion i uttrycksbyggaren.

with_variable( 'r', scale_exp($area/200000000,0,105,5000,40000,1), make_polygon( make_line( make_point(x($geometry)-@r,y($geometry)-@r), make_point(x($geometry)+@r,y($geometry)-@r), make_point(x($geometry)+@r,y($geometry)+@r), make_point(x($geometry)-@r,y($geometry)+@r) ) )
)

Kvadratens fyra punkter skapas med utgångspunkt i centroidens x och y. För varje punkt ändras sedan x och y på olika sätt med det definierade värdet för @r.

Funktionen with_variable() är nog en av mina nya favoriter i uttrycksbyggaren.

Skärmklipp från 2018-09-28 16:03:01.png

Om jag inte är nöjd med resultatet så behöver jag inte ändra inställningarna för varje skapad punkt i fyrkanten, utan det räcker att ändra det beräknade värdet för variabeln.

Har jag nu ett fältvärde jag vill använda som bas för storleken på mina kvadrater så kan jag använda samma geometrigenerator och bara ändra definitionen av variabeln. Det skulle kunna vara ”BEFOLKNING”, ”Invånare_per_km2” eller vad som helst egentligen. Så länge resultatet blir ett lagom stort längdmått för halva kvadratens sida.

Om man plockar fram ett rutat papper och funderar lite så kan man säkert bygga upp mer komplicerade geometrier än såhär också. Varför inte en stjärna, hexagon, diamant…

Nyhet från Geosupportsystem , orginal inlägg

Lämna ett svar