Проблема с данными: addAwesomeMarkers требует lng, lat, но мои данные хранятся в векторе. Работа вокруг?

Я работаю над картой с помощью Leaflet in R. Мои данные хранятся в виде координат x, y, которые теперь преобразованы в значения lng, lat.

Набор данных: Dambrug2019 (мой собственный набор данных, чтобы избежать путаницы в следующем примере кода).

           Name Status      x       y
1       Point_1      0 482670 6217698

Преобразовать:

Locations <- st_as_sf(Dambrug2019, coords=c("x", "y")) 
%>% st_set_crs(23032) %>% st_transform(4326)

Name Status                  geometry
1         Point_1     1 POINT (8.720061 56.10223)

При создании карты с одинаковыми маркерами для всех все получается хорошо.

Map <- leaflet() %>% addTiles() %>% addMarkers(data=Locations, popup=Locations$Name)

Затем я хочу раскрасить маркеры в зависимости от статуса.

#Color the markers depending on the status.
#Want 0=green, 1=red, 2=orange.

> Color_status <- function(Locations) {sapply(Locations$Status,
   function(Status) {if(Status==0){"green"} else if(Status==1)
     {"red"} else{"orange"} })}

> Status_Icons <- awesomeIcons(icon='circle', iconColor=
   'black', library='ion', markerColor=Color_status(Locations))

> leaflet(Locations) %>% addTiles() %>%
    addAwesomeMarkers(c(Locations$geometry), icon=icons, 
    label=~as.character(Name))

Error in validateCoords(lng, lat, funcName) : 
  addAwesomeMarkers requires numeric longitude values

Итак, похоже, что addAwesomeMarkers не может справиться с тем, как настроены мои очки. Есть ли простой / быстрый способ превратить точки во что-то, что функция может использовать?

Или вы знаете альтернативный способ создания маркеров разного цвета, которые будут работать с моими текущими данными?

Решение пробовали:

as.numeric(Locations$geometry)
Error: (list) object cannot be coerced to type 'double'

Результат печати (Locations $ gemometry):

> print(Locations$geometry)
Geometry set for 53 features 
geometry type:  POINT
dimension:      XY
bbox:           xmin: 8.269083 ymin: 54.89636 xmax: 15.13583 ymax: 56.99576
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
First 5 geometries:
POINT (8.720061 56.10223)
POINT (9.611723 56.67828)
POINT (8.633127 55.69979)
POINT (9.671523 56.99576)
POINT (15.13583 55.05837)

Заранее большое спасибо за вашу помощь. :)


person JS93    schedule 09.04.2019    source источник
comment
Что будет, если вы запустите print(Locations$geometry)?   -  person Wil    schedule 09.04.2019
comment
Результат добавлен в пост.   -  person JS93    schedule 09.04.2019


Ответы (1)


Я не очень знаком с пакетами leaflet и sf, но попробуйте:

library(st)
library(leaflet)

lng = as.numeric(st_coordinates(Locations$geometry)[,1])
lat = as.numeric(st_coordinates(Locations$geometry)[,2])

leaflet(Locations) %>% addTiles() %>%
  addAwesomeMarkers(lng = lng, lat = lat, icon=icons, 
  label=~as.character(Name))
person Wil    schedule 09.04.2019
comment
Спасибо. Однако это дает только одно местоположение на карте. - person JS93; 09.04.2019
comment
Я сделал правку, чтобы вытащить все значения, посмотрите, сработает ли это для вас. - person Wil; 09.04.2019