---
title: Canada i camper
lang: da
date: last-modified
description: Lidt om vores campertur.
author: Andreas
image: "images/canada_map.png"
categories:
  - Canada
  - Rejse
  - Børn
  - R
---

# Kode

```{r}
#| code-summary: Kode til oversigtskort

# Original export from plotting in OsmAnd on phone
# bookmarks <- gpx::read_gpx(file = "data/favorites_canada_2023.gpx")

# Udtræk til .csv, herefter manuelt tilpasset, sorteret og tilføjet yderligere data.
# write.csv(bookmarks$waypoints,"data/camper_points.csv")

library(dplyr)

camper <- read.csv("data/camper_points.csv",)[-1] |> arrange(Order)

# Alternative source from RVParky export
# RVParky er fed, men fornyligt er det blevet en betalingstjeneste. Hvorfor er den ikke integreret i OSM?
# vnc <- gpx::read_gpx(file = "data/vancouver-trip.gpx")

## Iconer
matching <- c(car="images/key.png", 
              bed="images/rv.png", 
              house="images/house.png")

library(leaflet)

icons_list <- icons(
  iconUrl = matching[match(camper$Icon,names(matching))],
  iconWidth = c(40),
  iconHeight = c(40)
)

## Så er det tid til at bruge Open Street Routing Machine

library(osrm)

# osrmTable(loc = camper |> transmute(lon=Longitude,lat=Latitude))

trips <- osrmTrip(loc = camper |> transmute(lon=Longitude,lat=Latitude), overview = "full",
                   osrm.profile = "car")
trip <- trips[[1]]$trip

# There exists a lua filter for truck, put I can't figure how to implement.
# I suppose I would have to run a local OSRM instance...

## HTML labels til kortet

invisible(Sys.setlocale("LC_TIME", "da_DK"))

content <- paste0(
  ifelse(substr(camper$Description,1,4)!="http"|is.na(camper$Description),paste0("<br/>",camper$Name),paste0("<b><a href='",camper$Description,"'>",camper$Name,"</a></b>")),
  "<br/>",paste("Ankomst:",tolower(format(as.Date(camper$Arrival),"%d. %B"))),
  "<br/>",paste("Nætter:",camper$Nights),
  "<br/>",paste("Tid til næste:",round(trips[[1]]$trip$duration,1),"min"),
  "<br/>",paste("Afstand til næste:",round(trips[[1]]$trip$distance,1),"km"),
  ifelse(camper$Notes!="",paste0("<br/>",paste("Noter:",camper$Notes)),"")
)

## Interaktivt kort med `leaflet`

map <- leaflet(trip) %>%
  addTiles(group = "OSM (standard)") %>%
  addProviderTiles(providers$OpenTopoMap,
                   group = "Topografisk") %>%
  # addProviderTiles(providers$HERE.satelliteDay,
  #                  group = "Satelit") %>%
  setView(lng = median(camper$Longitude), lat = median(camper$Latitude), zoom = 7) %>%
  addPolylines() %>%
  addMarkers(data = camper[-nrow(camper),],
             icon = icons_list,
             popup = content[-nrow(camper)], 
             label = ~Name) |> 
  addLayersControl(
    baseGroups = c("OSM (standard)", "Topografisk"),
    options = layersControlOptions(collapsed = FALSE)
  )

# Hjælp til lige at komme det sidste stykke med at tegne ruten på:
# https://stackoverflow.com/a/60940696/21019325
```

Her er ikke tale om en overspringshandling.

# Forklaring

Lige om lidt tager vi til Canada i tre måneder som led i min PhD-uddannelse.

Først holder vi lidt ferie. På dag 2 kører vi afsted i en lejet camper og har 14 dage i den, hvor vi skal udforske den sydvestlige del af British Colombia.

Vores rute er tegnet in på kortet herunder.

```{r}
#| code-summary: Print kort
map
```

## Kommentarer

Kortet er et lille forsøg på at binde forskelligt indhold sammen og visualisere det på en let tilgængelig og interaktiv måde.
