Search code examples
rggplot2ggmap

plot GPS position over the road


How can I plot GPS trajectory over road and zoom on that road?

Can someone please take a point (40.74640013950355, -73.98755303328286, in Manhattan) and plot it over the corresponding road network [may be a grid 600ft by 600ft]. Please edit the code below to illustrate -

lat <- 40.74640013950355
long <- -73.98755303328286

tbl <- tibble(lat, long)

ggplot(data = tbl,
       aes(x = lat,
           y = long)) +
  geom_point()

Once I know how to plot the road and I can overlay my trajectory data by modifying tbl above.

Thanks


Solution

  • There is no big difficulty to achieve such plot, starting from the example given in tigris library:

    library(tigris)
    library(ggplot2)
    library(ggthemes)
    roads <- roads("Maine", "031")
    gg <- ggplot() + geom_sf(data = roads, color="black", fill="white", size=0.25) + theme_map()
    lat <- 43.5; long <- -70.6; bbox = 0.02 
    bbox_gg = coord_sf(xlim=c(long-bbox/2, long+bbox/2), ylim=c(lat-bbox/2, lat+bbox/2))
    gg + geom_point(data=data.frame(lat, long), aes(x=long, y=lat), size=4, color="red") + bbox_gg
    

    What is done here is just adding a geom_point() aesthetic on top of the geom_sf() layer. We can use a kind of bounding box coordinate limit to adjust the zoom

    enter image description here

    EDIT

    If you need some road names on your map, you can add this to the plot: geom_sf_label(data=subset(roads, roads$RTTYP!="M"), aes(label=FULLNAME)) here I use subset to avoid plotting all little road names. Eventually, you might want to find a way to zoom/subset your data before plotting, because it's gonna be too long to do it like this.