Supongo que no debería escribirlo aquí sino comunicárselo a quien mantiene ggmap
. Pero ya tuve una experiencia mejorable con él y dos no serán. Así que lo cuento por acá.
La mayor parte del mérito en el descubrimiento, en cualquier caso, es de una alumna de la clase de R que he dado hoy (en el momento en el que escribo, no en el que lees) en el Banco de Santander. No tengo su nombre ni tengo claro que quisiese que lo mencionase.
Y el bug se manifiesta así:
library(ggmap) mapa <- get_map("calle Embajadores 10, Madrid", zoom = 18) ruta1 <- route("calle embajadores 4, Madrid,", "calle oso 15, Madrid", mode = "walking") ruta2 <- route("calle oso 15, Madrid", "calle embajadores 4, madrid", mode = "walking") ggmap(mapa) + geom_path(data = ruta1, aes(x = startLon, y = startLat, xend = endLon, yend = endLat)) ggmap(mapa) + geom_path(data = ruta2, aes(x = startLon, y = startLat, xend = endLon, yend = endLat))
que es un código que pinta
y
respectivamente, cuando lo que debería representar en ambos casos es una ruta en forma de ele compuesta de dos segmentos, que son los que contienen tanto ruta1
como ruta2
.
Más que un bug, parece cierta limitación que impone la función
geom_path
, que es deggplot2
. Por eso la funciónroute
tiene el parámetrostructure
, que hay que poner astructure="route"
para pintar rutas. Esto funciona correctamente:library(ggmap)
mapa <- get_map("calle Embajadores 10, Madrid", zoom = 18)
ruta1 <- route("calle embajadores 4, Madrid,",
"calle oso 15, Madrid",
mode = "walking", structure="route")
ruta2 <- route("calle oso 15, Madrid",
"calle embajadores 4, madrid",
mode = "walking", structure="route")
ggmap(mapa) + geom_path(data = ruta1, aes(x = lon, y = lat))
ggmap(mapa) + geom_path(data = ruta2, aes(x = lon, y = lat))
Fíjate en el contenido de las variables
ruta1
yruta2
.geom_segment
ggmap(mapa) + geom_segment(data = ruta1, aes(x = startLon,
y = startLat,
xend = endLon,
yend = endLat))
ggmap(mapa) + geom_segment(data = ruta2, aes(x = startLon,
y = startLat,
xend = endLon,
yend = endLat))
Saludos.
Y para pintar «legs», está
geom_leg
. Es decir, sustituye en tu código originalgeom_path
porgeom_leg
y produce el mismo resultado (correcto) que mi código anterior.Creo que no está bien expresada la parte final del código, sin cambiar tu código inicial, a partir de la definición de ruta2, lo siguiente dibuja una L:
dibujo <- ggmap(mapa) + geom_path(data = ruta1, aes(x = startLon,
y = startLat,
xend = endLon,
yend = endLat))
dibujo <- dibujo + geom_path(data = ruta2, aes(x = startLon,
y = startLat,
xend = endLon,
yend = endLat))
dibujo