Я использую пакет листовка.дополнения R, чтобы добавить управление GPS на карту. Я использую расширение добавитьControlGPS внутри своего кода:
... %>%
addControlGPS(options = gpsOptions(position = "topleft", activate = TRUE,
autoCenter = TRUE, maxZoom = 60,
setView = TRUE)) %>%
...
Контроллер работает нормально.
Мне нужно извлечь координаты GPS для повторного использования в моем коде в качестве аргументов для других функций. Есть ли способ сделать это?
Недавно у меня была похожая проблема с приложением, над которым я работал.
Вы можете извлечь 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 & 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 доступен здесь.
Каждый раз, когда местоположение GPS обновляется, координаты записываются в map.id+'_gps_located'
. Вы можете найти все привязки leaflet.extras
в папке htmlвиджеты/привязки в их 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)