使用 R 的 Leaflet 包添加弯曲的飞行路径
Adding Curved Flight path using R's Leaflet Package
目前我可以使用以下代码在国家之间画一条直线:
library(leaflet)
leaflet() %>% addTiles() %>% addPolylines(lat=c(38.8833, 35.00), lng=c(-77.0167, 103.00))
我想要制作的是一个更真实的飞行路径,直线实际上是弯曲的。类似这样:
为了这个问题,我想在 Leaflet
包中定制答案。任何帮助将不胜感激。
您正在寻找这样的东西:How to draw great circles
答案中使用了函数gcIntermediate()
的包geosphere
:
inter <- gcIntermediate(c(lon_1, lat_1), c(lon_2, lat_2), n=50, addStartEnd=TRUE)
lines(inter)
跟进mrub,只需将您从gcIntermediate 获得的对象传递给leaflet。像这样:
library(leaflet)
library(geosphere)
gcIntermediate(c(5,52), c(-120,37),
n=100,
addStartEnd=TRUE,
sp=TRUE) %>%
leaflet() %>%
addTiles() %>%
addPolylines()
在尝试通过 einar 发布的方法显示多行时,我无法同时显示它们。经过大量挖掘,我发现了 this and this 个帖子。这是两个不同行的小代码。
library(geosphere)
library(leaflet)
library(dplyr)
lat_ny <- 40.73
lng_ny <- -73.9
lat_del <- 28.63
lng_del <- 77.21
lng_ca <- -121.6406
lat_ca <- 39.16414
inter1 <- gcIntermediate(c(lng_ny, lat_ny), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE)
lines(inter1)
inter2 <- gcIntermediate(c(lng_ca, lat_ca), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE)
lines(inter2)
inters <- c(inter1,inter2)
ll0 <- lapply( inters , function(x) `@`(x , "lines") )
ll1 <- lapply( unlist( ll0 ) , function(y) `@`(y,"Lines") )
Sl <- SpatialLines( list( Lines( unlist( ll1 ) , ID = 1 ) ) )
leaflet(Sl) %>% addTiles() %>% addPolylines()
硬编码纬度和经度不是一个好主意,但由于我不得不只选择前 5 个连接位置,所以我没有花太多时间为列表建立索引。此外,我仍在检查它是否与 Shiny 集成。
目前我可以使用以下代码在国家之间画一条直线:
library(leaflet)
leaflet() %>% addTiles() %>% addPolylines(lat=c(38.8833, 35.00), lng=c(-77.0167, 103.00))
我想要制作的是一个更真实的飞行路径,直线实际上是弯曲的。类似这样:
为了这个问题,我想在 Leaflet
包中定制答案。任何帮助将不胜感激。
您正在寻找这样的东西:How to draw great circles
答案中使用了函数gcIntermediate()
的包geosphere
:
inter <- gcIntermediate(c(lon_1, lat_1), c(lon_2, lat_2), n=50, addStartEnd=TRUE)
lines(inter)
跟进mrub,只需将您从gcIntermediate 获得的对象传递给leaflet。像这样:
library(leaflet)
library(geosphere)
gcIntermediate(c(5,52), c(-120,37),
n=100,
addStartEnd=TRUE,
sp=TRUE) %>%
leaflet() %>%
addTiles() %>%
addPolylines()
在尝试通过 einar 发布的方法显示多行时,我无法同时显示它们。经过大量挖掘,我发现了 this and this 个帖子。这是两个不同行的小代码。
library(geosphere)
library(leaflet)
library(dplyr)
lat_ny <- 40.73
lng_ny <- -73.9
lat_del <- 28.63
lng_del <- 77.21
lng_ca <- -121.6406
lat_ca <- 39.16414
inter1 <- gcIntermediate(c(lng_ny, lat_ny), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE)
lines(inter1)
inter2 <- gcIntermediate(c(lng_ca, lat_ca), c(lng_del, lat_del), n=10, addStartEnd=TRUE, sp = TRUE, breakAtDateLine = TRUE)
lines(inter2)
inters <- c(inter1,inter2)
ll0 <- lapply( inters , function(x) `@`(x , "lines") )
ll1 <- lapply( unlist( ll0 ) , function(y) `@`(y,"Lines") )
Sl <- SpatialLines( list( Lines( unlist( ll1 ) , ID = 1 ) ) )
leaflet(Sl) %>% addTiles() %>% addPolylines()
硬编码纬度和经度不是一个好主意,但由于我不得不只选择前 5 个连接位置,所以我没有花太多时间为列表建立索引。此外,我仍在检查它是否与 Shiny 集成。