Via Twitter dök det upp en fråga i mitt flöde, huruvida det gick att skapa en specifik karta i QGIS.
Frågan fick mig att fundera över om man inte kunde använda plugin-funktionen DataPlotly för att bygga upp en karta med denna typ av funktion. Och javisst gick det! I detta inlägg tänkte jag visa hur jag gjorde.
Data om jordbävningar kan man hämta från flera källor och här och nu så hämtar jag data för alla skalv globalt de senaste 30 dagarna från https://earthquake.usgs.gov/.
Data väljs ut och sparas som GeoJSON som direkt kan öppnas i QGIS.
Som test så använder jag en enkel världskarta (skriv bara ”world” i fältet för koordinater och tryck enter). Projektionen är pseudo mercator. Punkterna stilsätts med assistentens hjälp exponentiellt utifrån magnituden. Färgerna representerar om det utfärdades en automatisk tsunamivarning eller ej.
För att skapa mina diagram så kommer jag dels att använda magnituden och i brist på djupdata, attributet ”sig” som jag inte riktigt vet vad det betyder.
Innan jag ger mig in och skapar diagrammen så väljer jag ut mitt område för kartan. Detta gör jag i ”Layout” och i mitt fall så blir det ungefär samma som i bilden ovan, men även lite längre norrut. Det är viktigt att välja studieområdet nu, eftersom jag behöver välja ut de jordbävningar som skall användas för att skapa diagrammet, och då vill jag bara ha med de som faktiskt kommer att synas på kartan.
Sedan följer lite experimenterande för att skapa stora diagram i HTML (visas i den breda webbläsaren nederst). Det första diagrammet består av Y-koordinaten i det valda koordinatsystemet på x axeln, och magnituden på y axeln. Jag har valt att rita ut Y koordinaten liggande på x axeln eftersom min skärm är störst på bredden och den resulterande bilden får högst upplösning på det viset. Om det inte är viktigt så kan du justera det vertikalt i stället, men jag kommer att behöva ”vrida” den här bilden i layouten.
Uttrycket för att plocka fram Y-koordinaterna från de lagrade lat/long värdena ser ut enligt följande:
y(transform( $geometry,'EPSG:4326','EPSG:3857'))
Storleken på punkterna och färgerna väljs antingen manuellt eller med uttryck. Det är inte lika enkelt som att använda assistenten i QGIS och jag måste också kompensera för att mitt diagram är så mycket större än kartan.
När jag är nöjd i webbläsaren så tar jag helt enkelt en skärmdump över det område som jag är intresserad av. Det finns en inbyggd funktion för att spara till bild, men denna ger en väldigt lågupplöst png-bild.
Sedan är det bara att upprepa för det andra diagrammet och då är det en beräkning av X koordinaten som är av intresse och mitt okända värde ”sig”.
I layouten lägger jag till de båda bilderna, den första roterad 90 grader.
I Layouten så kan man sedan använda hjälplinjer för att justera in storleken på bilderna så att dessa stämmer med positionen på kartan. Jag har även använt mig av koordinaternas rutnät då dessa i det här fallet sammanföll med diagrammet.
Lägg till texter som förklaring och gradering av skalor, så att dessa har samma storlek. Jag använder alltså inte texter från diagrammet då dessa är felorienterade eller med lite avvikande storlek.
En del av diagrammen täcker jag med vita polygoner och när allt är klart kan jag lägga till texter, ramar, med mera för att göra layouten klar.
Jag passade även på att den här gången göra ytterligare ett diagram för magnitud och ”sig”, som jag lade till nere till vänster. Det ser ut att finnas en viss samstämmighet mellan dessa båda värden…
Det största problemet just nu är att få till bilder för layouten med tillräckligt hög upplösning, utan att det skall bli krångligt att hantera storlekar på symboler och liknande. Dessutom så är rasterbilderna ganska trubbiga när det gäller stilsättning och liknande, och jag hade föredragit att kunna exportera ett genererat diagram som SVG.
Nu finns det planer på att bygga in stöd för layouter i kommande versioner av DataPlotly, men exakt hur detta kommer att se ut får vi se. Det kan exempelvis bli tal om en ny ”fund raising” kampanj för att finansiera ett sådant arbete.
Sedan är det ju inte bara spridningsdiagram av den typ jag använt här som går att använda tillsammans med en karta. Om man kan ”summera” förekomster horisontellt eller vertikalt så blir det även lämpligt att använda exempelvis stapeldiagram och liknande för att visualisera olika förekomster, eller spridningar vertikalt och horisontellt.
Det här vara bara ett experiment, för att se om det går att skapa något som efterfrågades. Svaret är ”ja”, men det kan bli bättre. Om det blir det får vi se när planerna för DataPlotly dyker upp om ett tag.
Förstår inte vad det är som efterfrågas. Det går väl att göra på motsvarande sätt genom att koppla objekt (jordbävningar) med diagram i lageregenskaper?
Nåväl, jag har en annan fråga, kanske en bugg i QGIS3.4.
Jag vill göra pajdiagram på ett antal polygoner med en massa data. Data ska räknas om till % i varje kolumn, d.v.s kolumnA/sum(kolumnA)*100. Syntax funkar när jag skapar nya fält i fältkalkylatorn, men inte när jag skriver in det i pajdiagramets attributfält. Vad tror du?
Uppskattar dina manualer och tips! Skriver just nu en handledning för arkeologer och refererar bl.a. till din sida. Jag ska skicka när vi (2) är klara.
Diagram i lageregenskaperna skapar endast diagram i kartan, kopplat till varje objekt. Detta dessutom enbart i form av paj- eller stapeldiagram. De scatter-plots som jag använder här går inte att skapa i lageregenskaperna.
När det gäller paj-diagram så förstår jag inte varför något skall räknas om i procent av totalantalet. Varje objekt får ju ett eget pajdiagram, där diagrammet representerar 100%, och de attribut du pekar ut utgör med sina värde de andelar av dessa 100% som de representerar. Det kan ju vara så att du vill ”harmonisera” värden till en jämförbar skala och då är det i och för sig tänkbart att använda procent, men det känns lite långsökt att göra detta till en funktion av totalsumman för alla objekt (kanske beror på tillämpningen).
När jag lägger till ett uttryck i inställningarna för pajdiagram som gör en form av uträkning så fungerar detta utan problem… men sum(f) verkar fungera dåligt. Jag är inte säker på att funktioner av denna typ kan fungera i dessa ”live” sammanhang. Om du tycker att det är en bugg eller en feature som du saknar så kan du rapportera detta till projektet.