Используя плагин листовки бок о бок в R
Я попытался реализовать плагин "листовка рядом", используя примеры кодов из " Использование произвольных плагинов Leaflet JS с Leaflet для R". Кажется простым, но пока безуспешно. Я не мог понять, что я делаю не так. Очень признателен за ваш ответ. Спасибо,
library(leaflet)
library(htmltools)
library(htmlwidgets)
LeafletSideBySidePlugin <- htmlDependency("leaflet-side-by-side","2.0.0",
src = c(href="https://github.com/digidem/leaflet-side-by-side"),
script="leaflet-side-by-side.js")
# A function that takes a plugin htmlDependency object and adds
# it to the map. This ensures that however or whenever the map
# gets rendered, the plugin will be loaded into the browser.
registerPlugin <- function(map, plugin) {
map$dependencies <- c(map$dependencies, list(plugin))
map
}
leaflet() %>% addTiles() %>%
setView(lng = 12, lat = 50, zoom = 4) %>%
# Register leaflet-side-by-side plugin on this map instance
registerPlugin(LeafletSideBySidePlugin) %>%
onRender("
function(el, x) {
var mylayer1 = L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
maxZoom: 18
})
var mylayer2 = L.tileLayer(
'//stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png',{
maxZoom: 14
})
L.control.sideBySide(mylayer1, mylayer2).addTo(this);
")
1 ответ
Просто наткнуться на этот вопрос.
Я думаю, что вам не хватает метода addTo() для каждого слоя карты тайлов. вот должно быть.
leaflet() %>% addTiles() %>%
setView(lng = 12, lat = 50, zoom = 4) %>%
# Register leaflet-side-by-side plugin on this map instance
registerPlugin(LeafletSideBySidePlugin) %>%
onRender("
function(el, x) {
var mylayer1 = L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
maxZoom: 18
}).addTo(this);
var mylayer2 = L.tileLayer(
'//stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png',{
maxZoom: 14
}).addTo(this);
L.control.sideBySide(mylayer1, mylayer2).addTo(this);
")
Я хотел бы поблагодарить Абува за его ответ. Если кому-то интересно, почему это все еще не работает, так это потому, что в onRender JavaScript есть непревзойденный знак '{'.
Также убедитесь, что ваш источник htmlDependency действительно существует. jsdelivr предоставляет большинство библиотек js, доступных через npm и github в формате application/javascript. Используя это вместо исходного пути github, полный рабочий код должен быть следующим:
library(leaflet)
library(htmltools)
library(htmlwidgets)
LeafletSideBySidePlugin <- htmlDependency("leaflet-side-by-side","2.0.0",
src = c(href="https://cdn.jsdelivr.net/gh/digidem/leaflet-side-by-side@2.0.0/"),
script="leaflet-side-by-side.js")
# A function that takes a plugin htmlDependency object and adds
# it to the map. This ensures that however or whenever the map
# gets rendered, the plugin will be loaded into the browser.
registerPlugin <- function(map, plugin) {
map$dependencies <- c(map$dependencies, list(plugin))
map
}
leaflet() %>% addTiles() %>%
setView(lng = 12, lat = 50, zoom = 4) %>%
# Register leaflet-side-by-side plugin on this map instance
registerPlugin(LeafletSideBySidePlugin) %>%
onRender("
function(el, x) {
var mylayer1 = L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
maxZoom: 18
}).addTo(this);
var mylayer2 = L.tileLayer(
'//stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png',{
maxZoom: 14
}).addTo(this);
L.control.sideBySide(mylayer1, mylayer2).addTo(this);
}")