如何修复与R交叉的国际日期线路径

如何修复与R交叉的国际日期线路径,r,ggplot2,gis,R,Ggplot2,Gis,你好!我试图用R和一系列的纬度/经度点在世界地图上绘制多艘船的路径 一切都很好,直到船越过国际日期线-180/180时,路径跳过地图 我尝试在R中应用st_wrap_dateline函数,但它似乎只适用于具有两个点的数据集,一个起点和终点坐标 下面是我的R代码以及制作的情节截图-非常感谢您的帮助 在运行st_wrap_dateline的点上,有一个点几何图形的数据框。点不能跨越日期线,因此没有任何变化 您需要通过分组和构造来创建线串或多重线串几何图形的数据框,因此最终每个船舶轨迹有一行,而不是每

你好!我试图用R和一系列的纬度/经度点在世界地图上绘制多艘船的路径

一切都很好,直到船越过国际日期线-180/180时,路径跳过地图

我尝试在R中应用st_wrap_dateline函数,但它似乎只适用于具有两个点的数据集,一个起点和终点坐标

下面是我的R代码以及制作的情节截图-非常感谢您的帮助


在运行st_wrap_dateline的点上,有一个点几何图形的数据框。点不能跨越日期线,因此没有任何变化

您需要通过分组和构造来创建线串或多重线串几何图形的数据框,因此最终每个船舶轨迹有一行,而不是每个船舶位置有一行分组变量

然后,st_wrap_dateline会将日期行中的对象拆分为多行对象

然后,您可以在ggplot调用中使用geom_sf来绘制线条,这些线条将在日期线处拆分为多个部分

步骤1,从轨迹创建线:

tracks = shiptracks %>% group_by(Vessels.Name) %>% 
    summarise(do_union=FALSE) %>% st_cast("LINESTRING")

ggplot() + geom_sf(data=tracks,aes(col=Vessels.Name))
现在将其包装并打印:

tracks = st_wrap_dateline(tracks)
ggplot() + geom_sf(data=tracks,aes(col=Vessels.Name)) 

提示:请尽量将代码控制在最低限度-我的第一次尝试失败了,因为您必须使用更新版本的内容,而我认为您的豁免中的众多选项之一没有得到认可。简化每件事有时也会揭示问题所在,或者至少会使发现问题的速度更快。它还鼓励人们回答。当我第一次看到它和它的60行代码时,我不想再看下去了。

在运行st_wrap_dateline时,您有一个点几何体的数据帧。点不能跨越日期线,因此没有任何变化

您需要通过分组和构造来创建线串或多重线串几何图形的数据框,因此最终每个船舶轨迹有一行,而不是每个船舶位置有一行分组变量

然后,st_wrap_dateline会将日期行中的对象拆分为多行对象

然后,您可以在ggplot调用中使用geom_sf来绘制线条,这些线条将在日期线处拆分为多个部分

步骤1,从轨迹创建线:

tracks = shiptracks %>% group_by(Vessels.Name) %>% 
    summarise(do_union=FALSE) %>% st_cast("LINESTRING")

ggplot() + geom_sf(data=tracks,aes(col=Vessels.Name))
现在将其包装并打印:

tracks = st_wrap_dateline(tracks)
ggplot() + geom_sf(data=tracks,aes(col=Vessels.Name)) 

提示:请尽量将代码控制在最低限度-我的第一次尝试失败了,因为您必须使用更新版本的内容,而我认为您的豁免中的众多选项之一没有得到认可。简化每件事有时也会揭示问题所在,或者至少会使发现问题的速度更快。它还鼓励人们回答。当我第一次看到它和它的60行代码时,我不愿意看得更远。

随着更多的交叉发生,可视化变得非常混乱:随着更多的交叉发生,可视化变得非常混乱:谢谢!有没有想过将此作为附加点强制返回到原始数据中?下一步是我使用移动包中的数据来设置移动的动画。谢谢!有没有想过将此作为附加点强制返回到原始数据中?下一步是我使用移动包中的数据来设置移动的动画。