This is a group project made in the course IN2000 Software Engineering. We got nominated as one of the ten best projects of our year
Introduksjon • Bibloteker • Innstallasjon
Vi er en gruppe studenter som tar IN2000: software engineering med prosjektarbeid.
Team 28:
- Mia Anneli Pulkkanen @miaap
- Linn Thoresen @linnthor
- Amanda Linnea Slang Rödström @alrodstr
- Hans Magnus Salve Malm Haga @hmhaga
- David Hovde @davidhov
- Philip Elias Fleischer @philipef
Vi valgte case nr 4: Yr – Kart til folket! Vi syntes det var et spennende case, som var både konkret og med rom til å utforske.
Vi har laget en vær-app som har en værtabell, langtidsvarsel og værkart. Værtabell og langtidsvarsel viser værmelding for de neste dagene, med en dynamisk bakgrunn som er representativ for været på valgt lokasjon. Værkartet viser forskjellige værfohold over et kart. Vi har laget et interaktivt værkart, som oppfordrer brukere til å utforske værforhold og steder i hele norge. Du kan finne lokasjoner av å bruke søkefeltet, eller holde inne på ønsket sted i værkartet. Du kan også lagre favoritt lokasjoner for rask tilgang, og enkel oversikt i værkartet.
Case-kravene vi oppfyller med applikasjonen er:
• Legge tiles for temperatur og nedbør på kart
• Lage transparens for data under gitt terskelverdi (fx regn)
• Justere fargepalett
• Sette opp en backend som rendrer ferdige karttiles som kan brukes direkte i klienten
Tekniske krav:
• Ryddig arkitektur med logisk mappestruktur og MVVM
• Koden er robust og pålitelig
• Enhetstester for vedlikehold
• Grensesnittet er tilpassbart, adaptivt og universlt utformet
• Funksjonalitet er representert i diagrammen, se MODELING.md
Vi har i hovedsak bygget appen rundt MET sine APIer for å finne værdata:
- Beta.yr-maps.met.no/api/air-temperature
- Beta.yr-maps.met.no/api/cloud-area-fraction
- Beta.yr-maps.met.no/api/percipitation-amount
- Beta.yr-maps.met.no/api/percipitation-nowcast
- Beta.yr-maps.met.no/api/percipitation-observations
- Beta.yr-maps.met.no/api/wind/available.json
- In2000.api.met.no/weatherapi/locationforecast/2.0/complete
- In2000.api.met.no/weatherapi/subseasonal/1.0/complete
- In2000.api.met.no/weatherapi/sunrise/3.0/moon
- In2000.api.met.no/weatherapi/sunrise/3.0/sun
Og vi har hentet API for å finne stedsnavn og lokasjoner:
- Api.kartverket.no/stedsnavn/v1/navn?
- Api.kartverket.no/stedsnavn/v1/punkt?
| Bibliotek | Beskrivelse |
|---|---|
| Maplibre | Brukes for å vise værdata som lag (tiles) på et interaktivt kart. |
| Retrofit | For å hente værdata fra MET og andre API-er på en effektiv og strukturert måte. |
| Ktor | Alternativ HTTP-klient brukt For asynkrone nettvekrskall |
| Gson | For å konvertere JSON-data fra API-er til Kotlin-objekter. |
| Room | Lokal database som lagrer brukerens favorittsteder og innstillinger. |
| Google Play Services Location | Henter brukerens sanntidsposisjon via GPS. |
| Accompanist Permissions | For å håndtere tillatelser, som posisjonstilgang, i Compose. |
| Jetpack Compose | UI-rammeverket som bygger hele appens grensesnitt – moderne og deklarativt. |
| Material 3 | Brukes til visuelle komponenter som knapper, kort og menyer. |
Vi brukte TileConvert fra Yr som inspirasjon
- Innstallert Android Studios
- Tilgang til internett
- Minimum SDK på 24, anbefalt 34 eller mer
- Lokasjon i Norge. (Kun lokasjoner i Norge er implementert - ikke inkludert svalbard)
- Norsk tastatur må være aktivert i systeminnstillinger på enhet/emulator (for å skrive stedsnavn med æ,ø eller å)
- At backend hostes, for å visualisere kartet
For å kjøre applikasjonen må filene lastes ned riktig, og kjøres i Android Studios. Her er en guide for å åpne koden, med 3 alternative metoder. Deretter en guide for å laste ned emulatoren, vi anbefaler API 34 eller mer.
Slik åpner du prosjektet fra en zip-fil:
-
Pakk ut ZIP-filen et sted på datamaskinen din (f.eks. Nedlastinger eller Dokumenter).
-
Åpne Android Studio.
-
Klikk på "Open" (åpne et prosjekt).
-
Bla til mappen du nettopp pakket ut, og velg den.
Slik åpner du prosjektet og lagrer koden med terminal:
git clone https://github.uio.no/IN2000-V25/team-28.git
cd team-28
./gradlew build-
Åpne Android Studios.
-
Velg Open an existing project og naviger til mappen du klonet (team-28).
-
Vent til prosjektet lastes inn og alle avhengigheter er synkronisert (du vil se "Gradle sync finished" nederst).
-
Hvis du blir spurt, velg å bruke standard Gradle-wrapper.
Slik åpner du prosjektet direkte i Android Studios med git-lenke
-
Åpne Android Studios.
-
Velg "Get from VCS" (VCS = Version Control System) på startsiden.
-
I feltet for "URL", lim inn GitHub-lenken til prosjektet:
https://github.uio.no/IN2000-V25/team-28.git
- Velg hvor du vil lagre prosjektet på maskinen din, og trykk Clone.
For å laste ned emulator:
-
Gå til Tools → Device Manager i menyen.
-
Klikk på Create Device for å lage en ny emulator hvis du ikke allerede har én.
-
Velg modell f.eks. Pixel 5 og trykk Next.
-
Velg en type Android 7.0 (API nivå 24) eller nyere for å fungere. Vi anbefaler API 34 eller mer for optimal ytelse.
-
Klikk Download hvis det ikke er lastet ned enda, og trykk Finish.
-
Start emulatoren ved å trykke på den grønne ▶-knappen ved siden av navnet på emulatoren.
Vi satte opp en backend som rendrer ferdige karttiles som kan brukes direkte i klienten. Backenden gjør pixelmanipuleringen, slik at bildene i værkartet blir mer presist og komplekst.
Som fullstendig app ville backend-server ville blitt kjørt av oss på enten egen server eller via en tredjeparts hosting-tjeneste. Men istedenfor å hoste en server i 4 uker i strekk legger vi ved en instruksjon om hvordan dette kan settes opp og kjøres lokalt.
Backend-serveren ligger i mappen TileServer. Den inneholder følgende filer:
- TileServer.java
- ServerHttpHandler.java
- TileConvert.java
- info.md
For å kjøre gjør følgende: Localhost i android emulator:
- Åpne terminalvindu, og finn plasseringen av mappen TileServer. Deretter skriv:
javac *.java
java TileServer //dette starter serveren- Da får du opp at serveren er startet, for å stanse serveren trykk Ctrl + C i terminalvinduet.
- Nå er servern klar. Det vil si at nå kan Android emulatoren aksessere maskinens localhost via ip’en 10.0.2.2.
- Nå kan du kjøre applikasjonen i ved å trykke på den grønne Run ▶-knappen.
På fysisk enhet eller server og android studio på to ulike enheter: Når man kjører applikasjonen med backend på en fysisk enhet kan ikke appen aksessere localhost. Da må man legge inn riktig IP-addresse direkte i koden.
- Endre streng-argumenter «localhost» på linje 12 i TileServer.java byttes ut med InetAddress.getByName(«<ip-en på enheten som kjører server>»).
- I tillegg må linje 21 i MapDataSource.kt settes lik denne ip’en som du får.
- Lagre endringene du skrev i java-koden.
- I terminal, finn plasseringen av mappen TileServer, og deretter skriv:
javac *.java
java TileServer //dette starter serveren- Da vil du mest sannsynlig få en beskjed om at java trenger brannmurstilgang, trykk OK. Dette er nødvendig for at denne konfigurasjonen skal fungere og kan fjernes etterpå.
- Da får du opp at serveren er startet, for å stanse serveren trykk Ctrl + C i terminalvinduet.
- Nå er servern klar og kjører på IP-adressen til enheten serveren kjøres på.
- Koble til enheten du vil kjøre applikasjonen på fra Device Manager, og kjør applikasjonen som vanlig


