Etikettarkiv | GeoJSON

JSON och GeoJSON

Några av er kanske använder GeoJSON för att lagra data, speciellt om ni har en hanterbar mängd vektordata som skall visualiseras på en webbkarta. I QGIS så går det exempelvis enkelt att spara ett vektorlager som GeoJSON genom att högerklicka på lagernamnet och välja ”Spara som…”. Men vad är GeoJSON egentligen?

Innan vi kommer till GeoJSON så får vi titta lite på vad JSON är (JavaScript Object Notation). Jag hämtar det mesta av informationen från json.org vilket är en mycket bra och informativ sida som förklarar uppbyggnaden av JSON på ett tydligt sätt. Läs mer…

Vektordata, men inte lokalt

I detta inlägg så tänkte jag visa att det går utmärkt att öppna vektordata som finns att hämta via URL på Internet. En del GIS program kräver ”riktiga” sökvägar till filerna och är då begränsade till OGC tjänster som WMS och WFS för att hämta exempelvis data i nära realtid. Men om man vill använda vektordata och symbolsätta i ett eget GIS-projekt och det inte finns någon WFS tjänst så har man problem.

För att exemplifiera så använder jag jordbävningsdata från US Geological Survey (USGS). På deras hemsida kan man bland annat hämta automatgenererade data i olika format och det som jag valt för detta exempel är GeoJson. http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php

På denna sida så tar jag och kopierar länken (högerklicka och ”kopiera länkadress”) till den senaste timmens alla jordskalv (länk).

Skärmbild från 2014-01-26 18:50:26

I QGIS så klickar jag på ”lägg till vektorlager” och klistrar in länken (bilden ovan). När jag sedan öppnar så kommer data att läggas till i QGIS, och om jag lägger till en världskarta i bakgrunden så blir det ganska tydligt var jordbävningarna ägt rum.

Skärmbild från 2014-01-26 18:54:15

Just när jag gjorde detta så fanns det bara jordbävningar längs USA:s västkust, men det kan snabbt ändras. Testa att panorera lite då och då eller klicka på uppdatera.

För att symbolsätta så öppnar jag tabellen och hittar genast några kolumner som är mer intressanta, i alla fall för mig.

  • mag
  • url
  • alert
  • title

Det går att ta med flera senare men dessa räcker till att börja med för att skapa lämpliga symboler. För det första skapar jag en enkel rund symbol kategoriserad efter attributet ”alert”. Just nu finns det bara redovisat jordbävningar utan värde i denna kolumn, men det går att lösa genom att lägga till dessa manuellt. Läser man lite på USGS hemsida så hittar man vad attributet betyder och vilka värden som förekommer.

Skärmbild från 2014-01-26 18:45:17

Det är således inte bara ”stora” skalv som hamnar här, men mer om det senare. Jag lägger till fyra klasser och ger dem värdena ”green”, ”yellow”, ”orange” och ”red”. Jag har tagit reda på att det är små bokstäver som gäller, men jag använder vanlig skrivning i etiketten.

Skärmbild från 2014-01-26 19:06:01

För att även visualisera magnituden så klickar jag på ”Avancerad” och väljer ”mag” som fält för ”storleksskalering” (bra ord…). Jag väljer även att ”skalera” diametern och inte arean. Nu kommer jordbävningar av magnitud 1 att bli så stora som jag angett i symbolen och jordbävningar magnitud 8, åtta gånger större.

Jag vill även ha med etiketter för de punkter som klassats med ”alert” enligt tidigare, så jag väljer att textsätta lagret med ett uttryck:

CASE WHEN "alert" <>'' THEN "title" END

Jag placerar även etiketten direkt på punkten och fixar lite med stilen så det ser snyggt ut. Sedan lägger jag till ett ”öppna” kommando för länkarna i url-attributet, så att det går att klicka på jordbävningar med knappen ”objektkommando” och öppna en kopplad hemsida.

Skärmbild från 2014-01-26 19:17:57

Avslutningsvis så sparar jag stilen i QGIS format, så jag kan återanvända den lite senare.

Eftersom det inte finns något siginifikant i mina data så hämtar jag och lägger till länken till ”Significant Earthquakes” de senaste 30 dagarna (länk).

När lagret är på plats så ”läser jag in” den sparade stilen och testar.

Jordbävningar 20140126

Sådär, då har jag ett QGIS projekt som bara väntar på en ordentlig jordbävning så att jag enkelt kan visa var och hur omfattande för alla i min närhet.

Nää, jag skojar bara. Jag hoppas jag aldrig behöver just denna karta, men kunskapen tar jag med mig till nya experiment.

Visualisera mera!

Då var det dags för det första gästinlägget på bloggen. Det är Kristian Bergstrand (GIS-ingenjör inom Helsingborgs stad) som skrivit det och det handlar om statistik, QGIS och visualisering genom webbtjänster. Med andra ord precis sådant som brukar avhandlas på dessa sidor. Jag ser själv fram emot att testa det som beskrivs. Kristian har nu öppnat dörren för fler gästinlägg och har du en idé så skriv ned din text, infoga länkar till eventuella bilder och andra sidor. Du kan använda kursiv och fet text och om du vill ha ytterligare formatteringar så beskriver du det i texten också. Maila underlaget till mig så hör jag av mig. Nu över till gästinlägget…

Som inbiten kalenderbitare är det förstås julafton de gånger Statistiska centralbyrån (SCB) släpper färsk och spännande statistik. Häromdagen publicerade SCB uppgifter kring hushållen i Sverige – intressant läsning! Vill en fördjupa sig och få fatt i kommunvis statistik, går det att ladda hem detta som t.ex. kalkylblad eller csv-filer. I längden är dock stora textfiler med statistik tröttande och svåra att överblicka – så varför inte använda en webbaserad kartlösning som informationsbärare!?

Som nämndes ovan går det att ladda hem en uppsjö av olika dataset kring hushållen i Sverige (botanisera själva här: LÄNK). Här valdes dock en avgränsning till data över andel singelhushåll av totala antalet hushåll, per kommun, och jag laddade hem datan som csv-fil (jfr bild nedan). Filen bearbetade jag därefter något i OpenOffice (http://www.openoffice.org); i huvudsak bildade jag två kolumner för kommun respektive kommunkod istället för en sammanslagen kolumn.

I nästa steg laddade jag hem geometrin för Sveriges kommuner som shape-fil (t.ex. tillgängligt här: ArcGIS.com). I QGIS öppnade jag shapefilen (add vector layer) och statistikdatan (add delimited text layer). Därefter slog jag samman datan från SCB (utan geometri) med shapefilen (med geometrin), genom att högerklicka på shapefilen, välja properties, välja join och slutligen välja vilka attribut som ska användas för sammanslagningen (jfr bild nedan). Innan jag stänger QGIS sparar jag mitt lager som geoJSON, för att enkelt kunna konsumera det i den kartapplikation jag ska skapa härnäst.

Kartapplikationen blir leaflet (leafletjs.com), som är ett snabbt, flexibelt och bra dokumenterat javascript-bibliotek för webbkartor. Jag har redan mitt förgrundsskikt klart (i form av geoJSON-lagret ovan) och kan ägna mig åt bakgrundskartan. Jag vill ha en bakgrundskarta som är diskret, gråskalad och sober vilket framhäver förgrundsskiktet bättre. Genom ett kostnadsfritt konto på MapBox (mapbox.com), ges tillgång till en rad avancerade designverktyg för att skapa en unik bakgrundskarta som bygger på OpenStreetMap (osm.org). När jag känner mig nöjd (se bild nedan), nyttjar jag deras hosting av bakgrundslagret, som jag sedan kan konsumera i min kartapplikation.

Återstår att sy samman allt med html och javascript, där jag får en hel del gratis genom exempel på webbplatsen för leaflet. Bland annat använder jag ColorBrewer, för att tematisera mitt förgrundslager.

Sammanfattningsvis skapades en interaktiv webbkarta (http://kartor.helsingborg.se/hushall) med hjälp av kommunvisa data från SCB, kommunytor från SCB samt några fritt tillgängliga verktyg för geografisk IT. Webbkartan visualiserar andelen singelhushåll i respektive kommun i Sverige. Nästa steg – för mig eller någon annan – är att skapa mer tillgänglig information utifrån öppna data och program!

GeoJSON

För inte så länge sedan så började begreppet GeoJSON dyka upp i min intressevärld, inget nytt i sig, men vad sjutton är det för något?

Kortfattat är GeoJSON ett öppet filformat för geografiska objekt baserat på JavaScript Object Notation (därav JSON). Det är dock inte ett format framtaget av Open Geospatial Consortium – OGC utan av en arbetsgrupp med utvecklare (http://geojson.org).

Stödet för formatet är omfattande och inkluderar GeoServer, OpenLayers, Leaflet, QGIS, GDAL, m.fl. Det går även att läsa formatet via API i tjänster som Google, Bing och Yahoo Maps. Också kommersiella mjukvaror som SAFE FME och ESRI ArcGIS* har inkluderat stöd för formatet.

Det som är lite annorlunda med GeoJSON, jämfört med exempelvis ESRI shape, är att det är en fil och inte många, samt att filen kan hantera flera typer av geometrier. Det går således att ha både punkter, linjer och ytor i samma fil, om man nu skulle vilja det.

Det vanligaste användningsområdet är just i webbkartor, och även om det går så är det inte praktiskt att använda formatet i exempelvis QGIS för att redigera data. Det går nämligen inte. För att redigera GeoJSON data så måste de först konverteras till exempelvis shape och efter redigeringen konverteras tillbaka. Nu är detta inte unikt för GeoJSON utan så fungerar till exempel även KML och GML.

Uppbyggnaden av filerna är enkel och ett exempel finns på Wikipedia (här).

Nu vet du lite mer om GeoJSON, men huruvida du vill använda det får du själv avgöra.

*) Än så länge inte fullständigt i ArcGIS utan via tillägg från deras GitHub, men från 10.2 skall formatet kunna hanteras på samma sätt som andra format.