Global Fishing Watch Annual Fishing Effort v3 (2012–2024)
Annual apparent fishing effort from AIS vessel tracking, aggregated to H3 resolution-6 hexagonal cells (~36 km²) by gear type. Annual Cloud-Optimized GeoTIFFs at 0.1° resolution are also available for raster visualization.
Source: Global Fishing Watch / Zenodo — fleet-monthly v3.0 (released March 2025)
License: CC BY-NC 4.0 — non-commercial use only
Coverage: 2012–2024, global ocean
Bucket: s3://public-gfw/
Data Structure
1 s3://public-gfw/
2 ├── raw/ # Original Zenodo ZIPs
3 │ └── fleet-monthly-csvs-10-v3-{YYYY}.zip
4 ├── gfw-fishing-effort-{YYYY}-cog.tif # Annual COG (2012–2024)
5 └── gfw-fishing-effort/
6 └── hex/
7 └── h0={cell}/data_00.parquet # h0-partitioned hex (all years)
1 s3://public-gfw/
2 ├── raw/ # Original Zenodo ZIPs
3 │ └── fleet-monthly-csvs-10-v3-{YYYY}.zip
4 ├── gfw-fishing-effort-{YYYY}-cog.tif # Annual COG (2012–2024)
5 └── gfw-fishing-effort/
6 └── hex/
7 └── h0={cell}/data_00.parquet # h0-partitioned hex (all years)
Hex columns: h6 (H3 res-6 cell), h0 (partition key), year, geartype, fishing_hours, ais_hours, vessel_month_count
H3 resolution: 6 (~36 km² avg cell area). Source data is 0.1° (~123 km²) monthly by flag+geartype. Each 0.1° cell center maps to ~3 H3 res-6 cells. Flag state is dropped in aggregation; gear type is preserved.
Partition layout: Hive-partitioned by h0 (H3 resolution-0 parent cell) — the standard layout shared by all datasets in this catalog. All 13 years (2012–2024) are stored together within each h0 file; filter with WHERE year = YYYY for single-year queries.
Gear Types
Values present in data: dredge_fishing, fishing (unclassified), fixed_gear (subtype uncertain), other_purse_seines, pole_and_line, pots_and_traps, purse_seines, seiners, set_gillnets, set_longlines, trawlers, trollers, tuna_purse_seines
DuckDB Examples
1 -- Total fishing hours by gear type in 2022 (single-year query)
2 SELECT geartype, SUM (fishing_hours) as fishing_hours
3 FROM read_parquet( 'https://s3-west.nrp-nautilus.io/public-gfw/gfw-fishing-effort/hex/h0=*/data_00.parquet' ,
4 hive_partitioning = true)
5 WHERE year = 2022
6 GROUP BY geartype ORDER BY fishing_hours DESC ;
7
8 -- Annual trawling effort trend globally
9 SELECT year , SUM (fishing_hours)
1 -- Total fishing hours by gear type in 2022 (single-year query)
2 SELECT geartype, SUM (fishing_hours) as fishing_hours
3 FROM read_parquet( 'https://s3-west.nrp-nautilus.io/public-gfw/gfw-fishing-effort/hex/h0=*/data_00.parquet' ,
4 hive_partitioning = true)
5 WHERE year = 2022
6 GROUP BY geartype ORDER BY fishing_hours DESC ;
7
8 -- Annual trawling effort trend globally
9 SELECT year , SUM (fishing_hours)
MapLibre GL JS (COG via titiler)
No PMTiles are provided — use the annual COGs with a titiler raster tile source for web map visualization:
1 map. addSource ( 'gfw-2022' , {
2 type: 'raster' ,
3 tiles: [
4 'https://titiler.xyz/cog/tiles/WebMercatorQuad/{z}/{x}/{y}.png' +
5 '?url=https://s3-west.nrp-nautilus.io/public-gfw/gfw-fishing-effort-2022-cog.tif' +
6 '&colormap_name=hot_r&rescale=0,500'
7 ],
8 tileSize: 256
9 });
10 map. addLayer ({
11 id: 'gfw-2022' ,
1 map. addSource ( 'gfw-2022' , {
2 type: 'raster' ,
3 tiles: [
4 'https://titiler.xyz/cog/tiles/WebMercatorQuad/{z}/{x}/{y}.png' +
5 '?url=https://s3-west.nrp-nautilus.io/public-gfw/gfw-fishing-effort-2022-cog.tif' +
6 '&colormap_name=hot_r&rescale=0,500'
7 ],
8 tileSize: 256
9 });
10 map. addLayer ({
11 id: 'gfw-2022' ,
Replace 2022 with any year 2012–2024. Adjust rescale (fishing hours range) to taste.
Notes
ais_hours is total AIS presence time (fishing + transiting + loitering); always ≥ fishing_hours.
vessel_month_count sums monthly MMSI presences — not unique vessels . A vessel active 12 months contributes 12.
fishing and fixed_gear are catch-all gear types used when the model cannot classify more specifically.
AIS adoption improved significantly over time — early years (2012–2014) undercount effort relative to later years.