GPS Usando el API de Google realizamos una guía de cafeterías cercanas al Tec para todos los estudiantes interesados en consumir un café fuera del campus pero sin alejarse tanto de la zona, así como también un aproximado de sus distancias al punto medio del campus.
library(raster)
library(rgdal)
library(sp)
library(leaflet)
library(dplyr)
library(ggplot2)
library(ggmap)
library(geosphere)
Tecnológico de Monterrey: 25.650463793111417, -100.28971996588048 (lat/lon)
Café Cacao: 25.650605186770168, -100.2934551987105 (lat/lon)
Starbucks: 25.644956888339163, -100.28856284946582 (lat/lon)
Mille Délices: 25.64805187951025, -100.29078371856558 (lat/lon)
Mala Kaffe: 25.648894619817884, -100.28413152357201 (lat/lon)
Ichigo: 25.649989994144743, -100.28679811947106 (lat/lon)
# Se crea un data frame con las coordenadas de las cafeterías anteriormente seleccionadas.
df <- data.frame(
Nombre = c("Café Cacao", "Starbucks", "Mille Délices", "Mala Kaffe", "Ichigo"),
Latitud = c(25.650605186770168, 25.644956888339163, 25.64805187951025, 25.649367226437832, 25.649989994144743),
Longitud = c(-100.2934551987105, -100.28856284946582, -100.29078371856558, -100.29409892885957, -100.28679811947106)
)
# Se registra la API de Google para poder tomar como referencia las distancias reales que usa Google Maps como valores.
register_google(key = "AIzaSyDhtCgWs3bQvXoxuXCxne15Tk0NCKXVkT8")
# Se designa y gráfican las coordenadas de la TECstore como un aproximado de la parte central del campus en su interior.
mty <- get_map(location = "25.650463793111417, -100.28971996588048", maptype = "roadmap", zoom = 16)
ggmap(mty)
# Se grafican las coordenadas de las 5 cafeterías.
puntos <- leaflet(df) %>%
addTiles() %>%
addMarkers(lng = ~Longitud, lat = ~Latitud, label = ~Nombre)
puntos
# Se juntan ambos sets de coordenadas, para tener el punto de referencia base, con los puntos que se buscan obtener sus distancias.
mapa <- ggmap(mty) +
geom_point(data = df, aes(x = Longitud, y = Latitud), color = "purple", size = 5) +
geom_text(data = df, aes(x = Longitud, y = Latitud, label = Nombre), vjust = 1.8, color = "purple", size = 4, fontface = "bold")
mapa
# Se calculan las distancias entre las coordenadas de cada cafetería con respecto al Tec, y agregamos una nueva columna con las distancias calculadas.
df$Distancia_km <- distm(cbind(df$Longitud, df$Latitud), c(-100.28971996588048, 25.650463793111417))/1000
df <- arrange(df, Distancia_km)
df
## Nombre Latitud Longitud Distancia_km
## 1 Mille Délices 25.64805 -100.2908 0.2877573
## 2 Ichigo 25.64999 -100.2868 0.2980477
## 3 Café Cacao 25.65061 -100.2935 0.3753894
## 4 Mala Kaffe 25.64937 -100.2941 0.4561757
## 5 Starbucks 25.64496 -100.2886 0.6210354
# Calculo de las coordenadas medias entre cada cafetería y el Tec, para que al hacer los cálculos, tome como base la distancia que hay entre cada una con el Tec como punto central/base.
df$Latitud_media <- (df$Latitud + 25.650463793111417) / 2
df$Longitud_media <- (df$Longitud - 100.28971996588048) / 2
# Graficar las distancias
mapa_lineas <- ggmap(mty) +
geom_segment(data = df, aes(x = Longitud, y = Latitud, xend = -100.28971996588048, yend = 25.650463793111417), color = "purple", size = 0.5) +
geom_text(data = df, aes(x = Longitud_media, y = Latitud_media, label = paste("Dist:", round(Distancia_km, 2), "km")), vjust = -0.5, color = "red", size = 4.8, fontface = "bold") +
geom_point(data = df, aes(x = Longitud, y = Latitud), color = "purple", size = 5) +
geom_text(data = df, aes(x = Longitud, y = Latitud, label = Nombre), vjust = 1.8, color = "purple", size = 3.8, fontface = "bold")
mapa_lineas
# Mapa de color basado en las distancias entre las coordenadas de cada cafetería y el Tec, entré más cerca más morado (oscuro) y entre más lejos, más rosado (claro).
mapa_color <- ggmap(mty) +
geom_point(data = df, aes(x = Longitud, y = Latitud, color = Distancia_km), size = 5) +
scale_color_gradient(low = "purple", high = "pink") +
geom_text(data = df, aes(x = Longitud, y = Latitud, label = Nombre, color = Distancia_km), vjust = -1, size = 6, fontface = "bold") +
scale_color_gradient(low = "purple", high = "pink")
mapa_color