Как получить координаты GPS с помощью листовки.дополнительно addControlGPS

#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 доступен здесь.