Vessel Tracking using MarineTraffic.com API

Load the libraries
library(httr)
library(jsonlite)
library(dplyr)
library(kableExtra)


Call API to track the real-time location of vessels
View the raw JSON data response
response1 <- GET("https://services.marinetraffic.com/api/exportvessel/v:5/8a9b95402978ef3254b493aa7b142e2635f7ca6b/mmsi:311475000/timespan:60/protocol:jsono/msgtype:extended")

df_1 = fromJSON(rawToChar(response1$content))

response2 <- GET("https://services.marinetraffic.com/api/exportvessel/v:5/8a9b95402978ef3254b493aa7b142e2635f7ca6b/mmsi:257560000/timespan:60/protocol:jsono/msgtype:extended")

df_2 = fromJSON(rawToChar(response2$content))

response3 <- GET("https://services.marinetraffic.com/api/exportvessel/v:5/8a9b95402978ef3254b493aa7b142e2635f7ca6b/mmsi:636015992/timespan:60/protocol:jsono/msgtype:extended")
df_3 = fromJSON(rawToChar(response3$content))

data <- bind_rows(df_1, df_2, df_3)


Converting JSON data into R
knitr::kable(data)
MMSI LAT LON SPEED HEADING COURSE STATUS TIMESTAMP SHIPNAME SHIPTYPE TYPE_NAME AIS_TYPE_SUMMARY IMO CALLSIGN FLAG PORT_ID PORT_UNLOCODE CURRENT_PORT LAST_PORT_ID LAST_PORT_UNLOCODE LAST_PORT LAST_PORT_TIME DESTINATION ETA ETA_CALC LENGTH WIDTH DRAUGHT GRT NEXT_PORT_ID NEXT_PORT_UNLOCODE NEXT_PORT_NAME NEXT_PORT_COUNTRY DWT YEAR_BUILT DSRC
311475000 23.391330 -179.698300 133 286 286 0 2021-10-12T19:36:34 GLOBAL LEADER 70 Vehicles Carrier Cargo 9237319 C6SU5 BS NA NA NA 906 CLSAI SAN ANTONIO 2021-09-19T02:04:00 JP NGO 2021-10-24T03:00:00 2021-10-19T18:00:00 189.21 32.29 79 48710 2715 JPNGO NAGOYA JP 17125 2002 SAT
257560000 30.405970 -81.546150 0 17 339 5 2021-10-12T20:11:49 HOEGH NEW YORK 70 Vehicles Carrier Cargo 9295830 LAUA7 NO 656 USJAX JACKSONVILLE 277 USFPO FREEPORT 2021-10-09T03:53:00 US SAV 2021-10-13T16:00:00 2021-10-13T00:43:00 199.9 32.29 85 57280 200 USSAV SAVANNAH US 21099 2005 TER
636015992 32.333420 28.433680 156 281 280 0 2021-10-12T19:41:33 CSAV RIO GRANDE 70 Vehicles Carrier Cargo 9308807 D5DX3 LR NA NA NA 2175 EGPSD PORT SAID 2021-10-12T05:01:00 LY MRA 2021-10-15T10:00:00 2021-10-14T16:31:00 182.8 31.53 86 46800 2509 LYMRA MISURATA LY 12260 2007 TER


Display the attributes of the JSON response
names(data)
##  [1] "MMSI"               "LAT"                "LON"               
##  [4] "SPEED"              "HEADING"            "COURSE"            
##  [7] "STATUS"             "TIMESTAMP"          "SHIPNAME"          
## [10] "SHIPTYPE"           "TYPE_NAME"          "AIS_TYPE_SUMMARY"  
## [13] "IMO"                "CALLSIGN"           "FLAG"              
## [16] "PORT_ID"            "PORT_UNLOCODE"      "CURRENT_PORT"      
## [19] "LAST_PORT_ID"       "LAST_PORT_UNLOCODE" "LAST_PORT"         
## [22] "LAST_PORT_TIME"     "DESTINATION"        "ETA"               
## [25] "ETA_CALC"           "LENGTH"             "WIDTH"             
## [28] "DRAUGHT"            "GRT"                "NEXT_PORT_ID"      
## [31] "NEXT_PORT_UNLOCODE" "NEXT_PORT_NAME"     "NEXT_PORT_COUNTRY" 
## [34] "DWT"                "YEAR_BUILT"         "DSRC"


Locate the above Vessels on the world map

library(ggplot2)
library("rnaturalearth")
library("rnaturalearthdata")


data$LAT <- as.integer(data$LAT)
data$LON <- as.integer(data$LON)


world <- ne_countries(scale = "medium", returnclass = "sf")

ggplot(data = world) +   geom_sf() +  
   geom_point(data = data, aes(x= LON, y=LAT), color = "#e60000") +
  geom_text(data= data ,aes(x= LON, y=LAT, label=SHIPNAME),
    color = "darkblue", fontface = "bold", size = 3, check_overlap = TRUE)