SiH
SiH

Reputation: 1546

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

Upvotes: 1

Views: 208

Answers (1)

agenis
agenis

Reputation: 8377

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.

Upvotes: 2

Related Questions