使用R创建大圆航线地图

3
大家好,我正在尝试创建一张“大圆航线”地图,类似于Nathan Yau在这个posting中所做的。不过,我想把它做成全球的,并且所有线路都汇聚到一个单一的位置。但是,在循环部分我好像遇到了问题。如果我只使用一个纬度/经度组合,一切都正常。但是,当我扩大表格时,就会出现错误(Error in .pointsToMatrix(p1):向量长度错误,应该为2)。我是R的100%新手,希望得到一些帮助。

lat.txt

LAT,LONG  
39.164141,-121.640625

R命令

library(maps)  
library(geosphere)  
lat_me <- 45.213004  
lon_me <- -68.906250  
map("world", col="#f2f2f2", plot = TRUE, fill=TRUE, bg="white")  
data <- read.csv("/Users/blah/R/latlon/lat.csv",sep=",", header=TRUE)  
for (i in 1:length(data)) {  
  inter <- gcIntermediate(c(data$LONG, data$LAT), c(lon_me, lat_me), n=50, addStartEnd=TRUE)  
  lines(inter,col="red")  
}

抱歉,那实际上只是从R中复制粘贴的。加号符号只是图形化地表示“for”循环,我相信。 - breadly
我建议您不要使用循环,因为gcIntermediate已经向量化了。 - Andrie
@Andrie 你能详细说明一下吗?我现在正在研究为什么我应该做些什么,但是这个例子是我按照Nathan给出的示例进行的。 - breadly
前段时间我在这里发布了一些使用lattice图形的代码链接 - Oscar Perpiñán
2个回答

6

我看到你在循环中使用i作为索引,但是没有在循环内部使用它。 我猜想你想循环遍历数据的行。所以将索引范围改为1:nrow(data),并在每个i处包含要绘制的行的索引。

for( i in 1:nrow(data)){
inter <- gcIntermediate(c(data$LONG[i], data$LAT[i]), 
                        c(lon_me, lat_me), 
                        n=50, 
                        addStartEnd=TRUE)
...
}

哇... 这真的起作用了。这完美地解决了我的问题。 - breadly
@bread555,欢迎来到 S.O。如果这个答案解决了你的问题,请务必点击问题旁边的绿色勾号表示确认。 - Ricardo Saporta
@RicardoSaporta 当然,我会的,只是在等看看是否还有其他的内容。不过,我现在会选择它。 - breadly

4

gcIntermediate已经向量化(如评论中@Andrie所指出的),因此您不需要循环:

me <- c( 45.213004 , -68.906250   )

set.seed(123)
pts <- data.frame( x = runif(4,-180,180) , y = runif(4,-90,90) )
pts
#          x          y
#1 -76.47209  79.284111
#2 103.78985 -81.799830
#3 -32.76831   5.058988
#4 137.88627  70.635428

#  Just supply the two column data.frame - no need for loops!
#  Also return as 'SpatialLines' object to make plotting easier
inter <- gcIntermediate( pts , me , n=50 , addStartEnd=TRUE , sp = TRUE) 

map("world", col="#f2f2f2", plot = TRUE, fill=TRUE, bg="white") 
plot(inter ,add=T , col = "red" , lty = 2 )

enter image description here


@Simon0101 哇,谢谢你进一步的解释。看起来我要查找很多这些术语/命令,因为我以前没有见过它们。具体来说,使用SpatialLines可以更轻松地绘图,你是什么意思? - breadly

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