Agile metode
Iterative sykluser, tidlig tilbakemelding og kontinuerlig forbedring.
Et system for innmelding og kontroll av luftfartshindre til Nasjonalt register for luftfartshindre (NRL) — kåret til beste løsning på EXPO 2025.
Prosjektet ble gjennomført høsten 2025 som et tverrfaglig semesterprosjekt i emnene IS-200, IS-201 og IS-202 ved IT- og informasjonssystemstudiet, i samarbeid mellom UiA Institutt for informasjonssystemer, Kartverket og Norsk Luftambulanse (NLA). Oppgaven går ut på å utvikle en webapplikasjon for rapportering av enkle luftfartshindre til Nasjonalt register over luftfartshindre (NRL) — et digitalt register over menneskeskapte objekter som utgjør en risiko for luftfarten, spesielt ved lavtflyging.
Hvordan kan man utvikle en brukervennlig webapplikasjon som lar piloter og flybesetning raskt rapportere enkle luftfartshindre inn i en kartklient?
Samtidig skal Kartverkets registerførere få et effektivt verktøy for å motta, behandle og godkjenne rapporteringene — med en pålitelig dataflyt til Nasjonalt register over luftfartshindre (NRL).
Vi har utviklet Luftfartshinder, en webapplikasjon der piloter og flybesetning fra NLA, Luftforsvaret og Politiets helikoptertjeneste raskt kan rapportere luftfartshindre.
Med en to-klikks løsning og en tannhjulsmeny kan et hinder markeres og lagres som draft på under 2 sekunder direkte i kartklienten, og sendes inn først når oppdraget er ferdig.
Rapporteringene valideres og lagres i en MariaDB-database, og behandles av registerførere i Kartverket, som kan godkjenne eller avvise dem gjennom et rollebasert system.
Løsningen er bygget med ASP.NET Core MVC og containerisert med Docker, med en MariaDB-database i bunnen. Kartintegrasjonen bruker Leaflet sammen med WMS-tjenester og GeoJSON-standarden, og hele applikasjonen er grundig testet og sikret gjennom rollebasert tilgangsstyring.
Vi begynte tidlig med brukerforståelse. Vi så gjennom videoer av piloter i flyging for å forstå hvordan de samarbeidet i luften, og hadde et Teams-møte med en politioverbetjent/pilot, assisterende flysjef i Oslo politidistrikts helikoptertjeneste, om hans utfordringer og ønsker til et ideelt system.
Det ga oss «Hjulet» — løsningen som lar enhver pilot markere et hinder på kortest mulig tid, uten å miste fokus på oppdraget.
Arbeidet fulgte prinsipper for systemutvikling og god programmeringspraksis.
Vi etablerte en MVC-struktur som la grunnlaget for en skalerbar applikasjon.
Vi implementerte skjemaer og brukervennlig frontend for innhenting og visning av data.
Vi koblet inn kartfunksjonalitet slik at brukere kunne interagere med geografisk informasjon.
Applikasjonen ble koblet til en database med støtte for sikker innlogging og lagring av brukerdata.
Vi organiserte arbeidet etter agile prinsipper, med tydelige rytmer og synlig fremdrift for hele teamet.
Iterative sykluser, tidlig tilbakemelding og kontinuerlig forbedring.
Sprintperioder med klare mål, backlog og gjennomgang etter hver sprint.
Synlig arbeidsflyt på tavle, med tydelig status og færre flaskehalser.
Korte standups for fremdrift, hindringer og neste steg.
Bilder og opptak fra presentasjonen og testing med piloter under EXPO 2025.
Vi vant EXPO 2025 for beste løsning, blant 23 grupper og over 100 studenter — et resultat av tett brukersamarbeid og en løsning bygget rundt pilotenes faktiske arbeidsflyt i felt.
Erfaringen lærte oss hvor mye tidlig og tett brukerinvolvering har å si for sluttresultatet, og at de beste løsningene ofte er de enkleste å bruke i en hektisk arbeidssituasjon.
For å sikre transparens og etterprøvbarhet ble hele prosessen grundig dokumentert underveis. Det endelige resultatet er en prototype som viser hvordan piloter og flybesetning kan rapportere luftfartshindre raskt inn mot Kartverkets Nasjonale register over luftfartshindre (NRL).
Gjennom løsningen har vi lagt vekt på funksjonalitet, sikkerhet og brukervennlighet, samtidig som vi har vist hvordan geografisk informasjon om luftfartshindre kan registreres og presenteres på en rask og interaktiv måte direkte i felt.
Se kode på GitHub (åpnes i ny fane)// ASP.NET Core MVC Structure
public class MapController : Controller
{
private readonly IMapService _mapService;
private readonly UserManager<User> _userManager;
public async Task<IActionResult> Index()
{
var mapData = await _mapService.GetMapData();
return View(mapData);
}
}