如何在地图上显示经度和连接点?

2024-05-14 20:13:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CSV文件的经度和纬度如下(总长度是86点在CSV):

  Index       lon            lat
  1         2.352222    48.85661
  2         -72.922343  41.31632
  3         108.926694  34.25005
  4         -79.944163  40.44306
  5     -117.328119 33.97329
  6     -79.953423  40.4442
  7         -84.396285  33.77562
  8     -95.712891  37.09024

现在我想画一条从点(32.06025118.7969)到所有这些点(lon,lat)的直线,就像一个点上的许多箭头线一样。在

我在R尝试了所有这些工作,我遇到了一些事情奇怪。因为例如,如果我使用

^{pr2}$

结果如下: image of R

如果所有的线都指向美国再越过太平洋,那地图就很好了。但事实并非如此

你知道吗?我怎么能意识到这一点?虽然我有Python和R的经验,但是任何工具都可以。 谢谢您!在


Tags: 文件csvindex地图箭头事情直线事实
1条回答
网友
1楼 · 发布于 2024-05-14 20:13:18

首先,必须在函数gcIntermediate()内添加参数breakAtDateLine=TRUE。这将确保如果直线与日期线相交,函数将生成两个线段,并且不会将点与直线连接起来。此计算的所有结果都存储在列表gg。此列表包含每一行的数据帧或由两段组成的行的数据帧列表。在

library(mapdata)
library(geosphere)
lon_nj<-118.7969
lat_nj<-32.06025
location<-structure(list(Index = 1:8, lon = c(2.352222, -72.922343, 108.926694, 
-79.944163, -117.328119, -79.953423, -84.396285, -95.712891), 
    lat = c(48.85661, 41.31632, 34.25005, 40.44306, 33.97329, 
    40.4442, 33.77562, 37.09024)), .Names = c("Index", "lon", 
"lat"), class = "data.frame", row.names = c(NA, -8L))

gg<-lapply(1:length(location$lon),function(j) {
  gcIntermediate(c(lon_nj, lat_nj), c(location$lon[j], 
                                      location$lat[j]), n=100,
                 breakAtDateLine=TRUE,
                 addStartEnd=TRUE)
})

这将更改您的列表,使每个段都在单独的数据帧中,而不在列表列表中。在

^{pr2}$

要再次绘制这些数据,可以使用函数lapply()。在

如果您使用map("world),那么只需

map("world")
lapply(gg2,lines)

如果您使用map('world2Hires'),则此地图基于0-360纬度。所以你必须给那些负的x坐标值加360。在

map('world2Hires')
lapply(gg2,function(x) lines(ifelse(x[,1]>0,x[,1],x[,1]+360),x[,2]))

enter image description here

相关问题 更多 >

    热门问题