Проблемы с `addPolylines ()` не отображаются с данными из пакета `osmdata` - PullRequest
0 голосов
/ 28 мая 2019

У меня проблемы с leaflet::addPolylines использованием sf объектов с Leaflet для R.

Ниже приведен код, который я использую для извлечения (в качестве случайного примера) железной дороги вЛондон.

library(osmdata)
library(leaflet)
library(sf)
library(ggplot2)

# Get Data
dlr <-
  opq("London, UK") %>% 
  add_osm_feature(key = "line", value = "DLR") %>% 
  osmdata_sf()

str(dlr$osm_lines)

# Classes ‘sf’ and 'data.frame':    213 obs. of  25 variables:
#   $ osm_id         : chr  "3636480" "3663203" "4005749" "4005750" ...
# $ name           : chr  "Docklands Light Railway" "Docklands Light Railway" "Docklands Light Railway" "Docklands Light Railway" ...
# $ bridge         : chr  "viaduct" "viaduct" NA NA ...
# $ covered        : chr  NA NA NA NA ...
# $ cutting        : chr  NA NA NA NA ...
# $ disused.railway: chr  NA NA NA NA ...
# $ electrified    : chr  "rail" "rail" "rail" "rail" ...
# $ fixme          : chr  NA NA NA NA ...
# $ frequency      : chr  "0" "0" "0" "0" ...
# $ gauge          : chr  "1435" "1435" "1435" "1435" ...
# $ layer          : chr  "1" "1" "-2" "-2" ...
# $ level          : chr  NA NA NA NA ...
# $ line           : chr  "DLR" "DLR" "DLR" "DLR" ...
# $ note           : chr  NA NA "Route guessed" "Route guessed" ...
# $ oneway         : chr  NA NA NA NA ...
# $ railway        : chr  "light_rail" "light_rail" "light_rail" "light_rail" ...
# $ service        : chr  NA NA NA NA ...
# $ short_name     : chr  NA NA NA NA ...
# $ source         : chr  NA NA NA NA ...
# $ source_ref     : chr  NA NA NA NA ...
# $ start_date     : chr  NA NA NA NA ...
# $ track_detail   : chr  NA NA NA NA ...
# $ tunnel         : chr  NA NA "yes" "yes" ...
# $ voltage        : chr  "750" "750" "750" "750" ...
# $ geometry       :sfc_LINESTRING of length 213; first list element:  'XY' num [1:4, 1:2] -0.0673 -0.0669 -0.0664 -0.0661 51.5111 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : chr  "18019994" "1842525419" "1752475375" "18019985"
# .. ..$ : chr  "lon" "lat"
# - attr(*, "sf_column")= chr "geometry"
# - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ...
# ..- attr(*, "names")= chr  "osm_id" "name" "bridge" "covered" ...

Тогда, построение графиков с использованием ggplot() и geom_sf() нормально:

dlr$osm_lines %>% 
  ggplot() + geom_sf()

DLR map using ggplot

Ноне с Leaflet:

dlr$osm_lines %>% 
  leaflet() %>% 
  addProviderTiles("Stamen.Watercolor") %>% 
  addPolylines()

DLR map! using Leaflet

Извиняюсь за ненужную акварель - просто хотел, чтобы было совершенно ясно, что линий не было.

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Похоже, это проблема с именами, заданными в геометрии линий, после недавних обновлений - см. Обсуждение здесь https://github.com/r-spatial/sf/issues/880 - где предлагается просто удалить их.

Это работает для меня с вашим примером ...

names(st_geometry(dlr$osm_lines)) = NULL

dlr$osm_lines %>% 
  leaflet() %>% 
  addProviderTiles("Stamen.Watercolor") %>% 
  addPolylines()
0 голосов
/ 18 июля 2019

Надеемся, что это будет решено обновлением листовки - см. https://github.com/rstudio/leaflet/issues/631.

...