diff --git a/DESCRIPTION b/DESCRIPTION
index c01de9d..05a18ad 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -8,14 +8,16 @@ Authors@R: c(
role = c("aut"),
comment = c(ORCID = "0000-0003-0319-4210")),
person("Nate", "Miller", , "nate@globalfishingwatch.org",
+ role = c("aut")),
+ person("Andrea", "Sánchez-Tapia", , "andrea.sanchez-tapia@globalfishingwatch.org",
role = c("aut"),
- comment = c(ORCID = "YOUR-ORCID-ID"))
+ comment = c(ORCID = "0000-0002-3521-4338"))
)
Description: This package connects to several Global Fishing Watch APIs to get vessel and events information in an R-friendly format.
License: file LICENSE
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
-RoxygenNote: 7.2.3
+RoxygenNote: 7.3.0
Imports:
dplyr,
geojsonsf,
diff --git a/NAMESPACE b/NAMESPACE
index 362a3c4..5cd630f 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -23,7 +23,6 @@ importFrom(httr2,request)
importFrom(httr2,resp_body_json)
importFrom(httr2,resp_body_raw)
importFrom(magrittr,"%>%")
-importFrom(magrittr,`%>%`)
importFrom(purrr,flatten)
importFrom(purrr,map)
importFrom(purrr,map_chr)
diff --git a/R/get_raster.R b/R/get_raster.R
index a8d7b8a..fc4ce9b 100644
--- a/R/get_raster.R
+++ b/R/get_raster.R
@@ -9,7 +9,7 @@
#' EEZ code). See details about geojson formatting.
#' @param region_source source of the region ('eez','mpa', 'rfmo' or 'user_json')
#' @param key Authorization token. Can be obtained with gfw_auth function
-#' @importFrom magrittr `%>%`
+#' @importFrom magrittr %>%
#' @importFrom readr read_csv
#' @importFrom httr2 resp_body_raw
#' @importFrom httr2 req_body_raw
diff --git a/R/utils.R b/R/utils.R
index d2299f2..cbde1a0 100644
--- a/R/utils.R
+++ b/R/utils.R
@@ -181,7 +181,7 @@ get_region_id <- function(region_name, region_source = 'eez', key) {
#' Formats an sf shapefile to a formatted geojson
#'
#' @param sf_shape The sf shapefile to transform
-#' @returns A correctly-formatted geojason to be used in `get_raster()`
+#' @returns A correctly-formatted geojson to be used in `get_raster()`
#' @importFrom geojsonsf sf_geojson
#' @export
diff --git a/README.Rmd b/README.Rmd
index 7cfcf93..e52c8aa 100644
--- a/README.Rmd
+++ b/README.Rmd
@@ -7,6 +7,7 @@ output: github_document
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
+ eval = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
@@ -21,6 +22,10 @@ knitr::opts_chunk$set(
[![Licence](https://img.shields.io/badge/license-Apache%202-blue)](https://opensource.org/licenses/Apache-2.0)
+> **Important**
+> The current version of `gfwr` gives access to Global Fishing Watch API [version 2](https://globalfishingwatch.org/our-apis/documentation#version-2-api). This version is in Maintenance mode, it will be operational and available but no new functionalities will be added. This version will be Deprecated on April 30 2024. A new version fetching data from [version 3](https://globalfishingwatch.org/our-apis/documentation#version-3-api) is being prepared.
+
+
The `gfwr` R package is a simple wrapper for the Global Fishing Watch (GFW) [APIs](https://globalfishingwatch.org/our-apis/documentation#introduction). It provides convenient functions to freely pull GFW data directly into R in tidy formats.
The package currently works with the following APIs:
@@ -29,7 +34,7 @@ The package currently works with the following APIs:
* [Events API](https://globalfishingwatch.org/our-apis/documentation#events-api): encounters, loitering, port visits and fishing events based on AIS data
* [Map Visualization (4Wings API)](https://globalfishingwatch.org/our-apis/documentation#map-visualization-4wings-api): apparent fishing effort based on AIS data
-> **Note**:
+> **Note**:
> See the [Terms of Use](https://globalfishingwatch.org/our-apis/documentation#reference-data) page for GFW APIs for information on our API licenses and rate limits.
## Installation
@@ -62,7 +67,7 @@ the [GFW API Portal](https://globalfishingwatch.org/our-apis/tokens). Save
this token to your `.Renviron` file (using `usethis::edit_r_environ()`) by adding a variable named `GFW_TOKEN` to
the file (`GFW_TOKEN = "PASTE_YOUR_TOKEN_HERE"`). Save the `.Renviron` file and restart the R session to make the edit effective.
-Then use the `gfw_auth` helper function to save the information to an object
+Then use the `gfw_auth()` helper function to save the information to an object
in your R workspace every time you need to extract the token and pass it
to subsequent `gfwr` functions.
@@ -78,12 +83,12 @@ or this
key <- Sys.getenv("GFW_TOKEN")
```
-> **Note**:
-> `gfwr` functions are set to use `key = gfw_auth()` by default.
+> **Note**:
+> `gfwr` functions are set to use `key = gfw_auth()` by default.
## Vessels API
-The `get_vessel_info` function allows you to get vessel identity details from the [GFW Vessels API](https://globalfishingwatch.org/our-apis/documentation#introduction-vessels-api).
+The `get_vessel_info()` function allows you to get vessel identity details from the [GFW Vessels API](https://globalfishingwatch.org/our-apis/documentation#introduction-vessels-api).
There are three search types: `basic`, `advanced`, and `id`.
* `basic` search takes features like MMSI, IMO, callsign, shipname as inputs and
@@ -92,7 +97,7 @@ identifies all vessels in the specified dataset that match
* `id` allows the user to specify the `vessel id` (generated by GFW)
> **Note**:
-> `vessel id` is an internal ID generated by GFW to connect data accross APIs
+> `vessel id` is an internal ID generated by GFW to connect data accross APIs
and involves a combination of vessel and tracking data information
The user can also specify which identity databases to use: `carrier_vessel`,
@@ -100,9 +105,9 @@ The user can also specify which identity databases to use: `carrier_vessel`,
### Examples
-To get information of a vessel with MMSI = 224224000 using all datasets:
+To get information of a vessel with `MMSI = 224224000` using all datasets:
-```{r example_vessel_info_1, eval=T}
+```{r example_vessel_info_1}
get_vessel_info(query = 224224000,
search_type = "basic",
dataset = "all",
@@ -112,62 +117,63 @@ get_vessel_info(query = 224224000,
To combine different fields and do fuzzy matching to search the `carrier vessel`
dataset:
-```{r example_vessel_info_2, eval=F}
+```{r example_vessel_info_2}
get_vessel_info(query = "shipname LIKE '%GABU REEFE%' OR imo = '8300949'",
search_type = "advanced", dataset = "carrier_vessel", key = key)
```
To specify a `vessel id`:
-```{r example_vessel_info_3, eval=F}
+```{r example_vessel_info_3}
get_vessel_info(query = "8c7304226-6c71-edbe-0b63-c246734b3c01",
- search_type = "id", dataset = "carrier_vessel", key = key)
+ search_type = "id",
+ dataset = "carrier_vessel",
+ key = key)
```
To specify more than one `vessel id`:
-> **Note**:
-
+> **Note**:
> No spaces or newlines are permitted between the `vessel ids`
-```{r example_vessel_info_4, eval=F}
+```{r example_vessel_info_4}
get_vessel_info(query =
"8c7304226-6c71-edbe-0b63-c246734b3c01,6583c51e3-3626-5638-866a-f47c3bc7ef7c,71e7da672-2451-17da-b239-857831602eca",
- search_type = 'id', key = key)
+ search_type = "id", key = key)
```
## Events API
-The `get_event` function allows you to get data on specific vessel activities from the [GFW Events API](https://globalfishingwatch.org/our-apis/documentation#events-api). Event types include:
+The `get_event()` function allows you to get data on specific vessel activities from the [GFW Events API](https://globalfishingwatch.org/our-apis/documentation#events-api). Event types include:
apparent fishing events, potential transshipment events (two-vessel encounters and loitering by refrigerated carrier vessels), and port visits. Find more information in our [caveat documentation](https://globalfishingwatch.org/our-apis/documentation#data-caveat).
### Examples
Let's say that you don't know the `vessel id` but you have the MMSI (or other
identity information).
-You can use `get_vessel_info` function first to extract `vessel id` and then use
-it in the `get_event` function:
+You can use `get_vessel_info()` function first to extract `vessel id` and then use
+it in the `get_event()` function:
-```{r example_id_event, eval=T}
+```{r example_id_event}
vessel_id <- get_vessel_info(query = 224224000, search_type = "basic", key = key)$id
```
To get a list of port visits for that vessel:
-```{r example_event_type_1, eval=T}
-get_event(event_type='port_visit',
+```{r example_event_type_1}
+get_event(event_type = "port_visit",
vessel = vessel_id,
- confidences = '4',
+ confidences = "4",
key = key
)
```
We can also use more than one `vessel id`:
-```{r example_event_type_2, eval=F}
-get_event(event_type='port_visit',
- vessel = '8c7304226-6c71-edbe-0b63-c246734b3c01,6583c51e3-3626-5638-866a-f47c3bc7ef7c',
+```{r example_event_type_2}
+get_event(event_type = "port_visit",
+ vessel = "8c7304226-6c71-edbe-0b63-c246734b3c01,6583c51e3-3626-5638-866a-f47c3bc7ef7c",
confidences = 4,
start_date = "2020-01-01",
end_date = "2020-02-01",
@@ -177,8 +183,8 @@ get_event(event_type='port_visit',
Or get encounters for all vessels in a given date range:
-```{r example_event_type_3, eval=F}
-get_event(event_type='encounter',
+```{r example_event_type_3}
+get_event(event_type = "encounter",
start_date = "2020-01-01",
end_date = "2020-01-03",
key = key
@@ -187,11 +193,13 @@ get_event(event_type='encounter',
When a date range is provided to `get_event()` using both `start_date` and `end_date`, any event overlapping that range will be returned, including events that start prior to `start_date` or end after `end_date`. If just `start_date` or `end_date` are provided, results will include all events that end after `start_date` or begin prior to `end_date`, respectively.
-> *Note*: Because encounter events are events between two vessels, a single event will be represented twice in the data, once for each vessel. To capture this information and link the related data rows, the `id` field for encounter events includes an additional suffix (1 or 2) separated by a period. The `vessel` field will also contain different information specific to each vessel.
+> **Note**:
+> Because encounter events are events between two vessels, a single event will be represented twice in the data, once for each vessel. To capture this information and link the related data rows, the `id` field for encounter events includes an additional suffix (1 or 2) separated by a period. The `vessel` field will also contain different information specific to each vessel.
+
As another example, let's combine the Vessels and Events APIs to get fishing events for a list of 100 USA-flagged trawlers:
-```{r example_event_type_4a, eval=T}
+```{r example_event_type_4a}
# Download the list of USA trawlers
usa_trawlers <- get_vessel_info(
query = "flag = 'USA' AND geartype = 'trawlers'",
@@ -201,13 +209,13 @@ usa_trawlers <- get_vessel_info(
)
# Collapse vessel ids into a commas separated list to pass to Events API
-usa_trawler_ids <- paste0(usa_trawlers$id[1:100], collapse = ',')
+usa_trawler_ids <- paste0(usa_trawlers$id[1:100], collapse = ",")
```
Now get the list of fishing events for these trawlers in January, 2020:
-```{r example_event_type_4b, eval=T}
-get_event(event_type='fishing',
+```{r example_event_type_4b}
+get_event(event_type = "fishing",
vessel = usa_trawler_ids,
start_date = "2020-01-01",
end_date = "2020-02-01",
@@ -217,8 +225,8 @@ get_event(event_type='fishing',
When no events are available, the `get_event()` function returns nothing.
-```{r example_event_type_4c, eval=T}
-get_event(event_type='fishing',
+```{r example_event_type_4c}
+get_event(event_type = "fishing",
vessel = usa_trawler_ids[2],
start_date = "2020-01-01",
end_date = "2020-01-01",
@@ -228,7 +236,7 @@ get_event(event_type='fishing',
## Map Visualization API
-The `get_raster` function gets a raster from the [4Wings API](https://globalfishingwatch.org/our-apis/documentation#map-visualization-4wings-api) and converts the
+The `get_raster()` function gets a raster from the [4Wings API](https://globalfishingwatch.org/our-apis/documentation#map-visualization-4wings-api) and converts the
response to a data frame. In order to use it, you should specify:
* The spatial resolution, which can be `low` (0.1 degree) or `high` (0.01 degree)
@@ -243,53 +251,58 @@ response to a data frame. In order to use it, you should specify:
Here's an example where we enter the geojson data manually:
+> **Note**:
+> In `gwfr`, the geojson needs to be enclosed by a `{"geojson": ...}` tag. If you have
+> a `geojsonsf::sf_geojson()` object, you can obtain the geojson object with a
+simple concatenation: `paste0('{"geojson":', your_geojson,'}')`
+
-```{r example_map_1, eval=F}
+```{r example_map_1}
region_json = '{"geojson":{"type":"Polygon","coordinates":[[[-76.11328125,-26.273714024406416],[-76.201171875,-26.980828590472093],[-76.376953125,-27.527758206861883],[-76.81640625,-28.30438068296276],[-77.255859375,-28.767659105691244],[-77.87109375,-29.152161283318918],[-78.486328125,-29.45873118535532],[-79.189453125,-29.61167011519739],[-79.892578125,-29.6880527498568],[-80.595703125,-29.61167011519739],[-81.5625,-29.382175075145277],[-82.177734375,-29.07537517955835],[-82.705078125,-28.6905876542507],[-83.232421875,-28.071980301779845],[-83.49609375,-27.683528083787756],[-83.759765625,-26.980828590472093],[-83.84765625,-26.35249785815401],[-83.759765625,-25.64152637306576],[-83.583984375,-25.16517336866393],[-83.232421875,-24.447149589730827],[-82.705078125,-23.966175871265037],[-82.177734375,-23.483400654325635],[-81.5625,-23.241346102386117],[-80.859375,-22.998851594142906],[-80.15625,-22.917922936146027],[-79.453125,-22.998851594142906],[-78.662109375,-23.1605633090483],[-78.134765625,-23.40276490540795],[-77.431640625,-23.885837699861995],[-76.9921875,-24.28702686537642],[-76.552734375,-24.846565348219727],[-76.2890625,-25.48295117535531],[-76.11328125,-26.273714024406416]]]}}'
get_raster(
- spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2021-01-01,2021-12-31',
+ spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-12-31",
region = region_json,
- region_source = 'user_json',
+ region_source = "user_json",
key = key
)
```
-If you want raster data from a particular EEZ, you can use the `get_region_id`
+If you want raster data from a particular EEZ, you can use the `get_region_id()`
function to get the EEZ id, enter that code in the `region` argument
-of `get_raster` instead of the geojson data (ensuring you specify the `region_source`
-as `'eez'`:
+of `get_raster()` instead of the geojson data (ensuring you specify the `region_source`
+as `"eez"`:
-```{r example_map_2, eval=F}
+```{r example_map_2}
# use EEZ function to get EEZ code of Cote d'Ivoire
-code_eez <- get_region_id(region_name = 'CIV', region_source = 'eez', key = key)
+code_eez <- get_region_id(region_name = "CIV", region_source = "eez", key = key)
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2021-01-01,2021-10-01',
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-10-01",
region = code_eez$id,
- region_source = 'eez',
+ region_source = "eez",
key = key)
```
You could search for just one word in the name of the EEZ and then decide which
one you want:
-```{r example_map_3, eval=T}
-(get_region_id(region_name = 'France', region_source = 'eez', key = key))
+```{r example_map_3}
+(get_region_id(region_name = "France", region_source = "eez", key = key))
# Let's say we're interested in the French Exclusive Economic Zone, 5677
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2021-01-01,2021-10-01',
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-10-01",
region = 5677,
- region_source = 'eez',
+ region_source = "eez",
key = key)
```
@@ -297,16 +310,16 @@ get_raster(spatial_resolution = 'low',
A similar approach can be used to search for a specific Marine Protected Area,
in this case the Phoenix Island Protected Area (PIPA)
-```{r example_map_4, eval=F}
+```{r example_map_4}
# use region id function to get MPA code of Phoenix Island Protected Area
-code_mpa <- get_region_id(region_name = 'Phoenix', region_source = 'mpa', key = key)
+code_mpa <- get_region_id(region_name = "Phoenix", region_source = "mpa", key = key)
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2015-01-01,2015-06-01',
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2015-01-01,2015-06-01",
region = code_mpa$id[1],
- region_source = 'mpa',
+ region_source = "mpa",
key = key)
```
@@ -314,23 +327,23 @@ It is also possible to filter rasters to one of the five regional fisheries mana
organizations (RFMO) that manage tuna and tuna-like species. These include `"ICCAT"`,
`"IATTC"`,`"IOTC"`, `"CCSBT"` and `"WCPFC"`.
-```{r example_map_5, eval=T}
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'daily',
- group_by = 'flag',
- date_range = '2021-01-01,2021-01-15',
- region = 'ICCAT',
- region_source = 'rfmo',
+```{r example_map_5}
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "daily",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-01-15",
+ region = "ICCAT",
+ region_source = "rfmo",
key = key)
```
-The `get_region_id` function also works in reverse. If a region id is passed as
+The `get_region_id()` function also works in reverse. If a region id is passed as
a `numeric` to the function as the `region_name`, the corresponding region label or iso3 can be returned.
This is especially useful when events are returned with regions.
-```{r example_region_id, eval=T}
+```{r example_region_id}
# using same example as above
-get_event(event_type = 'fishing',
+get_event(event_type = "fishing",
vessel = usa_trawler_ids,
start_date = "2020-01-01",
end_date = "2020-02-01",
@@ -338,12 +351,12 @@ get_event(event_type = 'fishing',
key = key
) %>%
# extract EEZ id code
- dplyr::mutate(eez = as.character(purrr::map(purrr::map(regions, pluck, 'eez'),
- paste0, collapse = ','))) %>%
+ dplyr::mutate(eez = as.character(purrr::map(purrr::map(regions, pluck, "eez"),
+ paste0, collapse = ","))) %>%
dplyr::select(id, type, start, end, lat, lon, eez) %>%
dplyr::rowwise() %>%
dplyr::mutate(eez_name = get_region_id(region_name = as.numeric(eez),
- region_source = 'eez',
+ region_source = "eez",
key = key)$label)
```
diff --git a/README.md b/README.md
index d656d1f..c8db4e1 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,17 @@ developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.re
[![Licence](https://img.shields.io/badge/license-Apache%202-blue)](https://opensource.org/licenses/Apache-2.0)
+> **Important**
+> The current version of `gfwr` gives access to Global Fishing Watch API
+> [version
+> 2](https://globalfishingwatch.org/our-apis/documentation#version-2-api).
+> This version is in Maintenance mode, it will be operational and
+> available but no new functionalities will be added. This version will
+> be Deprecated on April 30 2024. A new version fetching data from
+> [version
+> 3](https://globalfishingwatch.org/our-apis/documentation#version-3-api)
+> is being prepared.
+
The `gfwr` R package is a simple wrapper for the Global Fishing Watch
(GFW)
[APIs](https://globalfishingwatch.org/our-apis/documentation#introduction).
@@ -64,7 +75,7 @@ Save this token to your `.Renviron` file (using
the file (`GFW_TOKEN = "PASTE_YOUR_TOKEN_HERE"`). Save the `.Renviron`
file and restart the R session to make the edit effective.
-Then use the `gfw_auth` helper function to save the information to an
+Then use the `gfw_auth()` helper function to save the information to an
object in your R workspace every time you need to extract the token and
pass it to subsequent `gfwr` functions.
@@ -85,8 +96,8 @@ key <- Sys.getenv("GFW_TOKEN")
## Vessels API
-The `get_vessel_info` function allows you to get vessel identity details
-from the [GFW Vessels
+The `get_vessel_info()` function allows you to get vessel identity
+details from the [GFW Vessels
API](https://globalfishingwatch.org/our-apis/documentation#introduction-vessels-api).
There are three search types: `basic`, `advanced`, and `id`.
@@ -108,7 +119,8 @@ recommended and is the option set by default.
### Examples
-To get information of a vessel with MMSI = 224224000 using all datasets:
+To get information of a vessel with `MMSI = 224224000` using all
+datasets:
``` r
get_vessel_info(query = 224224000,
@@ -130,29 +142,56 @@ To combine different fields and do fuzzy matching to search the
``` r
get_vessel_info(query = "shipname LIKE '%GABU REEFE%' OR imo = '8300949'",
search_type = "advanced", dataset = "carrier_vessel", key = key)
+#> # A tibble: 3 × 17
+#> name callsign firstTransmissionDate flag geartype id imo
+#>
+#> 1 1 ER2732 2019-02-22T21:46:13Z MDA NA 0b7047cb5-58c8-6e63… 8300…
+#> 2 2 TJMC996 2022-01-24T09:13:48Z CMR NA 1da8dbc23-3c48-d5ce… 8300…
+#> 3 3 D6FJ2 2012-01-02T16:50:42Z COM NA 58cf536b1-1fca-dac3… 8300…
+#> # ℹ 10 more variables: lastTransmissionDate , mmsi , msgCount ,
+#> # posCount , shipname , source , vesselType ,
+#> # years , dataset , score
```
To specify a `vessel id`:
``` r
get_vessel_info(query = "8c7304226-6c71-edbe-0b63-c246734b3c01",
- search_type = "id", dataset = "carrier_vessel", key = key)
+ search_type = "id",
+ dataset = "carrier_vessel",
+ key = key)
+#> # A tibble: 1 × 16
+#> name callsign firstTransmissionDate flag geartype id imo
+#>
+#> 1 1 5BWC3 2013-05-15T20:18:31Z CYP NA 8c7304226-6c71-edbe… 9076…
+#> # ℹ 9 more variables: lastTransmissionDate , mmsi , msgCount ,
+#> # posCount , shipname , source , vesselType ,
+#> # years , dataset
```
To specify more than one `vessel id`:
-> **Note**: No spaces or newlines are permitted between the
-> `vessel ids`
+> **Note**:
+> No spaces or newlines are permitted between the `vessel ids`
``` r
get_vessel_info(query =
"8c7304226-6c71-edbe-0b63-c246734b3c01,6583c51e3-3626-5638-866a-f47c3bc7ef7c,71e7da672-2451-17da-b239-857831602eca",
- search_type = 'id', key = key)
+ search_type = "id", key = key)
+#> # A tibble: 3 × 16
+#> name callsign firstTransmissionDate flag geartype id imo
+#>
+#> 1 1 5BWC3 2013-05-15T20:18:31Z CYP 8c7304226-… 9076…
+#> 2 2 DTBY3 2013-09-02T03:59:51Z KOR tuna_purse_seines 6583c51e3-… 8919…
+#> 3 3 DUQA-7 2017-02-15T05:54:53Z PHL tuna_purse_seines 71e7da672-… 8118…
+#> # ℹ 9 more variables: lastTransmissionDate , mmsi , msgCount ,
+#> # posCount , shipname , source , vesselType ,
+#> # years , dataset
```
## Events API
-The `get_event` function allows you to get data on specific vessel
+The `get_event()` function allows you to get data on specific vessel
activities from the [GFW Events
API](https://globalfishingwatch.org/our-apis/documentation#events-api).
Event types include: apparent fishing events, potential transshipment
@@ -163,8 +202,8 @@ documentation](https://globalfishingwatch.org/our-apis/documentation#data-caveat
### Examples
Let’s say that you don’t know the `vessel id` but you have the MMSI (or
-other identity information). You can use `get_vessel_info` function
-first to extract `vessel id` and then use it in the `get_event`
+other identity information). You can use `get_vessel_info()` function
+first to extract `vessel id` and then use it in the `get_event()`
function:
``` r
@@ -174,9 +213,9 @@ vessel_id <- get_vessel_info(query = 224224000, search_type = "basic", key = key
To get a list of port visits for that vessel:
``` r
-get_event(event_type='port_visit',
+get_event(event_type = "port_visit",
vessel = vessel_id,
- confidences = '4',
+ confidences = "4",
key = key
)
#> [1] "Downloading 35 events from GFW"
@@ -201,23 +240,49 @@ get_event(event_type='port_visit',
We can also use more than one `vessel id`:
``` r
-get_event(event_type='port_visit',
- vessel = '8c7304226-6c71-edbe-0b63-c246734b3c01,6583c51e3-3626-5638-866a-f47c3bc7ef7c',
+get_event(event_type = "port_visit",
+ vessel = "8c7304226-6c71-edbe-0b63-c246734b3c01,6583c51e3-3626-5638-866a-f47c3bc7ef7c",
confidences = 4,
start_date = "2020-01-01",
end_date = "2020-02-01",
key = key
)
+#> [1] "Downloading 3 events from GFW"
+#> # A tibble: 3 × 11
+#> id type start end lat lon regions
+#>
+#> 1 7cd1e3… port… 2019-12-19 23:05:31 2020-01-24 19:05:18 28.1 -15.4
+#> 2 c2f096… port… 2020-01-26 05:52:47 2020-01-29 14:39:33 20.8 -17.0
+#> 3 7c06e4… port… 2020-01-31 02:20:08 2020-02-03 15:56:31 28.1 -15.4
+#> # ℹ 4 more variables: boundingBox , distances , vessel ,
+#> # event_info
```
Or get encounters for all vessels in a given date range:
``` r
-get_event(event_type='encounter',
+get_event(event_type = "encounter",
start_date = "2020-01-01",
end_date = "2020-01-03",
key = key
)
+#> [1] "Downloading 70 events from GFW"
+#> # A tibble: 70 × 11
+#> id type start end lat lon
+#>
+#> 1 a3cff76a070a919f… enco… 2019-12-31 08:40:00 2020-01-01 07:40:00 57.5 157.
+#> 2 a3cff76a070a919f… enco… 2019-12-31 08:40:00 2020-01-01 07:40:00 57.5 157.
+#> 3 b059d20534c7fd5f… enco… 2019-12-31 12:00:00 2020-01-01 13:50:00 -17.6 -79.3
+#> 4 b059d20534c7fd5f… enco… 2019-12-31 12:00:00 2020-01-01 13:50:00 -17.6 -79.3
+#> 5 cd07d7e5d65e81b3… enco… 2019-12-31 12:50:00 2020-01-01 09:50:00 -17.7 -79.2
+#> 6 cd07d7e5d65e81b3… enco… 2019-12-31 12:50:00 2020-01-01 09:50:00 -17.7 -79.2
+#> 7 13dac0526c993292… enco… 2019-12-31 14:50:00 2020-01-01 20:20:00 -17.6 -79.4
+#> 8 13dac0526c993292… enco… 2019-12-31 14:50:00 2020-01-01 20:20:00 -17.6 -79.4
+#> 9 2e8b8040d87ad0ae… enco… 2019-12-31 16:00:00 2020-01-01 08:50:00 -3.44 -147.
+#> 10 2e8b8040d87ad0ae… enco… 2019-12-31 16:00:00 2020-01-01 08:50:00 -3.44 -147.
+#> # ℹ 60 more rows
+#> # ℹ 5 more variables: regions , boundingBox , distances ,
+#> # vessel , event_info
```
When a date range is provided to `get_event()` using both `start_date`
@@ -227,12 +292,13 @@ including events that start prior to `start_date` or end after
will include all events that end after `start_date` or begin prior to
`end_date`, respectively.
-> *Note*: Because encounter events are events between two vessels, a
-> single event will be represented twice in the data, once for each
-> vessel. To capture this information and link the related data rows,
-> the `id` field for encounter events includes an additional suffix (1
-> or 2) separated by a period. The `vessel` field will also contain
-> different information specific to each vessel.
+> **Note**:
+> Because encounter events are events between two vessels, a single
+> event will be represented twice in the data, once for each vessel. To
+> capture this information and link the related data rows, the `id`
+> field for encounter events includes an additional suffix (1 or 2)
+> separated by a period. The `vessel` field will also contain different
+> information specific to each vessel.
As another example, let’s combine the Vessels and Events APIs to get
fishing events for a list of 100 USA-flagged trawlers:
@@ -247,33 +313,33 @@ usa_trawlers <- get_vessel_info(
)
# Collapse vessel ids into a commas separated list to pass to Events API
-usa_trawler_ids <- paste0(usa_trawlers$id[1:100], collapse = ',')
+usa_trawler_ids <- paste0(usa_trawlers$id[1:100], collapse = ",")
```
Now get the list of fishing events for these trawlers in January, 2020:
``` r
-get_event(event_type='fishing',
+get_event(event_type = "fishing",
vessel = usa_trawler_ids,
start_date = "2020-01-01",
end_date = "2020-02-01",
key = key
)
-#> [1] "Downloading 102 events from GFW"
-#> # A tibble: 102 × 11
+#> [1] "Downloading 106 events from GFW"
+#> # A tibble: 106 × 11
#> id type start end lat lon regions
#>
-#> 1 10b0… fish… 2019-12-31 14:51:06 2020-01-01 02:20:02 29.1 -90.0
-#> 2 e210… fish… 2019-12-31 20:19:35 2020-01-01 03:15:25 28.9 -89.8
-#> 3 5db6… fish… 2020-01-06 08:00:05 2020-01-06 10:20:02 45.9 -124.
-#> 4 60c8… fish… 2020-01-07 02:35:53 2020-01-07 20:25:18 41.1 -69.3
-#> 5 ccbe… fish… 2020-01-08 20:44:15 2020-01-09 09:16:14 34.6 -76.6
-#> 6 d20b… fish… 2020-01-09 10:10:14 2020-01-09 13:23:45 34.6 -76.6
-#> 7 cda2… fish… 2020-01-09 17:17:15 2020-01-09 22:47:20 34.6 -76.6
-#> 8 f103… fish… 2020-01-11 03:28:38 2020-01-13 18:25:36 41.1 -69.3
-#> 9 81c8… fish… 2020-01-11 14:10:04 2020-01-11 15:43:09 47.7 -122.
-#> 10 0286… fish… 2020-01-11 18:40:04 2020-01-11 20:50:06 47.7 -122.
-#> # ℹ 92 more rows
+#> 1 0678… fish… 2020-01-01 15:56:25 2020-01-02 00:41:57 35.1 -76.0
+#> 2 4891… fish… 2020-01-02 01:55:51 2020-01-03 00:05:57 35.0 -76.0
+#> 3 d75a… fish… 2020-01-02 23:31:48 2020-01-03 04:37:19 41.1 -71.4
+#> 4 8dda… fish… 2020-01-03 00:39:08 2020-01-03 02:49:08 35.0 -76.0
+#> 5 c85b… fish… 2020-01-03 15:51:15 2020-01-03 18:24:44 39.8 -73.9
+#> 6 1bee… fish… 2020-01-05 00:35:43 2020-01-05 06:11:43 39.7 -73.9
+#> 7 379d… fish… 2020-01-05 04:58:45 2020-01-05 06:31:45 43.7 -124.
+#> 8 0b45… fish… 2020-01-06 06:20:19 2020-01-08 02:46:19 39.6 -73.9
+#> 9 04d2… fish… 2020-01-06 21:12:01 2020-01-07 02:35:11 34.6 -76.6
+#> 10 2ad0… fish… 2020-01-07 13:37:54 2020-01-07 15:16:54 34.7 -76.8
+#> # ℹ 96 more rows
#> # ℹ 4 more variables: boundingBox , distances , vessel ,
#> # event_info
```
@@ -282,7 +348,7 @@ When no events are available, the `get_event()` function returns
nothing.
``` r
-get_event(event_type='fishing',
+get_event(event_type = "fishing",
vessel = usa_trawler_ids[2],
start_date = "2020-01-01",
end_date = "2020-01-01",
@@ -294,7 +360,7 @@ get_event(event_type='fishing',
## Map Visualization API
-The `get_raster` function gets a raster from the [4Wings
+The `get_raster()` function gets a raster from the [4Wings
API](https://globalfishingwatch.org/our-apis/documentation#map-visualization-4wings-api)
and converts the response to a data frame. In order to use it, you
should specify:
@@ -314,44 +380,88 @@ should specify:
Here’s an example where we enter the geojson data manually:
+> **Note**:
+> In `gwfr`, the geojson needs to be enclosed by a `{"geojson": ...}`
+> tag. If you have a `geojsonsf::sf_geojson()` object, you can obtain
+> the geojson object with a simple concatenation:
+> `paste0('{"geojson":', your_geojson,'}')`
+
``` r
region_json = '{"geojson":{"type":"Polygon","coordinates":[[[-76.11328125,-26.273714024406416],[-76.201171875,-26.980828590472093],[-76.376953125,-27.527758206861883],[-76.81640625,-28.30438068296276],[-77.255859375,-28.767659105691244],[-77.87109375,-29.152161283318918],[-78.486328125,-29.45873118535532],[-79.189453125,-29.61167011519739],[-79.892578125,-29.6880527498568],[-80.595703125,-29.61167011519739],[-81.5625,-29.382175075145277],[-82.177734375,-29.07537517955835],[-82.705078125,-28.6905876542507],[-83.232421875,-28.071980301779845],[-83.49609375,-27.683528083787756],[-83.759765625,-26.980828590472093],[-83.84765625,-26.35249785815401],[-83.759765625,-25.64152637306576],[-83.583984375,-25.16517336866393],[-83.232421875,-24.447149589730827],[-82.705078125,-23.966175871265037],[-82.177734375,-23.483400654325635],[-81.5625,-23.241346102386117],[-80.859375,-22.998851594142906],[-80.15625,-22.917922936146027],[-79.453125,-22.998851594142906],[-78.662109375,-23.1605633090483],[-78.134765625,-23.40276490540795],[-77.431640625,-23.885837699861995],[-76.9921875,-24.28702686537642],[-76.552734375,-24.846565348219727],[-76.2890625,-25.48295117535531],[-76.11328125,-26.273714024406416]]]}}'
get_raster(
- spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2021-01-01,2021-12-31',
+ spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-12-31",
region = region_json,
- region_source = 'user_json',
+ region_source = "user_json",
key = key
)
+#> Rows: 5 Columns: 6
+#> ── Column specification ────────────────────────────────────────────────────────
+#> Delimiter: ","
+#> chr (1): flag
+#> dbl (5): Lat, Lon, Time Range, Vessel IDs, Apparent Fishing Hours
+#>
+#> ℹ Use `spec()` to retrieve the full column specification for this data.
+#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
+#> # A tibble: 5 × 6
+#> Lat Lon `Time Range` flag `Vessel IDs` `Apparent Fishing Hours`
+#>
+#> 1 -24.2 -77.8 2021 ESP 1 0.42
+#> 2 -24.6 -78.4 2021 ESP 2 0.28
+#> 3 -27.3 -82 2021 ESP 1 0.43
+#> 4 -24.7 -78.5 2021 ESP 1 0.03
+#> 5 -24.7 -78.6 2021 ESP 2 0.96
```
If you want raster data from a particular EEZ, you can use the
-`get_region_id` function to get the EEZ id, enter that code in the
-`region` argument of `get_raster` instead of the geojson data (ensuring
-you specify the `region_source` as `'eez'`:
+`get_region_id()` function to get the EEZ id, enter that code in the
+`region` argument of `get_raster()` instead of the geojson data
+(ensuring you specify the `region_source` as `"eez"`:
``` r
# use EEZ function to get EEZ code of Cote d'Ivoire
-code_eez <- get_region_id(region_name = 'CIV', region_source = 'eez', key = key)
+code_eez <- get_region_id(region_name = "CIV", region_source = "eez", key = key)
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2021-01-01,2021-10-01',
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-10-01",
region = code_eez$id,
- region_source = 'eez',
+ region_source = "eez",
key = key)
+#> Rows: 573 Columns: 6
+#> ── Column specification ────────────────────────────────────────────────────────
+#> Delimiter: ","
+#> chr (1): flag
+#> dbl (5): Lat, Lon, Time Range, Vessel IDs, Apparent Fishing Hours
+#>
+#> ℹ Use `spec()` to retrieve the full column specification for this data.
+#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
+#> # A tibble: 573 × 6
+#> Lat Lon `Time Range` flag `Vessel IDs` `Apparent Fishing Hours`
+#>
+#> 1 1.4 -6.6 2021 CPV 1 1.27
+#> 2 2.4 -4 2021 FRA 1 1.04
+#> 3 4.3 -4.1 2021 FRA 2 3.51
+#> 4 5 -5.3 2021 CHN 2 38.4
+#> 5 5.3 -4 2021 SLV 2 17.0
+#> 6 4 -4.3 2021 BLZ 1 4.13
+#> 7 5.1 -4.2 2021 BLZ 1 1.99
+#> 8 2 -6 2021 BLZ 1 4.52
+#> 9 1.2 -6.8 2021 BLZ 1 2.46
+#> 10 1.3 -6.7 2021 BLZ 1 3.46
+#> # ℹ 563 more rows
```
You could search for just one word in the name of the EEZ and then
decide which one you want:
``` r
-(get_region_id(region_name = 'France', region_source = 'eez', key = key))
+(get_region_id(region_name = "France", region_source = "eez", key = key))
#> # A tibble: 3 × 3
#> id iso3 label
#>
@@ -360,14 +470,14 @@ decide which one you want:
#> 3 48966 FRA Joint regime area Spain / France
# Let's say we're interested in the French Exclusive Economic Zone, 5677
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2021-01-01,2021-10-01',
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-10-01",
region = 5677,
- region_source = 'eez',
+ region_source = "eez",
key = key)
-#> Rows: 5443 Columns: 6
+#> Rows: 5611 Columns: 6
#> ── Column specification ────────────────────────────────────────────────────────
#> Delimiter: ","
#> chr (1): flag
@@ -375,20 +485,20 @@ get_raster(spatial_resolution = 'low',
#>
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
-#> # A tibble: 5,443 × 6
+#> # A tibble: 5,611 × 6
#> Lat Lon `Time Range` flag `Vessel IDs` `Apparent Fishing Hours`
#>
-#> 1 47 -2.9 2021 FRA 61 2692.
-#> 2 49.5 -0.2 2021 FRA 59 1029.
-#> 3 47.4 -4.2 2021 FRA 40 555.
-#> 4 49.2 -4.6 2021 FRA 19 378.
-#> 5 45 -1.2 2021 FRA 17 277.
-#> 6 49.1 -6 2021 GBR 3 22.2
-#> 7 48.9 -5.9 2021 FRA 20 243.
-#> 8 49.1 -5.8 2021 FRA 26 295.
-#> 9 49.1 -6.1 2021 FRA 14 66.6
-#> 10 51.2 2 2021 FRA 22 465.
-#> # ℹ 5,433 more rows
+#> 1 49.1 -5.8 2021 FRA 26 295.
+#> 2 49.1 -5.9 2021 FRA 21 180.
+#> 3 49 -5.9 2021 FRA 19 244.
+#> 4 49 -6.1 2021 FRA 21 239.
+#> 5 49.1 -5.6 2021 FRA 18 470.
+#> 6 51 1.6 2021 FRA 24 317.
+#> 7 50 0 2021 FRA 28 145.
+#> 8 49.8 0 2021 FRA 62 1188.
+#> 9 42.6 3.2 2021 ESP 9 27.8
+#> 10 42.9 3.3 2021 FRA 18 547.
+#> # ℹ 5,601 more rows
```
A similar approach can be used to search for a specific Marine Protected
@@ -396,15 +506,37 @@ Area, in this case the Phoenix Island Protected Area (PIPA)
``` r
# use region id function to get MPA code of Phoenix Island Protected Area
-code_mpa <- get_region_id(region_name = 'Phoenix', region_source = 'mpa', key = key)
+code_mpa <- get_region_id(region_name = "Phoenix", region_source = "mpa", key = key)
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'yearly',
- group_by = 'flag',
- date_range = '2015-01-01,2015-06-01',
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "yearly",
+ group_by = "flag",
+ date_range = "2015-01-01,2015-06-01",
region = code_mpa$id[1],
- region_source = 'mpa',
+ region_source = "mpa",
key = key)
+#> Rows: 93 Columns: 6
+#> ── Column specification ────────────────────────────────────────────────────────
+#> Delimiter: ","
+#> chr (1): flag
+#> dbl (5): Lat, Lon, Time Range, Vessel IDs, Apparent Fishing Hours
+#>
+#> ℹ Use `spec()` to retrieve the full column specification for this data.
+#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
+#> # A tibble: 93 × 6
+#> Lat Lon `Time Range` flag `Vessel IDs` `Apparent Fishing Hours`
+#>
+#> 1 -3.9 -176. 2015 KOR 1 4.88
+#> 2 -4 -176. 2015 KOR 1 1.37
+#> 3 -4.1 -176. 2015 KOR 1 1.57
+#> 4 -2.9 -176. 2015 FSM 1 2.77
+#> 5 -3.3 -176. 2015 1 1.45
+#> 6 -2.8 -176. 2015 KOR 1 9.29
+#> 7 -3.5 -176. 2015 KOR 2 12.3
+#> 8 -3.4 -176. 2015 KOR 1 1.37
+#> 9 -3.5 -176. 2015 KOR 1 10.8
+#> 10 -3.6 -176. 2015 KOR 1 1.08
+#> # ℹ 83 more rows
```
It is also possible to filter rasters to one of the five regional
@@ -413,14 +545,14 @@ species. These include `"ICCAT"`, `"IATTC"`,`"IOTC"`, `"CCSBT"` and
`"WCPFC"`.
``` r
-get_raster(spatial_resolution = 'low',
- temporal_resolution = 'daily',
- group_by = 'flag',
- date_range = '2021-01-01,2021-01-15',
- region = 'ICCAT',
- region_source = 'rfmo',
+get_raster(spatial_resolution = "low",
+ temporal_resolution = "daily",
+ group_by = "flag",
+ date_range = "2021-01-01,2021-01-15",
+ region = "ICCAT",
+ region_source = "rfmo",
key = key)
-#> Rows: 112699 Columns: 6
+#> Rows: 114979 Columns: 6
#> ── Column specification ────────────────────────────────────────────────────────
#> Delimiter: ","
#> chr (1): flag
@@ -429,7 +561,7 @@ get_raster(spatial_resolution = 'low',
#>
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
-#> # A tibble: 112,699 × 6
+#> # A tibble: 114,979 × 6
#> Lat Lon `Time Range` flag `Vessel IDs` `Apparent Fishing Hours`
#>
#> 1 68.7 -51.4 2021-01-08 GRL 1 0.25
@@ -442,17 +574,17 @@ get_raster(spatial_resolution = 'low',
#> 8 67 -24 2021-01-04 ISL 3 6.13
#> 9 66.9 -23.9 2021-01-04 ISL 2 1.43
#> 10 66.9 -24.1 2021-01-03 ISL 3 3.4
-#> # ℹ 112,689 more rows
+#> # ℹ 114,969 more rows
```
-The `get_region_id` function also works in reverse. If a region id is
+The `get_region_id()` function also works in reverse. If a region id is
passed as a `numeric` to the function as the `region_name`, the
corresponding region label or iso3 can be returned. This is especially
useful when events are returned with regions.
``` r
# using same example as above
-get_event(event_type = 'fishing',
+get_event(event_type = "fishing",
vessel = usa_trawler_ids,
start_date = "2020-01-01",
end_date = "2020-02-01",
@@ -460,29 +592,29 @@ get_event(event_type = 'fishing',
key = key
) %>%
# extract EEZ id code
- dplyr::mutate(eez = as.character(purrr::map(purrr::map(regions, pluck, 'eez'),
- paste0, collapse = ','))) %>%
+ dplyr::mutate(eez = as.character(purrr::map(purrr::map(regions, pluck, "eez"),
+ paste0, collapse = ","))) %>%
dplyr::select(id, type, start, end, lat, lon, eez) %>%
dplyr::rowwise() %>%
dplyr::mutate(eez_name = get_region_id(region_name = as.numeric(eez),
- region_source = 'eez',
+ region_source = "eez",
key = key)$label)
-#> [1] "Downloading 102 events from GFW"
-#> # A tibble: 102 × 8
+#> [1] "Downloading 106 events from GFW"
+#> # A tibble: 106 × 8
#> # Rowwise:
#> id type start end lat lon eez
#>
-#> 1 10b0ca6f4dc… fish… 2019-12-31 14:51:06 2020-01-01 02:20:02 29.1 -90.0 8456
-#> 2 e2104338c1c… fish… 2019-12-31 20:19:35 2020-01-01 03:15:25 28.9 -89.8 8456
-#> 3 5db68123ed1… fish… 2020-01-06 08:00:05 2020-01-06 10:20:02 45.9 -124. 8456
-#> 4 60c811f3e7e… fish… 2020-01-07 02:35:53 2020-01-07 20:25:18 41.1 -69.3 8456
-#> 5 ccbeb333747… fish… 2020-01-08 20:44:15 2020-01-09 09:16:14 34.6 -76.6 8456
-#> 6 d20bb5e341f… fish… 2020-01-09 10:10:14 2020-01-09 13:23:45 34.6 -76.6 8456
-#> 7 cda29eab7cb… fish… 2020-01-09 17:17:15 2020-01-09 22:47:20 34.6 -76.6 8456
-#> 8 f103e5f79b6… fish… 2020-01-11 03:28:38 2020-01-13 18:25:36 41.1 -69.3 8456
-#> 9 81c8475054e… fish… 2020-01-11 14:10:04 2020-01-11 15:43:09 47.7 -122. 8456
-#> 10 0286436fbd5… fish… 2020-01-11 18:40:04 2020-01-11 20:50:06 47.7 -122. 8456
-#> # ℹ 92 more rows
+#> 1 06783a15944… fish… 2020-01-01 15:56:25 2020-01-02 00:41:57 35.1 -76.0 8456
+#> 2 4891aab6703… fish… 2020-01-02 01:55:51 2020-01-03 00:05:57 35.0 -76.0 8456
+#> 3 d75af335992… fish… 2020-01-02 23:31:48 2020-01-03 04:37:19 41.1 -71.4 8456
+#> 4 8ddaf495862… fish… 2020-01-03 00:39:08 2020-01-03 02:49:08 35.0 -76.0 8456
+#> 5 c85b3f8c738… fish… 2020-01-03 15:51:15 2020-01-03 18:24:44 39.8 -73.9 8456
+#> 6 1bee4c2bbe2… fish… 2020-01-05 00:35:43 2020-01-05 06:11:43 39.7 -73.9 8456
+#> 7 379d452b49e… fish… 2020-01-05 04:58:45 2020-01-05 06:31:45 43.7 -124. 8456
+#> 8 0b45ad5daf1… fish… 2020-01-06 06:20:19 2020-01-08 02:46:19 39.6 -73.9 8456
+#> 9 04d20daaf37… fish… 2020-01-06 21:12:01 2020-01-07 02:35:11 34.6 -76.6 8456
+#> 10 2ad00a03bf5… fish… 2020-01-07 13:37:54 2020-01-07 15:16:54 34.7 -76.8 8456
+#> # ℹ 96 more rows
#> # ℹ 1 more variable: eez_name
```
diff --git a/docs/404.html b/docs/404.html
index dddbee2..2c8cf80 100644
--- a/docs/404.html
+++ b/docs/404.html
@@ -4,86 +4,99 @@
-
+
Page not found (404) • gfwr
-
-
-
+
+
+
-
+
+
-
- Skip to contents
+
-