Tracciare campi da golf in R con Google Earth |  di Adam Beaudet |  Maggio 2024

 | Intelligenza-Artificiale

Una volta terminata la mappatura della buca o del percorso, è il momento di esportare tutto il duro lavoro in un file KML. Questo può essere fatto facendo clic sui tre punti verticali sul lato sinistro dello schermo in cui risiede il tuo progetto. Questo progetto funziona meglio con i dati geoJSON, in cui possiamo convertire facilmente il nostro file KML nei passaggi successivi. Ora siamo pronti per dirigerci verso R.

I pacchetti di cui avremo bisogno per prepararci alla trama sono: sf (per lavorare con dati geospaziali), tidyverse (per la pulizia e la stampa dei dati), stringr (per la corrispondenza delle stringhe) e geojsonsf (per la conversione da KML a geoJSON). Il nostro primo passo è leggere il file KML, cosa che può essere fatta con il file st_read() funzione da sf.

# load libraries
library(sf)
library(tidyverse)
library(stringr)
library(geojsonsf)

kml_df <- st_read("/Users/adambeaudet/Downloads/erin_hills.kml")

Grande! Ora dovremmo avere i dati KML del nostro campo da golf in R. Il frame dati dovrebbe avere 2 colonne: Nome (nome del progetto o nome del corso nel nostro caso) e geometria (un elenco di tutti i singoli punti che compongono i poligoni che abbiamo tracciato). Come accennato brevemente in precedenza, convertiamo i nostri dati KML in geoJSON ed estraiamo anche il nome del campo e i numeri delle buche.

# convert from KML to geoJSON
geojson_df <- st_as_sf(kml_df, "POLYGON")

# extracting course name and hole number from polygon name
# assuming "course_hole_element" naming convention is used for polygons
geojson_df$course_name <- str_match(geojson_df$Name, “^(.+)_hole”)(,2)
geojson_df$hole_num <- gsub(“.*_hole_(\\d+)_.*”, “\\1”, geojson_df$Name)

Per fare in modo che le nostre mappe puntino verso nord dobbiamo proiettarle in modo da preservare la direzione. Possiamo farlo con il st_transform() funzione.

# define a CRS for so map always points due north
crs <- "+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs"

# transform data to CRS
geojson_df <- st_transform(geojson_df, crs)

Siamo quasi pronti per tracciare, ma prima dobbiamo dire a ggplot2 come deve essere colorato ciascun poligono. Di seguito è riportata la tavolozza dei colori utilizzata dal mio progetto, ma sentiti libero di personalizzare come desideri.

Opzionale: in questo passaggio possiamo anche calcolare i baricentri dei nostri poligoni con il st_centroid() funzione in modo da poter sovrapporre il numero della buca su ciascun green.

Immagine dell'autore
geojson_df <- geojson_df %>%
mutate(color = case_when(
grepl(“_tee$”, Name) ~ “#57B740”,
grepl(“_bunker$”, Name) ~ “#EDE6D3”,
grepl(“_water$”, Name) ~ “#2243b6”,
grepl(“_fairway$”, Name) ~ “#57B740”,
grepl(“_green$”, Name) ~ “#86D14A”,
grepl(“_hazard$”, Name) ~ “#094d1d”
)) %>%
mutate(centroid = st_centroid(geometry))

Siamo ufficialmente pronti a tracciare. Possiamo usare una combinazione di geom_sf(), testo_geografico()e persino punto_geografico() se vogliamo essere fantasiosi e tracciare scatti in cima alla nostra mappa. In genere rimuovo le griglie, le etichette degli assi e la legenda per un aspetto più pulito.

ggplot() +
geom_sf(data = geojson_df, aes(fill = color), color = "black") +
geom_text(data = filter(geojson_df, grepl("_green", Name)),
aes(x = st_coordinates(centroid)(, 1),
y = st_coordinates(centroid)(, 2),
label = hole_num),
size = 3, color = "black", fontface = "bold", hjust = 0.5, vjust = 0.5) +
scale_fill_identity() +
theme_minimal() +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
plot.title = element_text(size = 16),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()) +
theme(legend.position = "none") +
labs(title = 'Erin Hills | Hartford, WI')

Ed ecco qua: un campo da golf tracciato in R, che concetto!

Per visualizzare altri percorsi che ho tracciato al momento della stesura di questo articolo, puoi visitare la mia app Shiny: https://abodesy14.shinyapps.io/golfMapsR/

Se hai seguito, ti sei divertito o sei incuriosito, sentiti libero di provare a mappare i tuoi corsi preferiti e creare una Pull Request per il golfMapsR repository che mantengo: https://github.com/abodesy14/golfMapsR
Con un po' di sforzo congiunto, possiamo creare un piccolo e grazioso database di campi da golf tracciabili in tutto il mondo!

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *