#r #shiny #leaflet
#r #блестящий #листовка
Вопрос:
Я использую пакет leaflet.extras R для добавления управления GPS внутри карты. Я использую расширение addControlGPS внутри своего кода :
... %>%
addControlGPS(options = gpsOptions(position = "topleft", activate = TRUE,
autoCenter = TRUE, maxZoom = 60,
setView = TRUE)) %>%
...
Контроллер работает нормально.
Мне нужно извлечь координаты Gps для повторного использования в моем коде в качестве аргументов для других функций. Есть ли какой-либо способ сделать это?
Ответ №1:
Каждый раз, когда местоположение GPS обновляется, координаты записываются в map.id '_gps_located'
. Вы можете найти все leaflet.extras
привязки в папке htmlwidgets / bindings в их git.
Рабочий пример
library(leaflet)
library(leaflet.extras)
library(shiny)
ui <- fluidPage(
leafletOutput('map')
)
server <- function(input, output, session) {
output$map <- renderLeaflet({ leaflet()%>%addTiles() %>%
addControlGPS(options = gpsOptions(position = "topleft", activate = TRUE,
autoCenter = TRUE, maxZoom = 60,
setView = TRUE))})
observe(
print(input$map_gps_located)
)
}
shinyApp(ui, server)
Ответ №2:
Недавно у меня была аналогичная проблема с приложением, над которым я работал.
Вы можете извлечь координаты GPS из карты листовки, используя функцию _marker_click, где находится метка карты, которую вы указываете в качестве вывода для инструкции визуализации листовки.
В моем случае вот фрагмент кода, который я использовал для извлечения координат. В моем случае выходным именем объекта карты было parksMap
поэтому полный ввод для рассмотрения при наблюдении за событием был parksMap_marker_click
. Это утверждение может быть сохранено в переменной (в моем случае pin
), в которой хранятся данные координат. Наконец, вам нужно обернуть все это в реактивное выражение, чтобы иметь возможность сохранять каждую координату при нажатии на точку на карте листовки.
# code to load the park card once the click event on a marker is intercepted
observeEvent(input$parksMap_marker_click, {
pin <- input$parksMap_marker_click
#print(Sys.time()) #uncomment to log coords
#print(pin) #uncomment to log coords
selectedPoint <- reactive(parks[parks$Latitude == pin$lat amp; parks$Longitude == pin$lng,])
leafletProxy("parksMap", data = selectedPoint()) %>% clearPopups() %>%
addPopups(~Longitude,
~Latitude,
popup = ~park_card(selectedPoint()$ParkName, selectedPoint()$ParkCode, selectedPoint()$State, selectedPoint()$Acres, selectedPoint()$Latitude, selectedPoint()$Longitude)
)
})
Полный репозиторий приложения на github доступен здесь.