在投影地图上绘制连接线(mapproj、gcIntermediate)

Plot connecting lines on a projected map (mapproj, gcIntermediate)

我试图在世界地图上使用 Mollweide 投影绘制线条,但没有成功。我还在同一张地图上绘制了点,结果很好。对于台词,我尝试根据我的需要调整此示例:http://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/。 我已经没有通过预测试(例如第 4 步)。在下面的代码中,线路应该连接肯尼亚和澳大利亚。它运行没有错误,但输出中没有一行。 (我还在没有 mapproj 的情况下测试了这个例子,那条线就在那里。)

library("maps")
library("mapproj")
library("geosphere")

map("world",proj="mollweide", orientation= c(90,0,0), fill=TRUE, col="white", bg="lightblue")

lon_ke <- 38
lat_ke <- 1

lon_aus <- 133
lat_aus <- -27

inter <- gcIntermediate(c(mapproject(lon_ke,lat_ke), proj="mollweide", orientation= c(90,0,0)),
                        c(mapproject(lon_aus,lat_aus), proj="mollweide", orientation= c(90,0,0)),
                        n=50, addStartEnd=TRUE)
lines(inter)

我根据 Thomas Rahlf 的书找到了解决我的问题的方法(见评论)。这是我的脚本(它有助于可视化作者发表文章的位置)。

library(maps) 
library(geosphere)
library(mapproj)

#load data
locations <- read.csv("articles-authors-locations.csv", header=TRUE, check.names = FALSE)

#plot map with Mollweide projection
myProj.type<-"mollweide"
myProj.orient<-c(90,0,0)
x<-map(proj=myProj.type,orient=myProj.orient,wrap=T,fill=TRUE, col="white", bg="lightblue",xlim=range(locations$ArticleLong),ylim=range(locations$ArticleLat)
       ) 

#plot jittered points for authors' locations
myStartP<-mapproject(jitter(locations$AuthorLong,amount=3),jitter(locations$AuthorLat, amount=1),proj=myProj.type,orient=myProj.orient)
points(myStartP,col="darkblue",pch=20,cex=1)

#set transparent colors
myTColour<-rgb(0,0,0,50,maxColorValue=255)
red_transp <- adjustcolor("red", alpha.f = 0.4) 

#plot lines and jittered points, connecting authors' and articles locations
for (i in 1:nrow(locations))
{
myGC1<-gcIntermediate(c(locations$AuthorLong[i],locations$AuthorLat[i]),c(locations$ArticleLong[i],locations$ArticleLat[i]),addStartEnd=T, n=50)
moll<-mapproject(myGC1[,1],myGC1[,2],projection=myProj.type,orientation=myProj.orient) 
lines(moll$x,moll$y,lwd=2.5,col=myTColour)
myDestP<-mapproject(
  jitter(locations$ArticleLong[i], amount=3),
  jitter(locations$ArticleLat[i], amount=1),
  proj=myProj.type,orient=myProj.orient)
points(myDestP,col=red_transp,pch=20,cex=1)
}