/
leaflet.R
85 lines (74 loc) 路 1.89 KB
/
leaflet.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#' Leaflet
#'
#' Leaflet extension.
#'
#' @inheritParams e_bar
#' @param roam Whether to allow the user to roam.
#' @param template \code{urlTemplate}, should not be changed.
#' @param options List of options, including \code{attribution} and \code{label}.
#'
#' @examples
#' \dontrun{
#' url <- paste0(
#' "https://echarts.apache.org/examples/",
#' "data-gl/asset/data/population.json"
#' )
#' data <- jsonlite::fromJSON(url)
#' data <- as.data.frame(data)
#' names(data) <- c("lon", "lat", "value")
#' data$value <- log(data$value)
#'
#' data |>
#' e_charts(lon) |>
#' e_leaflet() |>
#' e_leaflet_tile() |>
#' e_scatter(lat, size = value, coord_system = "leaflet")
#' }
#'
#' @note Will not render in the RStudio, open in browser.
#'
#' @rdname leaflet
#' @export
e_leaflet <- function(e, roam = TRUE, ...) {
leaf <- list(...)
leaf$roam <- roam
leaf$tiles <- list()
# remove axis
e <- .rm_axis(e, TRUE, "x")
e <- .rm_axis(e, TRUE, "y")
e$x$opts$leaflet <- leaf
# add dependency
path <- system.file("htmlwidgets/lib/echarts-4.8.0/plugins", package = "echarts4r")
dep <- htmltools::htmlDependency(
name = "echarts-leaflet",
version = "1.0.0",
src = c(file = path),
script = "echarts-leaflet.js"
)
e$dependencies <- append(e$dependencies, htmlwidgets::getDependency("leaflet"))
e$dependencies <- append(e$dependencies, list(dep))
e
}
#' @rdname leaflet
#' @export
e_leaflet_tile <- function(
e,
template = "https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",
options = NULL,
...
) {
pkgs <- utils::installed.packages() |> rownames()
if (!"leaflet" %in% pkgs) {
stop("Requires the `leaflet` package installed", call. = FALSE)
}
if (!length(e$x$opts$leaflet$roam)) {
e <- e_leaflet(e)
}
tile <- list(...)
tile$urlTemplate <- template
if (!is.null(options)) {
tile$options <- options
}
e$x$opts$leaflet$tiles <- list(tile)
e
}