Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 36 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,58 @@
# Utforsk Norge
# Norwegian Explorer

Utforsk Norge er en nettapplikasjon som gir oversikt over turer og turruter i Norge. Mange som vil på tur vet ikke hvor de skal begynne: informasjonen er spredt på ulike kart og nettsider, og det er vanskelig å sammenligne turer. Målet vårt er å samle dette på ett sted, slik at brukeren raskt finner turer som passer egne ønsker og kan se praktisk informasjon før turen.
Norwegian Explorer viser registrerte fotruter i Norge med søk, kart og rutedetaljer. Frontend er laget med React, TypeScript og Vite. Backend bruker GraphQL, Node.js og PostgreSQL/PostGIS.

Brukeren skal kunne utforske turer både i en liste og på kart, søke etter steder og filtrere på blant annet aktivitet, lengde og område. Løsningen skal fungere godt på mobil, og viktig turinformasjon skal kunne leses uten å bruke kartet.
## Data og API

## Status: utkast med mockup-data
Kartverkets Tur- og friluftsruter, kommune- og fylkesgrenser og OpenStreetMap-uttrekket er importert i PostgreSQL-databasen `norwegian_explorer` på VM-en. Den bearbeidede rutekatalogen og områdekoblingene er også importert. Frontend henter data gjennom GraphQL-endepunktet `/graphql` i `server/index.mjs`.

**Prøv utkastet:** [it2810-34.idi.ntnu.no/project2](http://it2810-34.idi.ntnu.no/project2/)
Gruppemedlemmer som er logget inn på VM-en via SSH, kan åpne databasen med:

Dette er første utkast. Vi har så langt bare satt opp mockup-data for å illustrere deler av funksjonaliteten vi har bygget: søk i ruter på navn, resultatliste med sidebytte, og kart og detaljer for en valgt rute. Resten av funksjonene under er planlagt, men ikke laget ennå, blant annet filtrering, Mine turer og høydeprofil.

**Mockup-dataen** (`public/data/mock-routes.json`) er 100 fotruter fra Kartverkets turrutedata, hentet fra nedlastingsdatasettet «Tur- og friluftsruter» i [Geonorge](https://kartkatalog.geonorge.no/metadata/d1422d17-6d95-4ef1-96ab-8af31744dd63). Det er en statisk fil og ikke et live API-kall. Den inneholder rutenavn, rutenummer, lengde, kartlinje og vedlikeholdsansvarlig, og for noen ruter vanskelighetsgrad og beskrivelse. Utvalget viser registrerte rutestrekninger, ikke nødvendigvis ferdige turforslag. Kartbakgrunnen hentes live fra OpenStreetMap.
```bash
psql -U gruppe -d norwegian_explorer
```

## Hovedfunksjoner (mål)
Katalogen gir hver rute en stabil ID, slår sammen rutedeler, beregner lengde og normaliserer mellomrom i navn. Rutene kobles geografisk til alle kommuner og fylker de berører, slik at områdefiltreringen kan kjøres lokalt i PostGIS. Navn med tegn på ødelagt tekstkoding markeres som mistenkelige og skjules fra vanlige søk. Poster med både samme navn og identisk normalisert geometri samles til ett søkeresultat. Ruter som bare deler navn eller delstrekninger beholdes som varianter og vises med rutenummer. Strekninger under 50 meter ekskluderes fordi de rundes til `0,0 km` i grensesnittet. Bymarka beholdes som ett område med hele stinettet som oversiktsvalg. Fra det registrerte nettet beregnes egne lukkede rundturer og sammenhengende strekninger; disse er avledede rutevalg, ikke offisielle turforslag. Bare eksisterende linjer og eksakte kryss kobles sammen, uten å lukke datagap. Når variantene faktisk danner en lukket linje, lager PostGIS i tillegg en avledet «Samlet rundtur» av den største lukkede flaten. Blindgrener tas ikke med, og det tegnes ingen nye forbindelser mellom endepunkter. Disse rundene er ikke registrerte turforslag. Fem ruter som tydelig ligger i Sverige er registrert i `route_exclusions` og skjules fra appen; grensekryssende norske ruter beholdes. Originaldataene endres ikke. Ved ny Kartverket-import må den materialiserte visningen oppdateres eller bygges på nytt.

- **Oversikt:** En søkbar liste over turer i hele Norge, koblet til et interaktivt kart.
- **Søk og filtrering:** Søk etter turer og steder, og avgrens etter aktivitet, lengde, stigning, geografi og tilgjengelige fasiliteter.
- **Turdetaljer:** Navn, område, rutetype, lengde, kart, høydeprofil og relevant praktisk informasjon.
- **Mine turer:** Brukeren kan lagre favoritter, markere turer som planlagt eller gjennomført og legge inn vurderinger.
- **Mobilvennlig løsning:** De samme funksjonene skal fungere på mobil, nettbrett og PC. Kartet suppleres alltid med en tilgjengelig resultatliste.
GraphQL-spørringen `routes` støtter tekstsøk, minimums- og maksimumslengde, kartgrenser, paginering og antall treff. Resultatene grupperes etter rutenavn. Når en gruppe åpnes, velges variant i detaljpanelet ved kartet. Geometri hentes først gjennom `route` for den valgte varianten.

Et typisk brukstilfelle er å søke etter «Romsdalen», velge fotturer på 5–15 km og deretter sammenligne treffene før man åpner en tur for å se rute og detaljer.
## Start databaseversjonen lokalt

## Kjøre prosjektet
PostgreSQL må kjøre, og databasen `norwegian_explorer` må inneholde det importerte Kartverket-skjemaet. Kjør deretter i to terminaler:

Du trenger Node.js og npm.
```bash
npm run dev:server
```

```bash
npm install
npm run dev
```

### Demomodus (lokalt)
Vite sender `/graphql` videre til backend på `127.0.0.1:4000`.

## Profiler

Bruker de 100 rutene i `public/data/mock-routes.json`. Krever hverken database eller backend. OSM-laget er slått av i denne modusen.
Ved oppstart oppretter backend skjemaet `norwegian_explorer_app` med tabeller for brukere, sesjoner og favoritter. Brukeren kan:

- opprette profil med unikt brukernavn og passord
- logge inn og ut
- legge valgt rute til eller fjerne den fra favoritter
- åpne en favoritt fra profilsiden

Passord hashes med Node.js `scrypt` og en tilfeldig salt. Sesjonstoken lagres som hash i databasen. Nettleseren lagrer selve tokenet lokalt for denne prototypen. Ved en produksjonslansering bør tokenet flyttes til en `HttpOnly`, `Secure` cookie med CSRF-beskyttelse.

Favoritter kobles til den stabile rute-ID-en, slik at like rutenavn eller rutenumre ikke blandes sammen.

## Bygg og kontroll

```bash
npm run dev -- --mode demo
npm run lint
npm run build
```

## Datakilder

- Kartverket, Tur- og friluftsruter: CC BY 4.0
- OpenStreetMap-bidragsytere og Geofabrik-uttrekk: ODbL

| Kilde | Hensikt |
| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| [Kartverkets turrutedata (Geonorge)](https://kartkatalog.geonorge.no/metadata/d1422d17-6d95-4ef1-96ab-8af31744dd63) | Hovedkilde for merkede ruter og fasiliteter. |
| [OpenStreetMap / Overpass API](https://wiki.openstreetmap.org/wiki/Overpass_API) | Stier, turruter og steder som supplement. |
| [Kartverkets stedsnavn-API](https://kartverket.no/api-og-data/stedsnavndata/brukarrettleiing-stadnamn-api) | Planlagt: søk etter steder. |
| [Kartverkets høydeprofil-API](https://kartverket.no/api-og-data/friluftsliv/hoydeprofil) | Planlagt: høydeprofil for en rute. |

Kartdata fra Kartverket. Kartbakgrunn og OSM-data © [OpenStreetMap-bidragsytere](https://www.openstreetmap.org/copyright).
Registrerte rutestrekninger er ikke nødvendigvis komplette turforslag og skal ikke uten videre brukes til navigasjon.
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@
"lint": "eslint .",
"preview": "vite preview",
"dev:server": "node --env-file-if-exists=.env --watch server/index.mjs",
"start:server": "node --env-file-if-exists=.env server/index.mjs",
"build:demo": "tsc -b && vite build --mode demo --base=/project2/"
"start:server": "node --env-file-if-exists=.env server/index.mjs"
},
"dependencies": {
"graphql": "^17.0.2",
Expand Down
Loading