Добавьте метки на карту временной шкалы, созданную с помощью плагина leaftime для листовки в R - PullRequest
0 голосов
/ 24 января 2020

Ниже приведен пример кода, взятый из примеров, приведенных в документации для пакета R leaftime. Он создает карту с временной шкалой, которая показывает точки, появляющиеся с течением времени. Я бы хотел, чтобы к точкам добавлялись ярлыки, показывающие идентификационный номер каждой точки. Глядя на код, я предполагаю, что функция JS в коде фактически передает JavaScript в листовку для настройки карты. Отсюда https://gis.stackexchange.com/questions/245621/how-to-label-geojson-points-in-leaflet я понимаю, что мне нужно добавить функцию всплывающей подсказки, но я не смог изменить приведенный ниже код R для достижения желаемого результата. Буду благодарен за любую помощь.

library(leaflet)
library(leaftime)
library(htmltools)

#Build data.frame
power <- data.frame(
"Latitude" = c(
  33.515556, 38.060556, 47.903056, 49.71, 49.041667, 31.934167,
  54.140586, 54.140586, 48.494444, 48.494444
),
"Longitude" = c(
  129.837222, -77.789444, 7.563056, 8.415278, 9.175, -82.343889,
  13.664422, 13.664422, 17.681944, 17.681944
),
"start" = seq.Date(as.Date("2015-01-01"), by = "day", length.out = 10),
"end" = as.Date("2015-01-10")
)
power$id<-seq.int(nrow(power))

# use geojsonio to convert data.frame
power_geo <- geojsonio::geojson_json(power,lat="Latitude",lon="Longitude")

leaflet(power_geo) %>%
addTiles() %>%
setView(44.0665,23.74667,2) %>%
addTimeline(
  timelineOpts = timelineOptions(
    pointToLayer = htmlwidgets::JS(
      "
      function(data, latlng) {
      return L.circleMarker(latlng, {
      radius: 10,
      color: 'black',
      fillColor: 'pink',
      fillOpacity: 1
      })
      }
      "
    )
    )
  )

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Расширяя ответ от Falke Design, вот полный код для добавления id к метке.

library(leaflet)
library(leaftime)
library(htmltools)

#Build data.frame
power <- data.frame(
"Latitude" = c(
  33.515556, 38.060556, 47.903056, 49.71, 49.041667, 31.934167,
  54.140586, 54.140586, 48.494444, 48.494444
),
"Longitude" = c(
  129.837222, -77.789444, 7.563056, 8.415278, 9.175, -82.343889,
  13.664422, 13.664422, 17.681944, 17.681944
),
"start" = seq.Date(as.Date("2015-01-01"), by = "day", length.out = 10),
"end" = as.Date("2015-01-10")
)
power$id<-seq.int(nrow(power))

# use geojsonio to convert data.frame
power_geo <- geojsonio::geojson_json(power,lat="Latitude",lon="Longitude")

leaflet(power_geo) %>%
  addTiles() %>%
  setView(44.0665,23.74667,2) %>%
  addTimeline(
    timelineOpts = timelineOptions(
      pointToLayer = htmlwidgets::JS(
        "
        function(data, latlng) {
          return L.circleMarker(latlng, {
            radius: 10,
            color: 'black',
            fillColor: 'pink',
            fillOpacity: 1
          }).bindTooltip(
            // data.properties will have the columns from sf in R
            'id: ' + data.properties.id + '<br/>start: ' + data.properties.start,
            {permanent: true}
          ).openTooltip()
        }
        "
      )
    )
  )
0 голосов
/ 24 января 2020

Попробуйте:

pointToLayer = htmlwidgets::JS(
      "
      function(data, latlng) {
      return L.circleMarker(latlng, {
      radius: 10,
      color: 'black',
      fillColor: 'pink',
      fillOpacity: 1
      }).bindTooltip('I am a circle.',{permanent: true}).openTooltip();
      }
      "
    )

Вот пример с нормальным JS: https://jsfiddle.net/falkedesign/yqfs1bnk/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...