Можно ли раскрасить путь по высоте? - PullRequest
2 голосов
/ 04 февраля 2020

Я использую mapdeck::add_path(), чтобы показать траекторию полета самолета. Я хотел бы раскрасить дорожки по высоте; Это возможно? Вот краткий пример:

library(mapdeck)
library(sf)
# From https://github.com/kent37/mapdeck_play/blob/master/tracks_2019_03_11.gpkg?raw=true
one_day = st_read('tracks_2019_03_11.gpkg')

key = 'your_api_key'
mapdeck(location=c(-71.128184, 42.3769824), zoom=14, key=key) %>% 
  add_path(one_day)

enter image description here

Спасибо!

1 Ответ

2 голосов
/ 04 февраля 2020

В настоящее время невозможно иметь разноцветную path, но она есть в моем списке todo .

Чтобы добиться того, что вам нужно, вам придется использовать слой line, который принимает 'origin' и 'destination' и dr aws прямую линию (т. е. составные части path)

Чтобы получить столбцы Origin-Destination, мы необходимо разложить объект sf на data.frame, добавить столбцы '_to', а затем снова сделать его объектом sf.

(у меня также есть todo для разрешить data.frames использовать Z и M, но сейчас мы должны сделать это окончательное преобразование в sf снова)

library(data.table)
library(sfheaders)

df <- sfheaders::sf_to_df( one_day, fill = TRUE )

setDT( df )[
  , `:=`(
    x_to = shift(x, type = "lead")
    , y_to = shift(y, type = "lead")
    , z_to = shift(z, type = "lead")
    , m_to = shift(m, type = "lead")
    )
  , by = flight
]

df <- df[ !is.na( x_to ) ]

df$origin <- sfheaders::sfc_point(
  obj = df
  , x = "x"
  , y = "y"
  , z = "z"
  , m = "m"
)

df$destination <- sfheaders::sfc_point(
  obj = df
  , x = "x_to"
  , y = "y_to"
  , z = "z_to"
  , m = "m_to"
)

sf <- sf::st_as_sf( df )

mapdeck(
  style = mapdeck_style("dark")
) %>%
  add_line(
    data = sf
    , origin = "origin"
    , destination = "destination"
    , stroke_colour = "z"
  )

enter image description here

...