add_polygon в mapdeck уменьшает масштаб карты - PullRequest
1 голос
/ 16 мая 2019

Когда я добавляю простую карту в свое блестящее приложение, без добавления полигонов, аргумент масштабирования работает правильно, и карта инициализируется, как и должно.

С другой стороны, когда я добавляю полигоны с помощью add_polygon (), карта инициализируется более уменьшенной, чем должна.

Почему это происходит?

Это мой код:

library(mapdeck)
library(sf)

sf = st_as_sf(my_LargeSpatialPolygonDataframe)

output$my_map = renderMapdeck({

    mapdeck(token = mytoken, location = c(a, b), zoom = 12,
            bearing = -45.00, pitch = 0, style = 'mapbox://styles/mapbox/light-v9') %>%

    add_polygon(data = sf,
                stroke_colour = "#000000",
                stroke_width = 20,
                stroke_opacity = 200,
                fill_opacity = 0,
                layer = "init_polygons")
})

1 Ответ

2 голосов
/ 17 мая 2019

Когда вы добавляете слой с помощью одной из функций add_, слой рассчитывает уровень масштабирования, необходимый для размещения всех данных в рамке окна. Вы можете остановить это поведение, используя update_view = FALSE

Вот воспроизводимый пример

настройка местоположения в mapdeck ()

Здесь слой add_polygon() изменит масштаб карты, чтобы показать все данные в слое. Это поведение, которое вы видите.

library(mapdeck)

set_token("MAPBOX_TOKEN")

mapdeck(
  location = c(144.9, -37.8)
  , zoom = 11
  , bearing = -45.00
  , pitch = 0
  , style = mapdeck_style("light")
  ) %>%
  add_polygon(
    data = spatialwidget::widget_melbourne
    , stroke_colour = "#000000"
    , stroke_width = 20
    , stroke_opacity = 200
    , fill_opacity = 0
    , layer_id = "init_polygons"
    )

enter image description here

с использованием update_view = FALSE

Это говорит слою не обновлять вид, поэтому будут использоваться ваши исходные значения location().

mapdeck(
  location = c(144.9, -37.8)
  , zoom = 11
  , bearing = -45.00
  , pitch = 0
  , style = mapdeck_style("light")
  ) %>%
  add_polygon(
    data = spatialwidget::widget_melbourne
    , stroke_colour = "#000000"
    , stroke_width = 20
    , stroke_opacity = 200
    , fill_opacity = 0
    , layer_id = "init_polygons"
    , update_view = F
    )

enter image description here

...