【问题标题】:How different colors to different sections of a route on leaflet map? [R Studio]传单地图上路线的不同部分的不同颜色如何? [R工作室]
【发布时间】:2016-06-25 07:37:07
【问题描述】:

我有一个很长的 JSON 文件。该文件包含这条路线的经纬度。

我正在尝试根据一组标准(我已在数据框中编译)标记此路线的不同部分。但是,我面临一些问题:

1) 我如何将这一长组的经纬度分成几段? (无法手动执行此操作,因为我有很多路线变化)

2) 如何为每个段分配可变颜色?

我打算使用传单地图(因为它的交互性),但我愿意接受更好的建议。

【问题讨论】:

    标签: json r dictionary routes leaflet


    【解决方案1】:

    在处理空间数据时,了解空间类会有所帮助!我假设您知道如何将您的 JSON 文件作为数据框读取到 R 中。

    这是一个可重现的例子:

    library(mapview)
    library(sp)
    
    ### create some random data with coordinates from (data("breweries91", package = "mapview"))
    set.seed(123)
    dat <- data.frame(val = as.integer(rnorm(32, 10, 2)),
                      lon = coordinates(breweries91)[, 1],
                      lat = coordinates(breweries91)[, 2])
    
    ### state condition for creation of lines
    cond <- c(8, 9, 10)
    
    ### loop through conditions and create a SpatialLines object for each condition
    lns <- lapply(seq(cond), function(i) {
    
      ind <- dat$val == cond[i]
      sub_dat <- dat[ind, ]
    
      coords <- cbind(sub_dat$lon, sub_dat$lat)
      ln <- coords2Lines(coords, ID = as.character(cond[i]))
    
      proj4string(ln) <- "+init=epsg:4326"
      return(ln)
    })
    
    ### view lines with mapview
    mapview(lns[[1]], col = "darkred") +
      mapview(lns[[2]], col = "forestgreen") +
      mapview(lns[[3]], col = "cornflowerblue")
    

    本质上,我们在这里所做的是为我们指定的每个条件创建一个有效的 sp::SpatialLines 对象。鉴于您提到的交互性,我们使用 ma​​pview 绘制那些。可以通过多种方式绘制空间对象(baselatticeggplot2leaflet、... ) 所以有很多选择。查看sp Gallery 以获得不错的教程。

    注意:此答案仅对非投影地理坐标(即纬度/经度)有效!

    【讨论】:

    • 对于那些希望重现此示例的用户,您需要加载传单库才能访问 breweries91(在脚本开头添加 library(leaflet)
    • 同样在 mapview 调用中,“col”需要是“color”,因为“col”现在匹配多个参数。
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2021-10-11
    相关资源
    最近更新 更多