R - 如何在两个点之间得到平滑曲线?

3
我正在使用R(使用map和wrld_simpl)在世界地图上绘制两个城市之间的直线。如何让这条直线更加平滑?如果我要在美国和澳大利亚之间画一条线,它会有三段不同的分段。
require(rworldmap)

map("world", col="#f2f2f2", fill=TRUE, bg="white", lwd=0.05)

data(wrld_simpl)

US_lat = wrld_simpl$LAT[wrld_simpl$NAME == 'United States']
US_lon = wrld_simpl$LON[wrld_simpl$NAME == 'United States']

australia_lat = wrld_simpl$LAT[wrld_simpl$NAME == 'Australia']
australia_lon = wrld_simpl$LON[wrld_simpl$NAME == 'Australia']

lines(c(US_lon, US_lat), c(australia_lon, australia_lat))

这段代码绘制了一条线,但是它没有正确地连接澳大利亚和美国。我做错了什么?


1
“Smooth”是什么意思?您可以通过使用lines(x,y)来获得一条直线,即只使用坐标(不要使用gcIntermediate,它会生成大圆弧线)。 - Spacedman
哦,我以为应该使用gcIntermediate函数。那我应该使用哪个其他的函数? - user187809
gcIntermediate绘制了一条大圆弧 - 最短距离。如果这涉及到穿越-180线并且您的地图是以0为中心的墨卡托投影,则它可能会将其分成几个部分(无法确定,因为您没有给我们一个可重现的示例)。如果您只是执行lines(c(US_lon,aus_lon),c(US_lat,aus_lat)),那么您应该会得到两点之间的直线。如果这就是你想要的。 - Spacedman
US_lat = wrld_simpl$LAT[wrld_simpl$NAME == 'United States'] US_lon = wrld_simpl$LON[wrld_simpl$NAME == 'United States']australia_lat = wrld_simpl$LAT[wrld_simpl$NAME == 'Australia']australia_lon = wrld_simpl$LON[wrld_simpl$NAME == 'Australia']lines(c(US_lon, US_lat), c(australia_lon, australia_lat))这并没有正确地画出线条。我做错了什么? - user187809
你能编辑一下你的问题吗?这样我们就可以看到代码格式化后的效果了。 - Spacedman
2个回答

2
方法lines需要一个向量x表示x坐标和一个向量y表示y坐标。因此,您的线应该如下所示:
lines(c(US_lon, australia_lon), c(US_lat, australia_lat))

如果你想要一个完美的圆形,可以按照以下步骤进行操作:
require(geosphere)
gc <- gcIntermediate(c(US_lon, US_lat), c(australia_lon, australia_lat), breakAt=TRUE, n=1000)
invisible(lapply(gc, lines, col='red', lwd=2))

这是那种“隐形”的错误。除非你不是犯错的人,否则你永远看不到它。 - pete

1
您可以使用grid.curve()绘制“曲线”:
grid.curve(US_lon, australia_lon, US_lat, australia_lat)

...而且你可以定义曲线的“外观”。

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