首页 > 解决方案 > R在PlotOnStaticMap上绘制多个轨道

问题描述

这是生成航班图的示例代码,一次一个航班。如何修改代码以在一个绘图上生成所有四个航班?可以添加不同颜色的图例吗?

df <- data.frame(ICAO = c("A00050", "A00050", "A0020A", "A0020A", "A01021", "A01021", "A011AC", "A011AC"), ctime = as.POSIXct(x=c(1525202775.476, 1525202948.119, 1525178454.322, 1525179000.436, 1525181853, 1525182442.667, 1525204759.544, 1525205007.605), origin = "1970-01-01",tz = "US/Eastern"), Lat = c(38.887207, 39.099923, 38.700256, 39.098923, 38.700348, 39.097874, 38.700989, 39.0932), Long = c(-76.79933, -76.405518, -76.011538, -75.264946, -76.740457, -75.671875, -76.237, -75.8515))

library(spacetime)
library(adehabitatLT)
library(RgoogleMaps)

d <- df[df$ICAO == df$ICAO[1], ]  # Can use 1, 3, 5, and 7 to get the four flights
coordinates(d) <- ~Long+Lat
proj4string(d) <- CRS("+proj=longlat +datum=WGS84")
## convert to a STTDF class:
gpx.ltraj <- as.ltraj(coordinates(d), d$ctime, id = "th")
gpx.st <- as(gpx.ltraj, "STTDF")
## Google maps plot:
llc <- c(mean(gpx.st@sp@bbox[2,]), mean(gpx.st@sp@bbox[1,]))
MyMap <- GetMap.bbox(center=llc, zoom=8, destfile="map.png")
PlotOnStaticMap(MyMap, lat=gpx.st@sp@coords[,2], lon=gpx.st@sp@coords[,1], FUN=lines, col="black", lwd=4)```



标签: rplotpath

解决方案


这是一些在循环中添加行的示例代码。请注意,第二次飞行似乎绘制在第一次飞行之上,因此第一次飞行不可见。可以根据需要更改颜色和图例标签。

在此处输入图像描述

df <- data.frame(ICAO = c("A00050", "A00050", "A0020A", "A0020A", "A01021", "A01021", "A011AC", "A011AC"), ctime = as.POSIXct(x=c(1525202775.476, 1525202948.119, 1525178454.322, 1525179000.436, 1525181853, 1525182442.667, 1525204759.544, 1525205007.605), origin = "1970-01-01",tz = "US/Eastern"), Lat = c(38.887207, 39.099923, 38.700256, 39.098923, 38.700348, 39.097874, 38.700989, 39.0932), Long = c(-76.79933, -76.405518, -76.011538, -75.264946, -76.740457, -75.671875, -76.237, -75.8515))

library(spacetime)
library(adehabitatLT)
library(RgoogleMaps)


for(i in c(1,3,5,7)){

  d <- df[df$ICAO == df$ICAO[i], ]  # Can use 1, 3, 5, and 7 to get the four flights
  coordinates(d) <- ~Long+Lat
  proj4string(d) <- CRS("+proj=longlat +datum=WGS84")
  ## convert to a STTDF class:
  gpx.ltraj <- as.ltraj(coordinates(d), d$ctime, id = "th")
  gpx.st <- as(gpx.ltraj, "STTDF")
  ## Google maps plot:
  llc <- c(mean(gpx.st@sp@bbox[2,]), mean(gpx.st@sp@bbox[1,]))
  MyMap <- GetMap.bbox(center=llc, zoom=8, destfile="map.png")
  PlotOnStaticMap(MyMap, lat=gpx.st@sp@coords[,2]
                  , lon=gpx.st@sp@coords[,1], FUN=lines
                  , col=c("black",'blue','red','gray')[(i+1)/2]
                  , lwd=4
                  ,add=ifelse(i==1,F,T))


}

legend('topright'
       ,legend=df$ICAO[c(1,3,5,7)]
       ,lwd=4
       ,col=c("black",'blue','red','gray')
       ,lty=1)

推荐阅读