OTN and DFO Activity Summary in Eastern Canada: DRAFT

About this Document

  • This summary has been created using reproducible code (https://github.com/dfo-mar-odis/OTN-DFO-Summary), which gathers and filters data from the Ocean Tracking Network (OTN) to highlight activities in which Fisheries and Oceans Canada (DFO) has actively participated in eastern Canada since 2019 (data prior to this year is available upon request).

  • This summary is being prepared with the support of the OTN International Data Management Committee and DFO staff to provide an overview of current OTN DFO activities.

  • Please note that while we strive to include all relevant DFO-OTN information in this summary, there may be instances where some projects are not listed. If you are a DFO investigator with an OTN project that you do not see here, we encourage you to contact OTN directly.

  • The report is currently in draft form and is a work in progress. It has not yet been validated by all relevant OTN or DFO staff.

DFO & OTN

  • The OTN is a global aquatic research, data management and partnership platform. Since 2008, OTN has been deploying state-of-the-art ocean monitoring equipment and marine autonomous vehicles (gliders) in key ocean locations and inland waters around the world. OTN’s technical capabilities expanded in 2020 with the addition of remotely operated vehicles (ROVs) and side scan sonar systems. Researchers around the world are using OTN’s global infrastructure and analytical tools to document the movements and survival of aquatic animals in the context of changing ocean and freshwater environments. For more information, please visit the OTN site.

  • DFO is a partner in the OTN effort. DFO researchers initiate projects, while the OTN provides support. OTN assumes a leading role in managing infrastructure and its maintenance, as well as providing equipment to support research projects. Some DFO scientists upload data to OTN’s database to manage and ensure data quality.

  • Both OTN and DFO are committed to the principles of open data, actively working to ensure transparency and accessibility in sharing data related to marine research and monitoring.

OTN Data Wrangling

In this section, we gather data from OTN and leverage it to create informative maps and plots for this summary document. Our process involves data acquisition, filtering, and visualization. Below, we provide a brief overview of these steps, and you can expand the code sections to see the full data wrangling process.

proj_start <- ymd("20190101")
proj_end <- ymd("20230909")
proj_long_upp <- -40.00
proj_long_low <- -70.00
proj_lat_upp <- 60.00
proj_lat_low <- 40.00
url <- "https://gisp.dfo-mpo.gc.ca/arcgis/rest/services/FGP/Oceans_Act_Marine_Protected_Areas/MapServer/0"
MPAs <- get_spatial_layer(url) %>% 
  st_make_valid() %>% 
  st_crop(xmin=proj_long_low,
          ymin=proj_lat_low,
          xmax=proj_long_upp,
          ymax=proj_lat_upp)
geoserver_receivers <- readr::read_csv('https://members.oceantrack.org/geoserver/otn/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=otn:stations_receivers&outputFormat=csv', guess_max = 13579)
geoserver_tag_releases <- readr::read_csv('https://members.oceantrack.org/geoserver/otn/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=otn:animals&outputFormat=csv', guess_max = 13579)

geoserver_tag_releases <- geoserver_tag_releases %>%
  filter(yearcollected > 2018)
geoserver_projects <- readr::read_csv('https://members.oceantrack.org/geoserver/otn/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=otn:otn_resources_metadata_points&outputFormat=csv', guess_max = 13579)
# Filter the geoserver_receivers dataset to select relevant stations 

otn_stations <- geoserver_receivers %>%
  # Remove rows with missing deploy_date values
  filter(!is.na(deploy_date)) %>%
  
  # Select stations that fall within the project timeframe defined above
  filter((deploy_date > proj_start & deploy_date < proj_end) |
           (recovery_date < proj_end & recovery_date > proj_start) |
           (deploy_date < proj_end & is.na(recovery_date) & deploy_date > proj_start - duration(18, 'months')) |
           
           # Select specific models within certain date ranges
           (grepl('VR3', model) & deploy_date < proj_end & is.na(recovery_date) & deploy_date > proj_start - duration(4, 'years')) |
           (grepl('VR4', model) & deploy_date < proj_end & is.na(recovery_date) & deploy_date > proj_start - duration(6, 'years'))) %>%
  
  # Filter stations based on latitude and longitude bounds
  filter(stn_lat >= proj_lat_low & stn_lat <= proj_lat_upp &
           stn_long >= proj_long_low & stn_long <= proj_long_upp)
# Define the columns to keep
columns_to_keep <- c("FID", "institutioncode", "datacenter_reference", "scientificname", "vernacularname","longitude", "latitude", "basisofrecord", "yearcollected", "collector", "classname")

# Filter and select the desired columns
otn_animals <- geoserver_tag_releases %>%
  filter(longitude >= proj_long_low & longitude <= proj_long_upp &
           latitude >= proj_lat_low & latitude <= proj_lat_upp) %>%
  select(all_of(columns_to_keep))
# Define the columns to keep
columns_to_keep_projects <- c("FID", "resource_full_name", "ocean", "seriescode", "status", "collaborationtype")

# Filter and select the desired columns
otn_projects <- geoserver_projects %>%
  filter(seriescode == "DFOCanada") %>%
  select(all_of(columns_to_keep_projects))

OTN Summary of Receivers in Eastern Canada

# Create a Leaflet map for receiver stations
map <- leaflet(otn_stations) %>%
  # Add default basemap
  addTiles() %>%
  # Add MPA polygons
  addPolygons(data = MPAs, 
              color = "yellow", 
              weight = 0, 
              fillOpacity = 1, 
              label = ~NAME_E) %>%
  
  # Add circle markers for each station
  addCircleMarkers(
    lng = ~stn_long,
    lat = ~stn_lat,
    label = ~paste(seriescode, instrumenttype, sep = " - "),
    radius = 0.5,  # Adjust the circle marker size 
    color = ~ifelse(seriescode == "DFOCanada", "red", "blue"),  # Marker color
    fillOpacity = 0.8  # Adjust fill opacity
  ) %>%
  
  # Add bounding box based on filter
  addRectangles(
    lng1 = proj_long_low,      # Left longitude
    lat1 = proj_lat_low,       # Lower latitude
    lng2 = proj_long_upp,      # Right longitude
    lat2 = proj_lat_upp,       # Upper latitude
    weight = 2.5,              # Border width
    color = "darkorange",      # Border color
    fill = FALSE               # Don't fill the rectangle
  ) %>%
  
  # Add legend for all elements of the plot
  addLegend(
    position = "bottomleft",
    colors = c("blue", "red", "darkorange", "yellow"),
    labels = c("All OTN", "OTN-DFO", "Data filter", "Marine Protected Areas"),
    title = "Legend"
  ) %>%
  
  # Add filter control displaying the range date
  addControl(
    html = sprintf("<strong>Filter:</strong> %s - %s", proj_start, proj_end)
  )
# Calculate the total number of receivers for each seriescode (OTN vs OTN-DFO).
summary_table <- otn_stations %>%
  group_by(seriescode) %>%
  summarize(
    Total_Receivers = n()
  ) %>%
  # Calculate the percentage relative to the total and round it.
  mutate(
    Percentage_Relative_To_Total = paste(round((Total_Receivers / sum(Total_Receivers)) * 100, 0), "%"))

# Rename columns
colnames(summary_table)[colnames(summary_table) == "Total_Receivers"] <- "Total # of Receivers"
colnames(summary_table)[colnames(summary_table) == "Percentage_Relative_To_Total"] <- "% Receivers relative to total"

# Print the summary table as a Markdown table.
table_receivers <- knitr::kable(
  summary_table, 
  format = "markdown",
  align = "l", 
  width = "100%"
)

Disclaimer: Information includes data that has been filtered for specific criteria relevant for eastern Canada and does not encompass all available OTN data. For a comprehensive dataset, please visit the OTN website.

# Display the map and table
map
table_receivers
seriescode Total # of Receivers % Receivers relative to total
DFOCanada 1348 19 %
OTNCanada 431 6 %
OTNGlobal 4425 63 %
UNAFFILIATED 819 12 %

OTN Summary of Species Tagged in Eastern Canada as part of DFO projects

This section is a summary of the OTN-DFO data, focusing on # of animals tagged by species in Eastern Canada. It includes the following elements:

  • Number of animals tagged (i.e. number of tags deployed) displayed on the y-axis.
  • Species displayed on the x-axis.
  • A summary statistic comparing the number of animals tagged with involvement from DFO
# Create a summary table with counts of animals tagged by species.
summary_otn_animals <- otn_animals %>%
  group_by(vernacularname) %>%
  summarise(
    Count = n(),
    Count_DFO = sum(grepl("DFO", institutioncode))
  )

# Reorder the levels of vernacularname based on Count 
summary_otn_animals <- summary_otn_animals %>%
  arrange(desc(Count)) %>%
  mutate(vernacularname = factor(vernacularname, levels = vernacularname))

# Create a bar plot using ggplot2.
plot_animals <- ggplot(summary_otn_animals, aes(x = vernacularname)) +
  geom_bar(aes(y = Count, fill = "OTN"), stat = "identity", position = "dodge") +
  geom_bar(aes(y = Count_DFO, fill = "OTN-DFO"), stat = "identity", position = "dodge") +
  labs(
    title = "Number of Animals Tagged by Species in Eastern Canada",
    x = "Species",
    y = "Number of Animals Tagged"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  coord_flip() +
  scale_fill_manual(values = c("OTN" = "blue", "OTN-DFO" = "red"))

# Convert the ggplot plot to an interactive plot using plotly.
interactive_plot <- ggplotly(plot_animals) %>%
  layout(legend = list(x = 0.5, y = 1))
# Create a Leaflet map to visualize were animals were originally tagged
map_animals <- leaflet(otn_animals) %>%
  addTiles() %>%
  
  # Add MPA polygons
  addPolygons(data = MPAs, 
              color = "yellow", 
              weight = 0, 
              fillOpacity = 1, 
              label = ~NAME_E) %>%

  # Add circle in the map for each animal tagged.
  addCircleMarkers(
    lng = ~longitude,
    lat = ~latitude,
    label = ~paste(institutioncode, scientificname, vernacularname, yearcollected, collector, sep = " - "),
    radius = 0.5,
    color = ~ifelse(grepl("DFO", institutioncode), "red", "blue"),
    fillOpacity = 0.8
  ) %>%

  # Add bounding box based on filter defined at the beginning of code.
  addRectangles(
    lng1 = proj_long_low,
    lat1 = proj_lat_low,
    lng2 = proj_long_upp,
    lat2 = proj_lat_upp,
    weight = 2.5,
    color = "darkorange",
    fill = FALSE
  ) %>%

  # Add legend for different elements of the map.
  addLegend(
    position = "bottomleft",
    colors = c("blue", "red", "darkorange", "yellow"),
    labels = c("All OTN", "OTN-DFO", "Data filter", "Marine Protected Areas"),
    title = "Legend"
  )

# Calculate the minimum and maximum years in the dataset.
min_year <- min(otn_animals$yearcollected)
max_year <- max(otn_animals$yearcollected)

# Add a text box to display the year collected range.
map_animals <- map_animals %>%
  addControl(
    html = sprintf("<strong>Year Collected Range:</strong> %d - %d", min_year, max_year),
    position = "topleft"
  )
interactive_plot
map_animals
# Filter the data frame to include only rows with "DFO" in the institutioncode
# Group the data by collector and institutioncode, and select the first row of each group
filtered_data <- otn_animals %>%
  filter(grepl("DFO", institutioncode)) %>%
  group_by(collector, institutioncode) %>%
  slice(1) %>%
  ungroup()

# Create a table of contributors and tagged species
knitr::kable(filtered_data[, c("collector", "institutioncode", "vernacularname")], caption = "DFO Researchers and Tagged Species (also plotted in the map above in blue)")
DFO Researchers and Tagged Species (also plotted in the map above in blue)
collector institutioncode vernacularname
AMY GLASS DFO-BIO snow crab
BEN_ZISSERSON DFO-BIO Atlantic halibut
BRUCE CHAPMAN, WARREN JOYCE DFO-BIO Atlantic halibut
GLENN CROSSIN DFO-SABS Atlantic salmon
MARC TRUDEL DFO-SABS Atlantic salmon
# Calculate the percentage of OTN-DFO tagging for each species.
summary_otn_animals$Percentage = ifelse(summary_otn_animals$Count_DFO == 0, "0%", paste0(round(summary_otn_animals$Count / summary_otn_animals$Count_DFO * 100), "%"))

# Create a table with species, OTN total count, and % OTN-DFO tagging.
knitr::kable(
  summary_otn_animals[, c("vernacularname", "Count", "Percentage")],
  format = "markdown", 
  col.names = c("Species", "OTN Total", "% OTN-DFO Tagging"),
  caption = "Summary of Animals Tagged by Species in Eastern Canada"
)
Summary of Animals Tagged by Species in Eastern Canada
Species OTN Total % OTN-DFO Tagging
Atlantic salmon 409 100%
Atlantic cod 59 100%
blue shark 50 0%
American lobster 38 0%
Atlantic halibut 37 100%
American eel 33 0%
alewife 32 100%
snow crab 20 100%
Atlantic tomcod 1 100%
shorthorn sculpin 1 100%

OTN and DFO Project Summaries

This section provides an overview of the 24 DFO-OTN projects available in the OTN database.

We have applied a basic filter in this section, considering projects affiliated with DFO, without specific filters related to years or geographic locations.

Please note that while we strive to include all relevant DFO-OTN projects in this summary, there may be instances where some projects are not listed. If you are a DFO researcher with an OTN project that you do not see here, we encourage you to contact OTN directly.

For the most up-to-date and comprehensive information on OTN projects and their participants, please visit the official OTN website: OTN Website

# Create a stacked bar plot of collaboration types by status using ggplot2.
stacked_bar_plot <- ggplot(otn_projects, aes(x = collaborationtype, fill = status)) +
  geom_bar() +  # Create a bar plot.
  labs(title = "Collaboration Type Distribution") +  # Set the plot title.
  theme_minimal() +  # Use a minimal theme.
  scale_fill_manual(values = c("ongoing" = "green", "completed" = "blue", "proposed" = "orange")) +  # Define fill colors.
  coord_flip()  # Flip the coordinates for horizontal bars.

# Convert the ggplot plot to a plotly object.
interactive_stacked_bar_plot <- ggplotly(stacked_bar_plot)

# Customize the layout of the interactive plot.
interactive_stacked_bar_plot %>%
  layout(legend = list(x = 0.5, y = 1))  # Adjust the position of the legend.
# Create an HTML table using knitr::kable to display a summary of DFO-OTN projects.
knitr::kable(
  otn_projects[, c("resource_full_name", "ocean", "status", "collaborationtype")],
  caption = "Summary of DFO-OTN Projects",
  format = "html",
  col.names = c("Project Title", "Ocean", "Status", "Collaboration Type")
)
Summary of DFO-OTN Projects
Project Title Ocean Status Collaboration Type
Migration of spiny dogfish NW ATLANTIC completed Tracker
Using a combination of 180kHz acoustic telemetry and satellite telemetry to quantify the early survival of harbour seal pups and connectivity between colonies of the St Lawrence Estuary NW ATLANTIC ongoing Data
Southern Gulf of St. Lawrence - DFO Cod Tagging NW ATLANTIC completed Tracker
Homing behaviour of short horn sculpin (Myoxocephalus scorpius) as measured by telemetry tracking in Newman Sound, Terra Nova National Park NW ATLANTIC completed Data
Dispersal in juvenile cod NW ATLANTIC completed Data
Maritimes Conservation Network: Gully Marine Protected Area (MPA) Acoustic Tracking Study NW ATLANTIC ongoing Data
Mixing of northern Gulf of St Lawrence cod into 3Ps: The Counting Fence project NW ATLANTIC completed Data
LaHave River, NS, Canada: DFO Salmon tagging NW ATLANTIC completed Tracker
Movement and habitat use of wolffish species in Newfoundland waters NW ATLANTIC completed Data
Inner Bay of Fundy Striped Bass Acoustic Telemetry NW ATLANTIC ongoing Data
St. Mary’s River adult Atlantic salmon tracking project NW ATLANTIC completed Data
Movements of Greenland sharks near the seal colony at Sable Island, Canada NW ATLANTIC ongoing Tracker
Smith Sound, Newfoundland - DFO Acoustic Array and Atlantic Cod Tagging NW ATLANTIC ongoing Data
Long-term telemetry study of Gilbert Bay Marine Protected Area, Southern Labrador NW ATLANTIC ongoing Data
Kennebecasis Basin Salmon Tracking NW ATLANTIC completed Tracker
Maritimes Region Atlantic salmon marine survival and migration. NW ATLANTIC ongoing Data
Maritimes Conservation Network: St. Anns Bank Marine Protected Area (MPA) Acoustic Tracking Study NW ATLANTIC ongoing Data
Shark Spatial Ecology and life history in NL waters NW ATLANTIC ongoing Data
Assessing the effects of aquaculture operations on the distribution and abundance of pelagic fishes and large predators in the Bay of Fundy. ##### Évaluation des effets des opérations aquaculture sur la distribution et l’abondance des poissons pélagiques et des grands prédateurs dans la baie de Fundy. NW ATLANTIC ongoing Data
DFO-NL Atlantic Cod Telemetry NW ATLANTIC ongoing Tracker
Investigating the spatial habitat interactions of a recent invader, green crab, to native species within Placentia Bay, Newfoundland NW ATLANTIC completed Data
Residency time, migration route, and survival of Atlantic salmon (Salmo salar) smolts and kelts in a Canadian fjord. NW ATLANTIC completed Data
Migration of porbeagle and blue sharks NW ATLANTIC completed Tracker
Scotian Shelf Snow Crab Tagging NW ATLANTIC ongoing Data

Future work includes creating the following additional information for projects:

  • Project Title:
  • Citation:
  • Points of contact:
  • Species tagged:
  • Abstract:

Questions and Suggestions

If you have any questions or suggestions regarding this reproducible report, please don’t hesitate to reach out to and/or . We welcome any inquiries or ideas to enhance the content or clarity of this report.