Verktyg för att beräkna, visa och åtgärda saker i OSM utifrån öppna data

Så, har nog kommit till punkten där jag måste sluta göra “bara en grej till” och faktiskt få ut det för att få in lite kommentarer (och förhoppningsvis användning!).

Jag har i några månader nu pysslat med ett system för att:

  1. Hämta öppna data från diverse källor
  2. Jämföra med OSM
  3. Ta fram avvikelser som kan behöva åtgärdas i OSM
  4. Presentera avvikelserna på ett sett som gör det möjligt att titta på dem och vid behov åtgärda i OSM

Vill man inte läsa mer kan man besöka webbappen direkt här: osm-bjk.jandal.se (BJK står för BästaJävlaKartan, för det är vad OSM borde bli :wink: )

Det tekniska för den som är intresserad

Systemet är uppdelat i tre delar

Databas

En PostgreSQL+PostGIS-databas som lagrar aktuellt OSM-data, hämtat data från olika källor samt avvikelserna, plus lite metadata för att kunna presentera det hela snyggt och sorterat för användaren.

Framför databasen sitter ett API (i form av PostgREST, som tar databasen som den är och automatiskt ger ett REST API), samt även en vectortiletjänst (pg_tileserv).

Processhantering

Airflow (ett system som hanterar olika körningar/processer) tillsammans med olika processer, skrivna i Python.

Varje process har ett syfte, t.ex. hämta en viss datamängd eller beräkna avvikelser enligt en viss algoritm.

Webbsida

En webbapp skriven i TypeScript & React, med Mantine som UI-ramverk, OpenLayers för kartor, m.m.

Infrastruktur

Koden finns på Github, men p.g.a. datamängderna rekommenderar jag ingen att försöka sätta upp det hela själv. Vill man bidra så går det dock lätt att jobba på frontend, och nya hämtningsrutiner eller avvikelse-algoritmer kan jag bistå med mindre uttag av datat så att det blir hanterligt.

Allt körs på en server i Kubernetes (mest för att jag ville lära mig det) bakom Cloudflare.

Beräkning av avvikelser

Hela projektet är ganska SQL-tungt; och för stunden beräknas alla avvikelser genom databasvyer. Det har sina fördelar, men kommer nog inte försöka implementera alla avvikelser i SQL, utan kan även komma att bli några i Python.

Gränssnittet

När man först kommer in på sidan möts man av en karta över alla avvikelser som systemet hittat (24 300 i skrivande stund). Här kan man även filtrera avvikelserna utifrån datakälla, kommun, företeelsetyp (t.ex. byggnad, badplats, m.m.) och typ, samt ladda ner filtreringsresultatet som osmChange-fil eller öppna det direkt i JOSM (funkar inte riktigt än).

Klickar man på en avvikelse kommer man till dess sida, där man får mer information; vad är det som avviker, vilka taggar föreslås att läggas till/ändras, vart kommer datat som använts för att beräkna avvikelsen ifrån, etc. Även andra närliggande avvikelser visas här (som rosa kryss i kartan samt i listan till vänster) för att lättare kunna avgöra om det kanske blivit något fel där många avvikelser ligger nära varandra. Här finns länkar för att öppna avvikelsen i iD eller JOSM (för det senare följer även de föreslagna taggarna med direkt).

Vill man få en översikt över alla kommuner kan man gå in på Kommunvis / Tabell, där man får upp en tabell över alla kommuner och företeelsetyperna och kan se vart det finns många avvikelser. Här visas även bl.a. när en viss företeelsetyp senast kontrollerats av någon (just nu är det bara innehållet från wikin för NVDB-importen, men jag har planer för att utveckla det mer i framtiden).

Gillar man kartor (dum fråga) så kan man gå in på Kommunvis / Karta, och får då samma information fast på en karta istället (och kan då välja lite olika sätt att visualisera på).

En lista över alla datakällor som hämtats finns under Datakällor, inga jättespännade saker här men kan vara intressant att se lite vad som hämtats redan. Notera dock att det är långt mer data som hämtats än vad jag hunnit skriva algoritmer för att beräkna avvikelser för.

Sist så finns en sida för att visa status över de olika processerna, Systemstatus. Utöver att se när de senast körts kan man här även manuellt trigga dem; användbart t.ex. om man precis gått igenom och åtgärdat en massa och vill få det uppdaterat i systemet. För att köra en process klickar man på dess ikon.

Aktuell status

Utöver den grundläggande funktionaliteten så finns just nu:

  • Hämtning från Gävle kommun, SCB (Förskolor och Myndighetskontor) och Skolverket (Skolenhetsregistret)
  • Avvikelser för 12 datamängder

Framtidsplaner/Roadmap

Integration med MapRoulette. Initiallt var tanken att ha något liknande (men enklare), finns lite spår av det kvar, men kom till slut fram till att det blir bättre att integrera med ett etablerat verktyg. Stötte dock på lite problem där och väntar på svar från utvecklaren, han skulle återkomma till veckan.

Fler datamängder. Säger sig självt, finns fortfarande en hel del kvar. För många (speciellt många intressanta) behövs dock även lite “mjukt” arbete, d.v.s. kontakt med myndigheten för att t.ex. få tillåtelse att använda CC-BY data. Här får man jättegärna hjälpa till!

Fler avvikelser. Säger sig också självt. Speciellt intressant blir det att börja beräkna avvikelser för annat än punktobjekt (som såklart är enklast).

Bättre infrastruktur. Just nu körs det på en server jag har stående i en lokal, det är en ganska gammal burk (enbart HDD, inga SSD) och den kör även diverse andra grejer. Skulle gärna flytta allt till en bättre server (men det kostar såklart). Även lite grejer som backup m.m. saknas.

Småfix, t.ex. anpassning till mindre skärmar (mobiler), bättre dokumentation, flerspråkigt gränssnitt, m.m.

Nästan viktigast, men det hela skulle behöva dokumenteras på wikin. Jag tror inte det faller under importreglerna till 100% (eftersom systemet är ganska tydligt med att det bara är indikationer, man ska fortfarande titta på varje objekt för sig manuellt), men för att allt ska vara helt grönt vore det nog bra att ändå dokumentera det enligt importreglerna så att ingen blir sur.

Sen har jag även lite långsiktiga planer. Som jag nämnde ovan finns det stöd i gränssnittet för att visa när en viss företeelsetyp senast kontrollerats av någon, detta skulle jag gärna bygga vidare på då jag tror det finns potential för ett sådant verktyg i OSM, där man när man t.ex. gått igenom lokaltrafiken i ett område kan “klarmarkera” det, så att nästa ser hur länge sedan det gjordes och därmed kan fokusera energin på det som ger mest värde. Men det är ännu bara grova idéer, vi får se vart de landar till slut…

Sist så tror jag även att detta kan vara en bra bas för att i framtiden göra visa automatiska ändringar i OSM, t.ex. om det tillkommer en byggnad eller något. Men det är nog väldigt långt borta.

Hjälpa till?

Först om främst skulle jag bli jätteglad om andra vill testa det hela lite! Lek runt, se vad ni tycker. Är det användbart? Ger det ett värde? Något man borde ändra på? Något som inte fungerar? Fritt fram att kommentera med alla tankar och idéer här!

Vill man ge sig in djupare finns det mycket att hjälpa till med såklart:

  • Kontakta organisationer som har intressant data som inte är öppet eller öppet med fel licens för att få godkännande att använda datat
  • Utveckla webbappen
  • Skriva nya hämtningsrutiner (kräver att man sätter upp en Airflow-installation så lite meck med det, men i övrigt hanterligt)
  • Skriva nya avvikelse-algoritmer (kräver data att utveckla mot, säg till för vilken datamängd och vilket område då vill jobba med så fixar jag ett uttag som inte kräver hela databasen)
8 Likes

Oj, vilken grej. Wow :smiley:

Om alla datakällor fanns tillgängliga här skulle namnet verkligen inte vara nån överdrift, och oavsett var det ett coolt namn :wink:

Jättebra initiativ!

Jag har på “att-göra-listan” att göra en avvikelse-algoritm för NVDB, men jag hade tänkt bli klar med åtminstone Norrbotten först (har Haparanda och Kiruna kvar). Kvalitén på vägnätet i norr där jag själv mappar mest har varit så låg så det har inte riktigt behövts ett avvikelse-skript, finns alltid kvar en kommun som behöver gås igenom 100%.

Jag har faktiskt varit lite emot att göra ett avvikelseskript “för tidigt” för att det skulle bara leda till att folk inte bryr sig om att göra ordentliga genomgångar utan bara punkt-förbättrar när det är ett stort behov av total genomgång.

Men nu när det börjar vara ganska många kommuner som har sitt data “synkat” mot NVDB så börjar det vara aktuellt med ett avvikelseskript för att enklare kunna spåra och uppdatera förändringar i vägnätet.

Tanken var att jag skulle vara klar med norrbotten nu, men under hösten har jag haft en paus med NVDB-projektet och istället mappat natur. Kanske får tänka om och tidigarelägga det det avvikelse-algoritm-skriptet.

Det finns emellertid fortfarande stora ytor i Sverige som är nästan tomma utöver väggeometri och största sjöar, så det är inte svårt att hitta saker att mappa, men de flesta är intresserade av att underhålla sin hemtrakt som kanske redan har god täckning och då är såna här verktyg av stort värde.

1 Like

Jag klickade en liten stund runt i Arboga där jag bor. Enbart problem med taggar på skolor. Känns lite tunt, om man nu inte är intresserad av skolor.

Väldigt ramponerande, och visar hur mycket det går att presentera på ett överskådligt sätt.

Funktion på ‘Kommunvis/karta’ verkar inte vara ok.

En nackdel med GUI tycker jag är att efter öppnande av detaljbild för en ‘punkt’, och man i öppnad detaljbild, klickar på ‘Hem’, så visas hela landet och man får zoom:a in igen. Vore bättre om tidigare zoomning var kvar på tidigare vald kommun.

Lägger jättegärna in den i BJK i så fall!

Ja, det är lite av en balansgång. De datamängder jag hållit på med hittills tror jag det funkar ganska bra för, men för mer heltäckande som vägar eller mark måste man nog ha en bättre “baseline” innan man börjar beräkna enskilda avvikelser.

Ja, jag pysslar gärna lite med båda, utöver detta har jag det senaste halvåret gått igenom Tierps kommun (typ hälften klar) och karterat allt som syns från satellit, men det är skönt att lite då och då sitta med något som MapRoulette, Osmose, nu BJK eller liknande.

Tyvärr har jag bara skolor från Skolenhetsregistret och förskolor från SCB som heltäckande i hela Sverige just nu. Ska börja titta vad som kan vara intressant att beräkna avvikelser på från Topo50 så ska det börja bli lite mer avvikelsetyper även utanför Gävle.

Yes, ser att det verkar vara något som inte helt hänger med där första gången man öppnar sidan, ska felsöka.

Bra poäng, ska titta på att åtgärda det!

Ett GUI-förbättringsförslag:

När man klickar på en plupp vet man inte i förväg om det finns flera avvikelser där, så man får en lista på dem i kartan, eller om det är en enskild avvikelse, som då öppnas direkt.

Personligen gillar jag listan, då kan man själv välja vilken avvikelse man vill titta närmare på. Kanske till och med öppna den i nytt fönster/flik, istället för att avvikelsen kidnappar hela sessionen liksom. Det i kombination med @Msiipola:s kommentar att hem (eller “bakåt”) återgår till “hela sverige-zoomat” läge, gör den lite svårarbetad. Listan skulle kanske kunna komma upp bara man hoovrar över en punkt? Fast, det blir orättvist mot användare med surfplatta/telefon där onmouseover inte existerar på samma sätt :confused:

image

När det kommer in ännu fler datakällor tror jag det blir ännu mer viktigt att inte direkt öppna avvikelsen, jag kanske inte är ett dyft intresserad av skolor utan bryr mig enbart om hundbajstunnor… eller vad det nu kan vara :slight_smile:

Vad gissar att de olika plupparnas kulör avser vilken datakälla som avvikelsen avser. Jag (och 10% av den manliga befolkningen) har defekt färgseende och kommer att ha svårt att skilja på många av dem, men oavsett så vore det kanske finurligt att ha en “legend” nånstans.

Lite uppdateringar ute nu:

  • Fix för att Kommunvis / Karta ska visa rätt vid första laddning av sidan
  • Färglegender för Kommunvis / Karta och kartan med avvikelser
    image image
  • Valmöjligheter om avvikelser ska öppnas i ny flik, samt om popup alltid ska öppnas (valet lagras i webbläsaren till nästa gång du besöker sidan)
    image
  • Kartan med avvikelser kommer ihåg vart den senast var inom en “session” (=flik)
  • Avvikelser utifrån Topo50s lager “anläggningsområdespunkter” (totalt 3004st hittade, varav 5st i Arboga @Msiipola): här

Min tanke var att man då primärt jobbar med filtren (rullistorna) för att välja ut de saker man är intresserad av.

Tyvärr är tillgänglighetsanpassning (inkl. färgval) inget jag har superbra på, och förstår att speciellt på avvikelsekartan blir svårt att urskilja. Ska se om man kan få till lite ikoner eller så för att göra det tydligare (även för oss lyckligt lottade) vid tillfälle.

2 Likes

Snyyyyggt :heart_eyes:

Jag har inte läst alla information här eller på webbsidan, men hur är det tänkt med uppdateringar? Ska jag eller kan jag uppdatera info? Eller kommer eller ska alla info komma från öppna register?

Inte helt med på vad du syftar på, så försöker ge flera svar:

  • Från OSM hämtas nytt data var 10:e minut automatiskt (skulle gå att skruva upp till en gång i minuten, men känns onödigt)
  • Från datakällorna hämtas nytt data i lite olika interval (och vissa ännu bara när man manuellt startar processen)
  • Avvikelserna beräknas när data hämtats från den tillhörande datakällan, eller när man manuellt startar den processen

Det är inte jätteenkelt att hitta, men om du på den här sidan klickar på en av ikonerna så körs respektive process (nedladdningsikonen för att hämta data, bugg-ikonen för att beräkna avvikelser).

Nu finns även avvikelser för 4 ytterligare topo50-lager med: anläggningsområden, byggnadsanläggningspunkter (huvudsakligen master), transformatorområden och transformatorområdespunkter.

Nu nästan 42 tusen avvikelser, och betydligt fler särskilt i norra Sverige där det tidigare var ganska tomt:

Ska nog pyssla med lite andra delar av systemet nu, känns som om man bara fortsätter ösa in avvikelser kommer det bli för överrumplande…

Ok, det missade jag. Trodde att man bara hämtade från andra källor.

Jag försöker öppna alla avvikelser för en specifik kommun i JOSM men får bara ett tomt lager när jag trycker på “Öppna i JOSM”. Någon aning om vad jag gör för fel?

EDIT: Att hämta osmChange-filen och öppna i JOSM gick dock bra.

Ja, det är något strul där, ska ge mig på att försöka lösa det igen.

1 Like

Nu har jag kört en omgång utifrån osmChange-filen i Linköpings kommun.

Toppen, hur gick det?

Vill bara komma med glada tillrop. Bra verktyg!
Med de GUI-ändringar som gjorts och de nya datakällorna är det väldigt användbart och lättjobbat.

Vi är nu på på 40760 avvikelser. Så efter bara några dagar är ca 1000 saker förbättrade p.g.a. ditt (och senare andras) arbete.

1 Like

Det gick bra, framför allt var det många master och förskolor som saknades.

Går det att få även övriga problem inladdade i JOSM på något vis? T.ex. “Möjligen stängd skola”

EDIT: Hittade en bugg? Det går att trycka på knapparna “Fixad nu”, osv på sidan, men de är ändå utgråade och man får muspekarikon som visar att de inte ska gå att interagera med.

Helt otroligt vilket verktyg. Blir dock lite brydd av att jag sett ett par-tre fall av “Möjligen stängd förskola” på förskolor som jag vet finns, varav min son går på den ena. :wink: Jag undrar lite vad som triggar det, kan liksom inte tänka mig att ortens största kommunala förskola inte finns i databasen. Det måste vara något annat som gör att det missas tänker jag.

Det är nog båda buggar, tar en titt på dem strax!

Ja det verkar konstigt. Kan du skicka länk till OSM-objektet för något av dem så kan jag titta vad det kan bero på?

1 Like