Pequeño bug en ggmap: no pinta el último tramo de una ruta

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

ruta1

y

ruta2

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.

4 comentarios sobre “Pequeño bug en ggmap: no pinta el último tramo de una ruta

  1. Iñaki 2 marzo, 2016 11:48

    Más que un bug, parece cierta limitación que impone la función geom_path, que es de ggplot2. Por eso la función route tiene el parámetro structure, que hay que poner a structure="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 y ruta2.

  2. KL 2 marzo, 2016 11:58

    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.

  3. Iñaki 2 marzo, 2016 12:02

    Y para pintar «legs», está geom_leg. Es decir, sustituye en tu código original geom_path por geom_leg y produce el mismo resultado (correcto) que mi código anterior.

  4. FJROAR 2 marzo, 2016 12:49

    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

Los comentarios están desabilitados.