多线串和彩色绘图的单独 long/lat 列
Separate long/lat columns for multilinestrings and plotting in colours
我是 R/leaflet 中的绘图新手。我正在将 a shapefile 与 multilinestrings 绘制到带有传单的 R 中。
有没有一种方法可以从几何列中提取纬度和经度坐标的单独列?我看过 and ,但我无法得到正确的结果,它是每列中 long/lat 坐标的混合。
我想要得到的最终结果是一个地图,其中线条根据变量 (like this) 着色,但为了 运行 循环,我需要 long/lat坐标分开。
我有两条评论:要导出多线串的纬度和经度坐标,您可以使用 sf::st_coordinates()
,前提是您的多线串位于未投影的 CRS 中(否则您会得到东距和北距)。
但我相信 - 如果我正确理解你的问题 - 你会把它变得不必要的复杂。
基于变量的颜色编码多行可以通过leaflet::colorFactor()
来完成。您首先通过命名查找 table 声明一个调色板 - 将值链接到颜色 - 然后将其应用到您的 leaflet::addPolylines()
调用中。
举例说明这段代码;由于您的 shapefile 不可重现,因此我使用来自 Natural Earth 的 13 条河流的数据集来获取多线串(任何多线串)。
library(rnaturalearth) # to get some multilinestrings / any multilinestrings :)
library(dplyr)
library(sf)
rivers <- ne_download(category = 'physical',
scale = 110,
type = 'rivers_lake_centerlines',
returnclass = 'sf') %>%
mutate(color_source = case_when(name %in% c('Mississippi',
'Peace',
'Amazonas',
'Paraná') ~ "Americas",
T ~ "Rest of World")) %>%
group_by(color_source) %>%
summarise()
library(leaflet)
# prepare a palette - manual colors according to color_source column
palPwr <- leaflet::colorFactor(palette = c("Americas" = "red",
"Rest of World" = "blue"),
domain = rivers$color_source)
# first prepare a leaflet plot ...
lplot <- leaflet(rivers) %>%
addProviderTiles("CartoDB.Positron") %>% # or any other basemap...
addPolylines(color = ~palPwr(color_source), # note the tilde notation!
opacity = 2/3) %>% # opacity = alpha
leaflet::addLegend(position = "bottomright",
values = ~color_source, # data frame column for legend
opacity = .7, # alpha of the legend
pal = palPwr, # palette declared earlier
title = "Rivers of the World")
lplot # ... then display it
我是 R/leaflet 中的绘图新手。我正在将 a shapefile 与 multilinestrings 绘制到带有传单的 R 中。
有没有一种方法可以从几何列中提取纬度和经度坐标的单独列?我看过
我想要得到的最终结果是一个地图,其中线条根据变量 (like this) 着色,但为了 运行 循环,我需要 long/lat坐标分开。
我有两条评论:要导出多线串的纬度和经度坐标,您可以使用 sf::st_coordinates()
,前提是您的多线串位于未投影的 CRS 中(否则您会得到东距和北距)。
但我相信 - 如果我正确理解你的问题 - 你会把它变得不必要的复杂。
基于变量的颜色编码多行可以通过leaflet::colorFactor()
来完成。您首先通过命名查找 table 声明一个调色板 - 将值链接到颜色 - 然后将其应用到您的 leaflet::addPolylines()
调用中。
举例说明这段代码;由于您的 shapefile 不可重现,因此我使用来自 Natural Earth 的 13 条河流的数据集来获取多线串(任何多线串)。
library(rnaturalearth) # to get some multilinestrings / any multilinestrings :)
library(dplyr)
library(sf)
rivers <- ne_download(category = 'physical',
scale = 110,
type = 'rivers_lake_centerlines',
returnclass = 'sf') %>%
mutate(color_source = case_when(name %in% c('Mississippi',
'Peace',
'Amazonas',
'Paraná') ~ "Americas",
T ~ "Rest of World")) %>%
group_by(color_source) %>%
summarise()
library(leaflet)
# prepare a palette - manual colors according to color_source column
palPwr <- leaflet::colorFactor(palette = c("Americas" = "red",
"Rest of World" = "blue"),
domain = rivers$color_source)
# first prepare a leaflet plot ...
lplot <- leaflet(rivers) %>%
addProviderTiles("CartoDB.Positron") %>% # or any other basemap...
addPolylines(color = ~palPwr(color_source), # note the tilde notation!
opacity = 2/3) %>% # opacity = alpha
leaflet::addLegend(position = "bottomright",
values = ~color_source, # data frame column for legend
opacity = .7, # alpha of the legend
pal = palPwr, # palette declared earlier
title = "Rivers of the World")
lplot # ... then display it