2023-06-22 14:09:23 +02:00
---
title: Canada i camper
2023-06-26 10:03:38 +02:00
lang: da
2023-07-11 18:10:17 +00:00
date: 2023-06-28
2023-06-22 14:09:23 +02:00
description: Lidt om vores campertur.
2023-06-23 13:37:09 +02:00
author: Andreas
image: "images/canada_map.png"
2023-06-22 14:09:23 +02:00
categories:
- Canada
- Rejse
- Børn
2023-06-23 13:37:09 +02:00
- R
2023-06-22 14:09:23 +02:00
---
2023-06-23 13:37:09 +02:00
# 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) %>%
2023-06-27 14:29:16 +02:00
addPolylines(group = "Estimated route") %>%
2023-06-23 13:37:09 +02:00
addMarkers(data = camper[-nrow(camper),],
icon = icons_list,
popup = content[-nrow(camper)],
2023-06-27 14:29:16 +02:00
label = ~Name,
group = "Points") |>
2023-06-23 13:37:09 +02:00
addLayersControl(
baseGroups = c("OSM (standard)", "Topografisk"),
2023-06-27 14:29:16 +02:00
overlayGroups = c("Estimated route", "Points"),
2023-06-23 13:37:09 +02:00
options = layersControlOptions(collapsed = FALSE)
)
# Hjælp til lige at komme det sidste stykke med at tegne ruten på:
# https://stackoverflow.com/a/60940696/21019325
2023-06-27 14:29:16 +02:00
# Vejledning til at opsætte en lokal server med mulighed for modificeret profil.
# https://www.r-bloggers.com/2017/09/building-a-local-osrm-instance/
# Download specifikke områder: http://download.geofabrik.de/
#
# Lastbil profil (den minder vel mere om en camper?): https://github.com/Project-OSRM/osrm-profiles-contrib/blob/master/5/27/truck-soft/car.lua
2023-06-23 13:37:09 +02:00
```
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.