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.

Importar librerías

library(raster)
library(rgdal)
library(sp)
library(leaflet)
library(dplyr)
library(ggplot2)
library(ggmap)
library(geosphere)

Coordenadas del punto de referencia base/central “Tec de Monterrey”:

Tecnológico de Monterrey: 25.650463793111417, -100.28971996588048 (lat/lon)

Coordenadas de las cafeterías más cercanas al Tec:

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)

Obtener los datos

# 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)
)

Clave API de Google Cloud

# Se registra la API de Google para poder tomar como referencia las distancias reales que usa Google Maps como valores.

register_google(key = "AIzaSyDhtCgWs3bQvXoxuXCxne15Tk0NCKXVkT8")

Mapa con coordenadas del Tec

# 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)

Mapa con coordenadas de las cafeterías

# Se grafican las coordenadas de las 5 cafeterías.

puntos <- leaflet(df) %>% 
  addTiles() %>% 
  addMarkers(lng = ~Longitud, lat = ~Latitud, label = ~Nombre) 
puntos

Superponer ambos mapas

# 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

Calcular distancias

# 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

Mapa con distancias

# 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 con distancias

# 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