使用R的Leaflet包添加曲线飞行路径

14

目前,我可以使用以下代码在国家之间绘制一条直线:

library(leaflet) 
leaflet() %>% addTiles() %>% addPolylines(lat=c(38.8833, 35.00), lng=c(-77.0167, 103.00))

enter image description here

我想要制作更真实的飞行路径,使直线实际上是弯曲的。就像这样:

Curved Path Example

为了这个问题,我想在Leaflet包内提供答案。任何帮助将不胜感激。

3个回答

17

在mrub的基础上进行跟进,只需将gcIntermediate返回的对象传递给leaflet。类似这样:

library(leaflet)
library(geosphere)
gcIntermediate(c(5,52), c(-120,37),
               n=100, 
               addStartEnd=TRUE,
               sp=TRUE) %>% 
leaflet() %>% 
addTiles() %>% 
addPolylines()

输入图像描述


太棒了!你是怎么知道要将gcIntermediate传递给leaflet的? - Steven_
3
gcIntermediate返回的对象类别是"SpatialLines",而leaflet非常喜欢这个类别(或任何其他"Spatial..."类别) :-) - einar

4

尝试使用einar发布的方法显示多行时,我无法同时显示它们。经过大量挖掘,我找到了这篇这篇文章。以下是两条不同线路的小代码。

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集成。 Output

2
你正在寻找类似这样的东西:如何画出大圆 在答案中,使用了geosphere包和函数gcIntermediate()
inter <- gcIntermediate(c(lon_1, lat_1), c(lon_2, lat_2), n=50, addStartEnd=TRUE)
lines(inter)

2
我正在寻找的是仍然在“Leaflet”包内的东西。那个函数能否在“Leaflet”内被调用? - Steven_
我不知道你想要专门使用 leaflet。为此,你可以使用 leaflet 插件 arc - mrub
你可以提供一个在R中使用该插件的示例吗?我觉得你提供的插件只适用于JavaScript。 - Steven_
2
你说得对,目前还没有办法从R中调用那个插件。不过我会看看其他选项,并回报情况。 - mrub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接