Open idshklein opened 3 years ago
This is an issue I have as well! I'm not sure how ggmap does its rendering, but I do know that the tile map engine that ggspatial uses is outdated (I wrote it nearly 7 years ago!). I need to update the engine for totally unrelated reasons; however, you could try to pre-cache the image and plot it separately. Here's my hack-job of an example (which takes ~ 45 secs to render).
require(gganimate)
require(tidyverse)
require(lubridate)
require(maps)
require(mapdata)
library(sf)
library(ggspatial)
# import data hosted in my github rep.
typhoon_data <- read.csv("https://raw.github.com/wenlong-liu/typhoon_animation/master/Data/typhoon_doksuri.csv")
# data cleaning.
tracks <- typhoon_data %>%
# reforamt date time using lubridate package.
mutate(time = mdy_hm(time)) %>%
# rename columns.
rename(long = lng)
track_sf <- tracks %>%
st_as_sf(coords = c("long","lat"), crs = 4326)
# pre cache a single image
tracks_box <- sp::bbox(as(track_sf, "Spatial"))
rownames(tracks_box) <- c("x", "y")
img <- rosm::osm.image(tracks_box)
img_box <- attr(img, "bbox")
ggplot(tracks) +
# annotation_map_tile() +
annotation_raster(img, img_box[1], img_box[3], img_box[2], img_box[4], TRUE) +
geom_spatial_point(data = tracks, mapping = aes(x = long, y = lat, color = pressure)) +
geom_spatial_path(data = tracks, mapping = aes(x = long, y = lat, color = pressure), size = 2) +
scale_color_continuous(name = "Pressure(hPa)",low = "yellow", high = "red")+
labs(title = "Tracking of Typhoon Doksuri happened in 2017",
subtitle = "Time:{frame_along}",
x = "Long", y = "Lat",
caption = "Data Source: jswater.jiangsu.gov.cn")+
transition_reveal(time) +
coord_sf(crs = 3857)
annotation_map_tile is amazing because it allows the addition of basemaps, without needing a non-fully-ggplot2 syntax as in ggmap. however, when rending an animation with both packages, it seems that ggmap is WAY faster, maybe because it doesn't require the rendering of the basemap each time. Let's take the example from the gganimate wiki:
this takes about 5 seconds.
when trying to recreate with ggspatial (and enjoying much cleaner syntax), it takes about 5 minutes:
can this be solved, or that ggmap and ggspatial work in totally different ways regarding rendering?