数据问题:addAwesomeMarkers 需要 lng、lat,但我的数据存储在矢量中。变通?
Data issue: addAwesomeMarkers requires lng, lat, but my data is stored in a vector. Work around?
我正在使用 R 中的 Leaflet 制作地图。我的数据存储为 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 似乎无法处理我的积分设置方式。是否有 easy/quick 将点转换为函数可以使用的东西的方法?
或者您是否知道创建适用于我当前数据的不同颜色标记的替代方法?
尝试过的解决方案:
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)
非常感谢您的提前帮助。 :)
我对 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))
我正在使用 R 中的 Leaflet 制作地图。我的数据存储为 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 似乎无法处理我的积分设置方式。是否有 easy/quick 将点转换为函数可以使用的东西的方法?
或者您是否知道创建适用于我当前数据的不同颜色标记的替代方法?
尝试过的解决方案:
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)
非常感谢您的提前帮助。 :)
我对 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))