【发布时间】:2016-06-25 07:37:07
【问题描述】:
我有一个很长的 JSON 文件。该文件包含这条路线的经纬度。
我正在尝试根据一组标准(我已在数据框中编译)标记此路线的不同部分。但是,我面临一些问题:
1) 我如何将这一长组的经纬度分成几段? (无法手动执行此操作,因为我有很多路线变化)
2) 如何为每个段分配可变颜色?
我打算使用传单地图(因为它的交互性),但我愿意接受更好的建议。
【问题讨论】:
标签: json r dictionary routes leaflet
我有一个很长的 JSON 文件。该文件包含这条路线的经纬度。
我正在尝试根据一组标准(我已在数据框中编译)标记此路线的不同部分。但是,我面临一些问题:
1) 我如何将这一长组的经纬度分成几段? (无法手动执行此操作,因为我有很多路线变化)
2) 如何为每个段分配可变颜色?
我打算使用传单地图(因为它的交互性),但我愿意接受更好的建议。
【问题讨论】:
标签: json r dictionary routes leaflet
在处理空间数据时,了解空间类会有所帮助!我假设您知道如何将您的 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 对象。鉴于您提到的交互性,我们使用 mapview 绘制那些。可以通过多种方式绘制空间对象(base、lattice、ggplot2、leaflet、... ) 所以有很多选择。查看sp Gallery 以获得不错的教程。
注意:此答案仅对非投影地理坐标(即纬度/经度)有效!
【讨论】:
breweries91(在脚本开头添加 library(leaflet))