Aproape de mine: găsirea unor parcuri apropiate

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe Rstats – cuantificatși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)


Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Am văzut recent pe YouTube un videoclip distractiv în care unii alergători au încercat să facă două parkrun-uri într-o zi. Nu vreau să spun că alergau de două ori același parcurs de parkrun, adică au alergat un parkrun la un curs și apoi au condus la un alt curs și au alergat și pe acela. Provocarea a fost să faci ambele parkrun-uri şi bate ultima persoana (mercatorul de coada) pe al doilea curs pana la linia de sosire.

Alertă spoiler: dacă vrei suspansul, urmărește videoclipul și apoi revino aici.

În videoclip, ei se confruntă mai întâi cu Warwick Racecourse parkrun. Un șofer așteaptă și ei zoom la Leamington Spa parkrun și rulează apoi. Conducerea durează aproximativ 12 minute. Ei sunt ajutați de a fi alergători extrem de buni – de fapt, unul dintre ei (Harry) termină primul la Warwick – iar Leamington se întâmplă să înceapă cu câteva minute întârziere. Chiar și așa, trec în vânt pe lângă umblatorul de coadă pentru a finaliza provocarea.

L-am văzut pe Ryan care co-găzduiește canalul Raley Adventures YouTube la un eveniment recent de alergare și a menționat că lucrul tare ar fi să nu te bazezi pe Haley (co-gazda lui) pentru a conduce între parcuri, ci să alerge între ele. Asta m-a pus pe ganduri: unde sunt cele mai apropiate perechi de parcuri și care dintre acestea se află în Midlands, unde are sediul Raley Adventures?

A fost destul de simplu, având în vedere o listă de coordonate ale tuturor parkrun-urilor din Marea Britanie, să descoperiți acest lucru în R. Faceți clic aici pentru răspuns sau citiți mai departe pentru cod.

Codul

Folosind lista, putem găsi distanța dintre toate perechile de coordonate parkrun și apoi setăm o limită de 3 km pentru a defini o pereche rulabilă. Cele 12 minute de mers cu mașina de la Warwick la Leamington echivalează cu 3 km în alergare pentru tipi rapizi precum Ryan și Harry.

library(leaflet)
library(htmlwidgets)

## Functions ----

# function to get the distance between two rows of the dataframe
haversine_distance <- function(lat1, lon1, lat2, lon2) {
  R <- 6371  # Earth radius in km
  dlat <- (lat2 - lat1) * pi / 180
  dlon <- (lon2 - lon1) * pi / 180
  a <- sin(dlat / 2) * sin(dlat / 2) +
    cos(lat1 * pi / 180) * cos(lat2 * pi / 180
    ) * sin(dlon / 2) * sin(dlon / 2)
  c <- 2 * atan2(sqrt(a), sqrt(1 - a))
  d <- R * c
  return(d)
}

## Script ----

# load in the csv in Data it has no headers
df <- read.csv("Data/uk-parkruns.csv", header = FALSE)
# label columns
colnames(df) <- c("Event", "Place", "Lat", "Lon")
# drop all rows that have the word "juniors" in Event
df <- df(!grepl("juniors", df$Event, ignore.case = TRUE), )

# now find the nearest neighbors for each parkrun using haversine formula
df$Nearest_Neighbor <- NA
df$Distance_to_Nearest_Neighbor_km <- NA
for (i in 1:nrow(df)) {
  row <- df(i, )
  min_distance <- Inf
  nearest_event <- NA
  for (j in 1:nrow(df)) {
    if (i != j) {
      neighbor_row <- df(j, )
      dist <- haversine_distance(row$Lat, row$Lon,
                                 neighbor_row$Lat, neighbor_row$Lon)
      if (dist < min_distance) {
        min_distance <- dist
        nearest_event <- neighbor_row$Event
      }
    }
  }
  df$Nearest_Neighbor(i) <- nearest_event
  df$Distance_to_Nearest_Neighbor_km(i) <- round(min_distance, 2)
}

# sort by distance to nearest neighbor
df <- df(order(df$Distance_to_Nearest_Neighbor_km), )

write.csv(df, "Output/Data/uk-parkruns-with-nearest-neighbors.csv",
 row.names = FALSE)

# make a leaflet map to visualize the parkruns and their nearest neighbors
map <- leaflet(df) |>
  addTiles() |>
  addCircleMarkers(~Lon, ~Lat,
                   label = ~paste0(Event,
                                  "-- Nearest Neighbour: ",
                                  Nearest_Neighbor,
                                  "-- Distance (km): ",
                                  Distance_to_Nearest_Neighbor_km),
                   radius = 4,
                   color=~ifelse(df$Distance_to_Nearest_Neighbor_km < 3 , "red", "blue"),
                   stroke = FALSE,
                   fillOpacity = 0.7)
# save the map as an html file
saveWidget(map, "Output/Plots/uk-parkruns-nearest-neighbors-map.html", selfcontained = TRUE)

Cele mai apropiate parcuri

În mod uimitor, au existat 115 perechi de parcuri care se pot rula (există avertismente la acest lucru, vezi mai jos).

Iată primele 20 sau cam asa ceva din tabel pentru a vedea cele mai apropiate 10 perechi.

Eveniment Loc Lat Lon Nearest_Neighbor Distanța_la_cel mai apropiat_vecin_km
Leazes Parcul Leazes 54,977078 -1,625633 Town Moor 1,38
Town Moor Exhibition Park, Newcastle 54,988451 -1,617143 Leazes 1,38
Bucla Cuningar Bucla Cuningar 55,84069 -4.201428 Tollcross 1,57
Tollcross Tollcross 55,847494 -4,179461 Bucla Cuningar 1,57
Jesmond Dene Jesmond Dene 54,99188 -1,592839 Town Moor 1.6
Alexandra Parcul Alexandra 53,450142 -2,248827 Manchester de Sud 1,66
Manchester de Sud Parcul Platt Fields 53,446072 -2,224689 Alexandra 1,66
Brighton & Hove Hove Park, Brighton 50,84214 -0,172498 Preston Park 1,68
Preston Park Preston Park 50,841557 -0,148616 Brighton & Hove 1,68
Old Deer Park Old Deer Park, Richmond 51,464417 -0,306973 Parcul Richmond 1,69
Parcul Richmond Parcul Richmond, Richmond upon Thames 51,451962 -0,292886 Old Deer Park 1,69
Parcul Bătrânului Parcul Bătrânului 55,863235 -4,32197 Victoria 1,71
Victoria Parcul Victoria 55,877504 -4,332347 Parcul Bătrânului 1,71
Catford Parcul Mountsfield 51,44824 -0,00863 Câmpuri deluroase 1,74
Câmpuri deluroase Câmpuri deluroase 51,460143 -0,025019 Catford 1,74
Arde Varley Park, Stockport SK4 3EA 53,407152 -2,209185 Fletcher Moss 1,77
Castelul Colchester Parcul Castelului 51,89167 0,902724 Highwoods 1,77
Fletcher Moss Parcul Fletcher Moss 53,40999 -2,23551 Arde 1,77
Highwoods Highwoods Country Park 51,904682 0,917561 Castelul Colchester 1,77
Dulwich Parcul Dulwich, Dulwich 51,443869 -0,079206 Peckham Rye 1,82
Peckham Rye Parcul Peckham Rye 51,455486 -0,060688 Dulwich 1,82

Newcastle-upon-Tyne are trei parcuri care pot fi alergate. Leazes to Town Moor (și invers) este la 1,38 km, iar Jesmond Deane este la doar 1,6 km de Town Moor.

Să aruncăm o privire pe hartă pentru a vedea ce este în apropiere.

Harta se deschide într-o vizualizare micșorată, dezvăluind un parc în Insulele Falkland, care este la 12333 km de… Land’s End în Anglia!

M-am chinuit să încorporez harta aici, așa că iată o captură de ecran cu mine privind câteva perechi de candidați. Punctele roșii sunt parcuri cu un vecin care se află la mai puțin de 3 km distanță, toate celelalte sunt puncte albastre.

Și iată o captură de ecran a perechilor din Midlands pentru o potențială provocare de alergare.

Perechi potențiale

  • Wolverhampton – East Park = 2,84 km
  • Abbey Park – Leicester Victoria = 2,79 km
  • Linford Wood – Milton Keynes = 2,71 km
  • Cheltenham – Teren de joc Regele George V = 2,44 km
  • Gloucester North – Gloucester City = 2,32 km
  • Northampton – Universitatea din Northampton = 2,02 km

Avertismente

Am exclus aici evenimentele de juniori, dar evident că ambele parcuri trebuie să fie actuale, adică să aibă loc în aceeași zi. Poate că unele dintre site-uri au fost întrerupte sau ar putea fi anulate în ziua respectivă.

Cea mai mare problemă aici este că coordonatele sunt adesea spre mijlocul parcului. Dacă o pereche poate fi alergată cu adevărat, va depinde de locul în care este sfârșitul primului parkrun față de începutul celui de-al doilea. Nu am putut găsi o grămadă de fișiere gpx sau ceva care să mă ajute să fac asta.

Am stabilit o distanță de 3 km pentru a defini o pereche care poate fi alergată. Acest lucru ar putea fi prea generos. În videoclip, ei rulează pe Leamington pe locul al doilea pentru că are reputația de a începe cu câteva minute întârziere. Este, de asemenea, un curs mai provocator, ceea ce înseamnă că este mai probabil ca mersul cu coadă să fie mai lent. Aceste lucruri înclină balanța. De asemenea, s-au odihnit în timpul conducerii, lucru care ar trebui să fie luat în considerare dacă provocarea ar fi să alerge între o pereche. Pe de altă parte, mergetorul de coadă ar putea dura o oră pentru a face o alergare în parc, caz în care, perechile care sunt mai mari de 3 km ar fi realizabile.

Concluzie

Cu siguranță cred că este posibil să alergi între o pereche de parcuri. Există o mulțime de opțiuni și mi-ar plăcea să-i văd încercând să o facă!

Titlul postării este preluat din „Close To Me” de The Cure.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.