library(tidygeocoder)
library(leaflet)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
dane_celne <- data.frame(
id = 1:4,
start_kod = c("PL421010", "PL321010", "PL421030", "PL421030"),
plan_border_kod = c("PL311030", "PL401060", "PL401060", "SE603340"),
akt_border_kod = c("PL311070", "SK532100", "HU724000", "FI994900"),
odbiorca_adres = c("Mińsk, Białoruś", "Kijów, Ukraina", "Czerniowce, Ukraina", "Oksfjordhamn, Norwegia")
)
kody_na_adresy <- c(
"PL421010" = "Szczecin, ul. Żołnierska 45", # OC Szczecin
"PL321010" = "Gdynia, ul. Indyjska 13",
"PL421030" = "Szczecin, ul. Hryniewieckiego 6c", # OC Szczecin (Łasztownia)
"PL311030" = "Kuźnica, Polska", # OC Kuźnica (Drogowy)
"PL311070" = "Bobrowniki, Polska", # OC Bobrowniki
"PL401060" = "Korczowa, Polska", # Przejście graniczne Korczowa
"SK532100" = "Vyšné Nemecké, Słowacja", # Przejście graniczne SK/UA
"HU724000" = "Zahony, Węgry", # Przejście graniczne HU/UA
"SE603340" = "Svinesund, Szwecja", # Przejście graniczne SE/NO
"FI994900" = "Karesuvanto, Finlandia" # Przejście graniczne FI/NO
)
dane_celne$start_adres <- kody_na_adresy[dane_celne$start_kod]
dane_celne$plan_border_adres <- kody_na_adresy[dane_celne$plan_border_kod]
dane_celne$akt_border_adres <- kody_na_adresy[dane_celne$akt_border_kod]
wszystkie_adresy <- unique(c(dane_celne$start_adres,
dane_celne$plan_border_adres,
dane_celne$akt_border_adres,
dane_celne$odbiorca_adres))
adresy_df <- data.frame(adres = wszystkie_adresy)
adresy_wsp <- tidygeocoder::geocode(adresy_df, address = adres, method = "osm")
## Passing 14 addresses to the Nominatim single address geocoder
## Query completed in: 14.1 seconds
adresy_wsp$lat[adresy_wsp$adres == "Oksfjordhamn, Norwegia" & is.na(adresy_wsp$lat)] <- 69.908
adresy_wsp$long[adresy_wsp$adres == "Oksfjordhamn, Norwegia" & is.na(adresy_wsp$long)] <- 21.334
adresy_wsp$lat[adresy_wsp$adres == "Kilpisjärvi, Finlandia" & is.na(adresy_wsp$lat)] <- 69.049
adresy_wsp$long[adresy_wsp$adres == "Kilpisjärvi, Finlandia" & is.na(adresy_wsp$long)] <- 20.798
dane_geo <- dane_celne %>%
left_join(adresy_wsp, by = c("start_adres" = "adres")) %>% rename(start_lat = lat, start_long = long) %>%
left_join(adresy_wsp, by = c("plan_border_adres" = "adres")) %>% rename(plan_border_lat = lat, plan_border_long = long) %>%
left_join(adresy_wsp, by = c("akt_border_adres" = "adres")) %>% rename(akt_border_lat = lat, akt_border_long = long) %>%
left_join(adresy_wsp, by = c("odbiorca_adres" = "adres")) %>% rename(end_lat = lat, end_long = long)
# Przypadek 1: Szczecin -> Białoruś (Zmiana: Kuźnica na Bobrowniki)
case1 <- dane_geo[1, ]
# Zmiana przejścia z Kuźnicy na Bobrowniki (bardziej na południe).Prawdopodobnie z powodu korków w Kuźnicy lub awarii systemu odpraw.
leaflet() |> addProviderTiles("CartoDB.Positron") |>
addCircleMarkers(lng = c(case1$start_long, case1$plan_border_long, case1$akt_border_long, case1$end_long),
lat = c(case1$start_lat, case1$plan_border_lat, case1$akt_border_lat, case1$end_lat), radius = 5, color = "black") |>
addPolylines(lng = c(case1$start_long, case1$plan_border_long, case1$end_long), lat = c(case1$start_lat, case1$plan_border_lat, case1$end_lat),
color = "blue", weight = 2, dashArray = "5, 5") |> # Planowana
addPolylines(lng = c(case1$start_long, case1$akt_border_long, case1$end_long), lat = c(case1$start_lat, case1$akt_border_lat, case1$end_lat),
color = "red", weight = 3) # Faktyczna
## Warning in validateCoords(lng, lat, funcName): Data contains 1 rows with either
## missing or invalid lat/lon values and will be ignored
# Przypadek 2: Gdynia -> Ukraina (Kijów)
case2 <- dane_geo[2, ]
#Towar ruszył z Gdyni. Zamiast jechać najkrótszą drogą przez Korczową (PL/UA), kierowca nadrobił drogi przez Słowację (Vyšné Nemecké), omijając zatory na granicy polsko-ukraińskiej.
leaflet() |> addProviderTiles("CartoDB.Positron") |>
fitBounds(min(case2$start_long, case2$akt_border_long), min(case2$start_lat, case2$akt_border_lat), max(case2$end_long), max(case2$end_lat)) |>
addCircleMarkers(lng = c(case2$start_long, case2$plan_border_long, case2$akt_border_long, case2$end_long),
lat = c(case2$start_lat, case2$plan_border_lat, case2$akt_border_lat, case2$end_lat), radius = 5, color = "black") |>
addPolylines(lng = c(case2$start_long, case2$plan_border_long, case2$end_long), lat = c(case2$start_lat, case2$plan_border_lat, case2$end_lat),
color = "blue", weight = 2, dashArray = "5, 5") |>
addPolylines(lng = c(case2$start_long, case2$akt_border_long, case2$end_long), lat = c(case2$start_lat, case2$akt_border_lat, case2$end_lat),
color = "red", weight = 3)
## Warning in validateCoords(lng, lat, funcName): Data contains 1 rows with either
## missing or invalid lat/lon values and will be ignored
# Przypadek 3: Szczecin -> Ukraina (Czerniowce)
case3 <- dane_geo[3, ]
# Ogromny objazd przez Węgry (Zahony). Towar zamiast wjechać do UA w Korczowej, pojechał znacznie bardziej na południe, wjeżdżając "od dołu" prawdopodobnie ze względów bezpieczeństwa.
leaflet() |> addProviderTiles("CartoDB.Positron") |>
addCircleMarkers(lng = c(case3$start_long, case3$plan_border_long, case3$akt_border_long, case3$end_long),
lat = c(case3$start_lat, case3$plan_border_lat, case3$akt_border_lat, case3$end_lat), radius = 5, color = "black") |>
addPolylines(lng = c(case3$start_long, case3$plan_border_long, case3$end_long), lat = c(case3$start_lat, case3$plan_border_lat, case3$end_lat),
color = "blue", weight = 2, dashArray = "5, 5") |>
addPolylines(lng = c(case3$start_long, case3$akt_border_long, case3$end_long), lat = c(case3$start_lat, case3$akt_border_lat, case3$end_lat),
color = "red", weight = 3)
## Warning in validateCoords(lng, lat, funcName): Data contains 1 rows with either
## missing or invalid lat/lon values and will be ignored
# Przypadek 4: Szczecin -> Norwegia (Oksfjordhamn)
case4 <- dane_geo[4, ]
#Zamiast wjazdu do Norwegii na południu (Svinesund) i jazdy trudną, górzystą drogą przez cały kraj, wybrano szybszy tranzyt przez Szwecję i Finlandię, z wjazdem do Norwegii dopiero na samej północy w Kilpisjärvi.
leaflet() |> addProviderTiles("CartoDB.Positron") |>
addCircleMarkers(lng = c(case4$start_long, case4$plan_border_long, case4$akt_border_long, case4$end_long),
lat = c(case4$start_lat, case4$plan_border_lat, case4$akt_border_lat, case4$end_lat), radius = 5, color = "black") |>
addPolylines(lng = c(case4$start_long, case4$plan_border_long, case4$end_long), lat = c(case4$start_lat, case4$plan_border_lat, case4$end_lat),
color = "blue", weight = 2, dashArray = "5, 5") |>
addPolylines(lng = c(case4$start_long, case4$akt_border_long, case4$end_long), lat = c(case4$start_lat, case4$akt_border_lat, case4$end_lat),
color = "red", weight = 3)
## Warning in validateCoords(lng, lat, funcName): Data contains 1 rows with either
## missing or invalid lat/lon values and will be ignored