Как получить GPS-координаты с leaflet.extras addControlGPS - PullRequest
1 голос
/ 07 апреля 2019

Я использую пакет leaftlet.extras R, чтобы добавить элемент управления Gps внутри карты.Я использую расширение addControlGPS внутри моего кода:

...   %>% 
addControlGPS(options = gpsOptions(position = "topleft", activate = TRUE, 
                                             autoCenter = TRUE, maxZoom = 60, 
                                             setView = TRUE))  %>%
...

Контроллер работает нормально.

Мне нужно извлечь координаты GPS для повторного использования в моемкод в качестве аргументов для других функций.Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Каждый раз, когда местоположение 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)
0 голосов
/ 07 апреля 2019

У меня недавно была похожая проблема с приложением, над которым я работал.

Вы можете извлечь координаты 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 приложения доступен здесь .

...