Сеть для R Shiny / R Studio + rMaps с KML
Это продолжение вопроса, опубликованного здесь
Используя код, разработанный jdharrison и Обсуждение здесь, вот минимальный пользовательский интерфейс.R:
library(shiny);library(rCharts)
shinyUI(fluidPage(
mainPanel(
tabPanel("Interactive", tags$style('.leaflet {height: 1000px;}'),
showOutput('mapPlot', 'leaflet'))
)) )
И минимальный сервер.R:
library(shiny);library(rCharts);library(rMaps)
shinyServer(function(input, output,session) {
output$mapPlot <- renderMap({
map1 = Leaflet$new()
map1$setView(c(45.5236, -122.675), 13)
map1$tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png")
map1$addAssets(css = NULL, jshead = 'http://harrywood.co.uk/maps/examples/leaflet/leaflet-plugins/layer/vector/KML.js')
map1$addKML('leaflet/placemark.kml')
leafletLib <- file.path(find.package("rMaps"), "libraries", "leaflet")
sampleKml <- readLines('http://kml-samples.googlecode.com/svn/trunk/kml/Placemark/placemark.kml')
write(sampleKml, file.path(leafletLib, 'placemark.kml'))
map1
}) })
Когда я запускаю shiny::runApp() на моем сервере с RStudio или на живом веб-сайте, я получаю пустую карту, аналогичную проблеме, которая была у меня локально до вышеупомянутого решения.
Я уверен, что это как-то связано с расположением файла KML и, возможно, файла разрешения, но у меня возникли некоторые трудности с получением его для работы с файлом KML.
Спасибо за любые советы или ресурсы, которые у вас могут быть.
Обновление: я попробовал его локально и получил тот же результат. Так что я не уверен, что это как-то связано с моей серверной сетью...
1 ответ:
Здесь есть несколько вопросов.
rChartsпереопределяетrMaps, когда они оба загружены. Таким образом, вызовLeaflet$newна самом деле исходит из пакетаrCharts. Также невозможно использовать методaddAssets, который использовался ранее. Необходимо изменить файлlibraries/leaflet/config.ymlи добавитьleaflet-kml.jsссылка. Также необходимо загрузить этот файл вlibraries/leaflet/external/leaflet-kml.jsСначала мы добавим плагин к файлам javascript листовки rcharts
require(yaml) leafletLib <- file.path(find.package("rCharts"), "libraries", "leaflet") rMapsConfig <- yaml.load_file(file.path(leafletLib, "config.yml")) # add a kml library kmlLib <- readLines("http://harrywood.co.uk/maps/examples/leaflet/leaflet-plugins/layer/vector/KML.js") write(kmlLib, file.path(leafletLib, "external", "leaflet-kml.js")) # add the library to config.yml rMapsConfig$leaflet$jshead <- union(rMapsConfig$leaflet$jshead , "external/leaflet-kml.js") write(as.yaml(rMapsConfig), file.path(leafletLib, "config.yml"))Теперь мы можем посмотреть на использование блестящего
library(shiny) library(rCharts) library(rMaps) runApp( list(ui =fluidPage( titlePanel("Hello Shiny!"), sidebarLayout( sidebarPanel( sliderInput("obs", "Number of observations:", min = 0, max = 1000, value = 500) ), mainPanel( tabsetPanel( tabPanel("Interactive", tags$style('.leaflet {height: 1000px;}'), showOutput('mapPlot', 'leaflet')) ) ) ) ), server = function(input, output,session) { output$mapPlot <- renderUI({ map1 = Leaflet$new() map1$setView(c(45.5236, -122.675), 13) map1$tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png") map1$addKML('leaflet/placemark.kml') leafletLib <- file.path(find.package("rCharts"), "libraries", "leaflet") sampleKml <- readLines('http://kml-samples.googlecode.com/svn/trunk/kml/Placemark/placemark.kml') write(sampleKml, file.path(leafletLib, 'placemark.kml')) HTML(map1$html(chartId = "mapPlot"))}) }) )

Comments