{"id":298276,"name":"WhaleMap","description":"The goal of this software is to rapidly and effectively collect and share whale survey information within and between research, government, industry, and public sectors.","url":"https://github.com/hansenjohnson/whalemap","last_synced_at":"2026-04-20T11:00:36.289Z","repository":{"id":40589256,"uuid":"105266456","full_name":"hansenjohnson/WhaleMap","owner":"hansenjohnson","description":"Collate and visualize whale survey results in the NW Atlantic","archived":false,"fork":false,"pushed_at":"2026-04-10T03:40:13.000Z","size":111190,"stargazers_count":23,"open_issues_count":20,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-04-12T07:02:31.283Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://whalemap.org/WhaleMap/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hansenjohnson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-09-29T11:48:24.000Z","updated_at":"2026-04-10T03:40:16.000Z","dependencies_parsed_at":"2026-02-22T07:00:39.881Z","dependency_job_id":null,"html_url":"https://github.com/hansenjohnson/WhaleMap","commit_stats":{"total_commits":1459,"total_committers":6,"mean_commits":"243.16666666666666","dds":"0.018505825908156304","last_synced_commit":"c78fe6b0412181f61d8faad28cc1bd717d213120"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/hansenjohnson/WhaleMap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2FWhaleMap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2FWhaleMap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2FWhaleMap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2FWhaleMap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hansenjohnson","download_url":"https://codeload.github.com/hansenjohnson/WhaleMap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2FWhaleMap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32044291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T10:33:29.490Z","status":"ssl_error","status_checked_at":"2026-04-20T10:32:30.107Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"hansenjohnson","name":"Hansen Johnson","uuid":"24778637","kind":"user","description":"PhD student in Biological Oceanography","email":"","website":"https://hansenjohnson.org/","location":null,"twitter":null,"company":"Dalhousie University","icon_url":"https://avatars.githubusercontent.com/u/24778637?v=4","repositories_count":1,"last_synced_at":"2023-03-10T09:40:37.436Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/hansenjohnson","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-20T07:39:03.719Z","updated_at":"2023-03-10T09:40:37.474Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hansenjohnson","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hansenjohnson/repositories"},"packages":[],"commits":{"id":1642012,"full_name":"hansenjohnson/whalemap","default_branch":"master","total_commits":1502,"total_committers":9,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":166.88888888888889,"dds":0.02130492676431428,"past_year_total_commits":33,"past_year_total_committers":4,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":8.25,"past_year_dds":0.1515151515151515,"last_synced_at":"2026-04-18T10:01:46.944Z","last_synced_commit":"3bc21096e1187846bccfe3f3749d5825fce8f755","created_at":"2024-08-13T00:02:10.786Z","updated_at":"2026-04-18T10:01:44.606Z","committers":[{"name":"Hansen Johnson","email":"hansen.johnson@dal.ca","login":"hansenjohnson","count":1470},{"name":"Neyman","email":"Lisa.Neyman@MyFWC.com","login":null,"count":13},{"name":"Heather Foley","email":"heather.foley@noaa.gov","login":"heather-foley-noaa","count":8},{"name":"Daniel Morrison","email":"daniel@phys.ocean.dal.ca","login":null,"count":3},{"name":"leahcrowe-DMF","email":"leah.m.crowe@mass.gov","login":"leahcrowe-DMF","count":2},{"name":"jstep818","email":"jstep818@gmail.com","login":"jstep818","count":2},{"name":"Kate McPherson","email":"kmcpherson@neaq.org","login":"katemcp","count":2},{"name":"Heather Pettis","email":"hpettis@neaq.org","login":"hpettis","count":1},{"name":"Brigid McKenna - NOAA","email":"brigid.mckenna@noaa.gov","login":"bmckenna2","count":1}],"past_year_committers":[{"name":"Hansen Johnson","email":"hjohnson@neaq.org","login":"hansenjohnson","count":28},{"name":"leahcrowe-DMF","email":"leah.m.crowe@mass.gov","login":"leahcrowe-DMF","count":2},{"name":"jstep818","email":"jstep818@gmail.com","login":"jstep818","count":2},{"name":"Brigid McKenna - NOAA","email":"brigid.mckenna@noaa.gov","login":"bmckenna2","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2Fwhalemap/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-20T00:00:09.037Z","repositories_count":6214605,"commits_count":900268862,"contributors_count":34914974,"owners_count":1143507,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"hansenjohnson/whalemap","html_url":"https://github.com/hansenjohnson/whalemap","last_synced_at":"2025-08-31T18:09:19.043Z","status":"error","issues_count":71,"pull_requests_count":0,"avg_time_to_close_issue":27151719.07843137,"avg_time_to_close_pull_request":null,"issues_closed_count":51,"pull_requests_closed_count":0,"pull_request_authors_count":0,"issue_authors_count":7,"avg_comments_per_issue":1.2253521126760563,"avg_comments_per_pull_request":null,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":731.0,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2024-08-13T00:02:49.026Z","updated_at":"2025-08-31T18:09:19.043Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2Fwhalemap","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/hansenjohnson%2Fwhalemap/issues","issue_labels_count":{"p2":6,"p0":5,"p1":3},"pull_request_labels_count":{},"issue_author_associations_count":{"OWNER":60,"NONE":6,"COLLABORATOR":4},"pull_request_author_associations_count":{},"issue_authors":{"hansenjohnson":60,"draker42":4,"mkcarr28":2,"Fireb1rd":1,"leahcrowe":1,"nunojesus":1,"Bodenrader":1},"pull_request_authors":{},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-16T00:00:09.014Z","repositories_count":14284363,"issues_count":34601114,"pull_requests_count":113220233,"authors_count":11235822,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":1},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{"Fireb1rd":1},"past_year_pull_request_authors":{},"maintainers":[{"login":"hansenjohnson","count":60,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/hansenjohnson"},{"login":"draker42","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/draker42"}],"active_maintainers":[]},"events":{"total":{"MemberEvent":1,"IssuesEvent":1,"WatchEvent":3,"PushEvent":31},"last_year":{"IssuesEvent":1,"PushEvent":11}},"keywords":[],"dependencies":[],"score":5.958424693029782,"created_at":"2024-08-13T00:02:06.966Z","updated_at":"2026-04-20T11:00:36.290Z","avatar_url":"https://github.com/hansenjohnson.png","language":"R","category":"Biosphere","sub_category":"Marine Life and Fishery","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# WhaleMap\nCollate and display whale survey results\n\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.03094/status.svg)](https://doi.org/10.21105/joss.03094)\n\n## Overview\n\nThe goal of this software is to rapidly and effectively collect and share whale survey information within and between research, government, industry, and public sectors. Our hope is that it will improve survey efficiency, increase public awareness, and inform impactful, transparent management decisions. The system is live at [whalemap.org](https://whalemap.org/), and the interactive map is available [here](https://whalemap.org/WhaleMap). Check out the [WhaleMap publication in JOSS](https://doi.org/10.21105/joss.03094) for a general description of the system, or continue reading for more detailed information. Please report any problems or suggestions via this site's issue page. \n\n## Project structure\n\n```\ndata/           All WhaleMap data (NOT tracked via git)\n    raw/        Raw data cloned directly from data contributors (NEVER manually edited)\n    interim/    Data from each platform coeherced to WhaleMap format\n    processed/  Processed data used for display\nR/              R scripts for data processing, display, and reporting\nsrc/            Shell scripts to execute data cloning and processing\nMakefile        Maps project dependency structure and facilitates efficient processing with `make`\nLICENSE         License information\nglobal.R        Shiny app - defining global variables\nserver.R        Shiny app - processing data for shiny app\nui.R            Shiny app - defining the user interface\n```\n\n## Data processing\n\n### Workflow\n\n1. Sync\n\nThe majority of the remote data are synced using the script `src/get_remote_data.sh`. This uses Rclone to sync data from remote repositories (Google Drive, Dropbox, etc.), and also calls `R/get_dcs.R` to download acoustic detection data. All the data are stored in `data/raw/`\n\n2. Process \n\nData from each contributor are processed to a common WhaleMap format (see below) using a custom R script (`R/proc_*.R`). Once formatted, observations and effort data from each platform are saved in `data/interim/`.\n\n3. Combine \n\nAll effort and observation data files in `data/interim/` are combined by (`R/combine.R`) and saved as `data/processed/effort.rds` and `data/processed/observations.rds`, respectively.\n\n4. Repeat\n\nA Makefile maps the dependency structure and orchestrates the efficient processing of the entire dataset. The `make` command is executed at the final step of `src/get_remote_data.sh` to update the dataset after synchronization. A cron job runs `src/get_remote_data.sh` every 15 minutes to keep the system up to date.\n\n### WhaleMap data formats\n\n#### Observations\n\n`time` - UTC time (YYYY-MM-DD HH:MM:SS)  \n`lat` - latitude in decimal degrees  \n`lon` - longitude in decimal degrees  \n`date` - UTC date (YYYY-MM-DD)  \n`yday` - day of year  \n`year` - year (YYYY)  \n`platform` - type of survey platform (`vessel`, `plane`, `slocum`, `buoy`, `rpas`, `opportunistic`)  \n`name` - name of platform (e.g., `noaa_twin_otter`, `dfo_coriolis`)  \n`id` - unique survey identifier comprised of survey start date, platform, and name (e.g., `2020-02-21_plane_noaa_twin_otter`)  \n`species` - species name (`right`, `fin`, `sei`, `humpback`, `blue`)  \n`score` - detection type and score (`Definite acoustic`, `Possible acoustic`, `Definite visual`, `Possible visual`)  \n`number` - number of whales (`NA` for acoustic detections)  \n`calves` - number of calves (`NA` for acoustic detections)  \n`source` - data source (`WhaleMap`, `RWSAS`, `WhaleInsight`, `NARWC`)  \n\n#### Tracks\n\n`time` - UTC time (YYYY-MM-DD HH:MM:SS)  \n`lat` - latitude in decimal degrees  \n`lon` - longitude in decimal degrees  \n`date` - UTC date (YYYY-MM-DD)  \n`yday` - day of year  \n`year` - year (YYYY)  \n`platform` - type of survey platform (`vessel`, `plane`, `slocum`, `buoy`, `rpas`, `opportunistic`)  \n`name` - name of platform (e.g., `noaa_twin_otter`, `dfo_coriolis`)  \n`id` - unique survey identifier comprised of survey start date, platform, and name (e.g., `2020-02-21_plane_noaa_twin_otter`)  \n`speed` - platform speed (m/s)  \n`altitude` - platform altitude (m)  \n`source` - data source (`WhaleMap`, `RWSAS`, `WhaleInsight`, `NARWC`)  \n\n#### Status table\n\n`script` - name of the platform processing script (e.g., `proc_2021_noaa_twin_otter.R`)  \n`name` - name of the platform to be displayed in the status table (e.g., `NOAA NEFSC survey sightings/tracks`)  \n`url` - link url to be displayed in status table  \n`email_list` - path to csv file with list of emails to be notified if there is an error processing platform data  \n \n### Reporting\n\nError catching is performed in the `Makefile` using the scripts `src/report_error.sh` and `src/remove_error.sh`. These are run each time a platform-specific processing script is run. The results of the processing are recorded in the status table (`status.txt`). If processing is successful, a timestamp is added in the status table. If processing is unsuccessful, an error message is printed in the status table and an auto-generated email is sent to a designated email list associated with that platform (using `src/send_email_alert.sh`). The status table is displayed in the Shiny app.\n\n### Adding a new platform\n\n1. Update `src/get_remote_data.sh` to sync raw data  \n2. Write R script to convert to WhaleMap format and save observations and tracks in `data/interim.`  \n3. Update `Makefile`  \n4. Update `status.txt`  \n5. Test (run `make` and view results in Shiny app)  \n6. Push changes to WhaleMap server via GitHub  \n\n## Setup\n\n### R\n\nHere is a list of the packages that WhaleMap relies on:\n- Data wrangling: `tidyverse`, `lubridate`, `tools`, `oce`   \n- Mapping: `rgdal`, `maptools`, `leaflet`, `leaflet.extras`, `sf`   \n- Shiny: `shiny`, `shinydashboard`, `shinybusy`   \n- Misc: `htmltools`, `htmlwidgets`, `plotly`, `RColorBrewer`\n\nHere's the output from `sessionInfo()`:\n```\n\u003e sessionInfo()\nR version 3.4.4 (2018-03-15)\nPlatform: x86_64-pc-linux-gnu (64-bit)\nRunning under: Ubuntu 16.04.6 LTS\n\nMatrix products: default\nBLAS: /usr/lib/libblas/libblas.so.3.6.0\nLAPACK: /usr/lib/lapack/liblapack.so.3.6.0\n\nlocale:\n [1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C              \n [3] LC_TIME=en_CA.UTF-8        LC_COLLATE=en_CA.UTF-8    \n [5] LC_MONETARY=en_CA.UTF-8    LC_MESSAGES=en_CA.UTF-8   \n [7] LC_PAPER=en_CA.UTF-8       LC_NAME=C                 \n [9] LC_ADDRESS=C               LC_TELEPHONE=C            \n[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C       \n\nattached base packages:\n[1] tools     stats     graphics  grDevices utils     datasets  methods  \n[8] base     \n\nother attached packages:\n [1] rgeos_0.3-26         RColorBrewer_1.1-2   forcats_0.4.0       \n [4] stringr_1.3.1        dplyr_0.8.0.1        purrr_0.3.0         \n [7] readr_1.1.1          tidyr_0.8.2          tibble_2.0.1        \n[10] tidyverse_1.2.1      sf_0.7-3             shinybusy_0.1.2     \n[13] leaflet.extras_1.0.0 plotly_4.8.0         ggplot2_3.1.0       \n[16] shinydashboard_0.7.0 oce_0.9-23           gsw_1.0-5           \n[19] testthat_2.0.0       lubridate_1.7.4      maptools_0.9-2      \n[22] htmlwidgets_1.3      htmltools_0.3.6      rgdal_1.2-18        \n[25] sp_1.3-1             leaflet_2.0.1        shiny_1.2.0  \n```\n\n### Linux / tools\n\nHere's a list of other tools that WhaleMap relies on and the current version:\n- make (GNU Make 4.1)\n- rclone (rclone v1.38)\n- git (git version 2.7.4)\n- pandoc (pandoc 1.16.0.2)\n- shiny-verser (Shiny Server v1.5.7.907)","funding_links":[],"readme_doi_urls":["https://doi.org/10.21105/joss.03094"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/298276","html_url":"https://ost.ecosyste.ms/projects/298276"}