Menu
  • Hem
  • Dokument
  • Om Mig
Geosupportsystem

Varningar via XML

Posted on 2020-05-112020-05-09

Jag fick en fråga om hur man kan använda data från en XML källa på nätet till geodata i QGIS. Det praktiska exemplet var SMHI API för varningar.

https://www.smhi.se/data/utforskaren-oppna-data/varningar-api

Jag har ingen större erfarenhet av att jobba med API på det här sättet, så jag såg det som ett bra tillfälle att lära mig något nytt. Det finns säkerligen bättre och enklare sätt att göra detta på, så se det jag visar här som ett exempel.

För det första så finns det två datakällor. Dels via XML och dels via JSON. Jag valde att använda XML, men jag gissar att det skulle gått ungefär lika bra med JSON, även om metoderna skulle sett lite annorlunda ut.

Jag valde även att konvertera data från XML till QGIS manuellt och inte dynamiskt. Skriptet som jag skapar körs när jag vill, och det skapar en ögonblicksbild lokalt för aktuella varningar vid just det tillfället.

(Hela mitt skript finns via en länk sist i artikeln.)

import requests
import xml.etree.ElementTree as ET

Jag använder ”requests” för att hämta xml-data och ”xml.etree.ElementTree” för att läsa dessa.

smhi_layers = 'https://opendata-download-warnings.smhi.se/api/version/2/districtviews/all.xml'
root = ET.fromstring(requests.get(smhi_layers).text)

Datakällan hämtas och läses in i xml-trädet ”root”.

Skriptet skapar ett minneslager med lämpliga attribut genom att använda QgsVectorLayer() och addAttributes() från PyQGIS Developer Cookbook.

Jag använder root.findall() för att hitta de delar i xml-texten som jag är intresserad av och matar in dessa värden i attributtabellen med setAttributes().

Här var det ett litet problem i och med att de punkter som används i SMHI API har omvända latitud och longitudvärden. När jag läser in punkter eller polygoner som Well Known Text (WKT) så hamnar allt i trakten av persiska viken…

Om man är nöjd med detta så finns det ett processverktyg som enkelt vänder X och Y koordinater i ett lager. Detta finns bland verktygen för vektorgeometri i verktygspanelen. Verktyget kan dessutom köras direkt på ett befintligt lager utan att skapa nya, vilket kan underlätta.

Verktyget kan dock köras med python precis som alla andra processverktyg. Med några rader extra kod så kan jag därför använda swapXy() i skriptet för att få alla objekt på rätt plats.

Varningarna finns sedan i en egen xml-källa som används på liknande sätt med etree.ElementTree för att ”uppdatera” attributtabellen med de varningar som för tillfället finns.

Avslutningsvis så får man stilsätta lagret på ett passande sätt. Jag använder även ”Map Tips” för att visa mer detaljer när man håller muspekaren över ett objekt.

Skriptet kördes från pythonkonsolen medan jag utvecklade det, men det går att bygga om det till ett processverktyg om man skulle önska det, eller baka in i ett plugin…

Jag har valt att skapa ett processverktyg som inte har vare sig input- eller output-fält, utan så fort verktyget körs så läggs ett vektorlager till.

Du kan hämta skriptet via GitHub:

https://raw.githubusercontent.com/klakar/QGIS_resources/master/collections/Geosupportsystem/processing/scripts/smhi_varningar.py

Lägg sedan till skriptet i din tool-box.

Därefter hittar du verktyget bland dina skript.

Har du skapat motsvarande verktyg för QGIS? Varför inte dela med dig av dessa på samma sätt…

Har du ingen egen GitHub (eller motsvarande) så är jag övertygad om att det går att skicka skripten till QGIS Sverige så kan de lägga upp dessa på deras GitHub (GitHub/QGIS-Sverige).

Varför inte också passa på att bli medlem i föreningen, och därmed stötta QGIS projektet (bli medlem).

1 thought on “Varningar via XML”

  1. Karl-Magnus Jönsson skriver:
    2020-05-14 kl. 13:46

    Bra ide att samla processing-script på QGIS Sveriges GitHub. Har börjat titta på sådana script själv och de kan bli väldigt kraftfulla och flexibla.

    Svara

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Translate with Google

GBR In English
GER Auf Deutch
FRA En Français
ESP En Español
Swedish is a hard language for a machine to translate. Nuance and detail will likely be lost.
     

Bok om QGIS på Svenska

Bok

Beställ Boken/E-bok genom att klicka på bilden (även förhandsgranskning).

Senaste kommentarer

  • Gabriel om Punktmoln i QGIS 3.18
  • klakar om Punktmoln i QGIS 3.18
  • Gabriel om Punktmoln i QGIS 3.18
  • Hector Garrido om QGIS LTR vs LTR
  • Christian om Stildelning för QGIS

Arkiv

Prenumerera på Geosupportsystem

Skriv in namn och epost för att prenumerera på meddelanden från denna blogg.
Loading

geosupport

Ooops. Tryckte nog för många gånger på bestäl Ooops. Tryckte nog för många gånger på beställ-knappen...
GoPro foton (många), WebODM och sedan bearbetning GoPro foton (många), WebODM och sedan bearbetning i CloudCompare. Här en skärmdump med QGIS 3D.
Nu är ja såväl "dröraroperatör" som certifier Nu är ja såväl "dröraroperatör" som certifierad "drönarpilot". Nu är det bara kvar att märka och uppdatera alla farkoster.
Ladda mer...

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
©2021 Geosupportsystem | WordPress Theme by Superbthemes.com