Data source
All occurrence records are fetched live from the GBIF Occurrence Search API using a WKT polygon derived from your drawn shape. Nothing is cached server-side — every fetch goes direct to GBIF. Records are fetched in pages of 300 and capped at 10,000 per fetch. If your result set hits the cap, narrow your polygon, taxon group, or date range to get a complete dataset.
Coordinate handling
Leaflet uses a continuous coordinate system that extends beyond ±180° when the map is panned. Before querying GBIF, polygon vertices are normalised to [−180, 180]. Returned records are then shifted to the nearest world-copy of the current viewport, which is why Pacific islands near the antimeridian (Samoa, Tonga, Fiji) plot correctly regardless of how you've panned the map.
Common names
Vernacular names are looked up from GBIF's species API after fetching. The selection algorithm prefers: (1) a name tagged for the record's country, (2) an English name, (3) any available name. German compound animal nouns (e.g. Bisamratte) are excluded from English picks because GBIF regional checklists occasionally tag them with lang:'eng'.
Occurrences heatmap
Records are grouped by exact coordinate. Each unique location is weighted using a log₂ scale — 1 record → 0.15, 10 records → 0.52, 100 records → 1.0 — so heavily-visited birding hotspots don't oversaturate the map relative to areas with sparser but genuine coverage.
Coordinate precision
Records with a reported coordinate uncertainty ≥ 1,500 m are shown at reduced opacity. Many museum specimens and older survey records carry uncertainties of several kilometres — they're included but visually distinguished so they don't mislead fine-scale analysis.
Taxon classification
Records are assigned to groups (Birds, Mammals, Reptiles, Fish, etc.) using the class and order fields returned by GBIF. Fish detection uses a two-stage approach: first a whitelist of ~65 fish orders (covering traditional groupings plus modern splits from Betancur-R 2017, including Gobiiformes, Carangiformes, Labriformes and others absent from older classifications), then a fallback check on the class field (Actinopterygii, Chondrichthyes, Myxini, etc.) for records where the order is blank or non-standard. Fish are queried via GBIF's Chordata taxon key and filtered client-side, so the "records loaded" count before filtering will typically exceed the final fish count. Records that can't be matched to any group fall into "Other".
Species photos
Photos are sourced from the iNaturalist Taxa API. Up to 8 CC-licensed images are fetched per species from iNaturalist's curated taxon_photos list. If none are available, the app falls back to GBIF occurrence media. All-rights-reserved images are excluded.
iNaturalist geoprivacy
iNaturalist obscures the exact location of threatened and user-obscured species by snapping records to a random position within a 0.2° × 0.2° grid square. At the equator this box forms a near-perfect square of 22.2 km × 22.2 km, masking the observation across 493 square kilometres. As you move away from the equator, the earth narrows, compressing the box's width while the height stays fixed at 22.2 km. By 45° North or South — roughly cutting through the middle of New Zealand's South Island or Minneapolis — the box narrows to 15.7 km wide, shrinking the total hidden area to about 349 square kilometres. The coordinate shown for an obscured record is the centre of that grid square, not the true observation location. This means rare species whose true location falls inside your polygon may not appear in results, and records may appear in results even though the true observation was outside your polygon.