单独的长/纬度列用于多线串并以颜色绘制

问题描述 投票:0回答:1

我正在用传单将带有多行字符串的a shapefile绘制到R中。 有没有办法可以从几何列中提取纬度和经度坐标的单独列?我已经查看了这个答案这个答案,但我无法得到正确的结果,并且它是每列中长/纬度坐标的混合。

我想要得到的最终结果是一个地图,其中线条根据变量着色(像这样),但为了运行循环,我需要将长/纬度坐标分开。

r r-sf r-leaflet multilinestring
1个回答
1
投票

我有两条评论:要导出多线串的纬度和经度坐标,您可以使用

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

map of the world with rivers in red & blue

© www.soinside.com 2019 - 2024. All rights reserved.