Skip to contents

deckglgeoarrow provides functions to quickly add layers to a mapgl::maplibregl() map.

Layers

Currently, the following add*Layer functions are available:

  • addGeoarrowScatterplotLayer - points
  • addGeoarrowPathLayer - lines
  • addGeoarrowPolygonLayer - polygons

All layers accept one of three data related inputs:

  • data - an R object from packages wk, sf, geos or terra
  • file - a local file path to a geoarrow or geoparquet file
  • url - a remote URL pointing to a geoarrow or geoparquet file

In addition, mainly for developers, nanoarrow_array_streams are also supported.

Styles

For style customisation, all (Deck.gl) layers have two types of properties:

  • render_options — constant properties across a layer (use function renderOptions())
  • data_accessors — properties that can vary across rows (use function dataAccessors())

Additionally, popup(s) and tooltip(s) can be defined in various ways:

  • TRUE - all attributes of a feature will be displayed
  • NULL/FALSE - no popup/tooltip will be shown
  • a character vector of column names - only the specified attribute columns will be shown

Similar to the style cusomisation mentioned above, popups and tooltips can be customised using popup_options via function popupOptions() and tooltip_options via function tooltipOptions()

Example

Putting this together, here’s example showing 1k points using addGeoarrowScatterplotLayer

library(mapgl)
library(deckglgeoarrow)
library(wk)

style_openfreemap = 'https://tiles.openfreemap.org/styles/liberty'

n = 1e3

pts = data.frame(
  id = 1:n
  , geometry = xy(
    x = runif(n, -180, 180)
    , y = runif(n, -90, 90)
    , crs = 4326
  )
)

pts$radius = sample.int(15, nrow(pts), replace = TRUE)
pts$fillColor = sample(hcl.colors(n, alpha = sample(seq(0, 1, length.out = n))))
pts$lineWidth = sample.int(5, nrow(pts), replace = TRUE)
pts$lineColor = sample(
  hcl.colors(n, alpha = sample(seq(0, 1, length.out = n)), palette = "inferno")
)

maplibre(style = style_openfreemap) |>
  addGeoArrowScatterplotLayer(
    data = pts
    , layer_id = "scatter"
    , geom_column_name = "geometry"
    , render_options = renderOptions(
      beforeId = "water"
    )
    , data_accessors = dataAccessors(
      getRadius = "radius"
      , getFillColor = "fillColor"
      , getLineWidth = "lineWidth"
      , getLineColor = "lineColor"
    )
    , popup = TRUE
    , popup_options = popupOptions(
      anchor = "bottom-right"
    )
    , tooltip = "id"
    , tooltip_options = tooltipOptions(
      anchor = "top-left"
      , closeOnMove = TRUE
    )
  ) |>
  add_navigation_control(visualize_pitch = TRUE) |>
  set_view(c(0, 0), 2) |>
  add_globe_control() |>
  add_layers_control(
    layers = list("Scatter Layer" = generateDeckglLayerId(
      layer_id = "scatter", beforeId = "water")
    )
  )

More examples can be found here.