我正在用传单将带有多行字符串的a shapefile绘制到R中。 有没有办法可以从几何列中提取纬度和经度坐标的单独列?我已经查看了这个答案和这个答案,但我无法得到正确的结果,并且它是每列中长/纬度坐标的混合。
我想要得到的最终结果是一个地图,其中线条根据变量着色(像这样),但为了运行循环,我需要将长/纬度坐标分开。
我有两条评论:要导出多线串的纬度和经度坐标,您可以使用
sf::st_coordinates()
,前提是您的多线串位于未投影的 CRS 中(否则您将得到东距和北距)。
但我相信 - 如果我正确理解你的问题 - 你会让问题变得不必要的复杂。
基于变量的多行颜色编码可以通过
leaflet::colorFactor()
来完成。您首先通过命名查找表来声明调色板 - 将值链接到颜色 - 然后将其应用到您的 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