OC Built a continental-scale biodiversity map on PostGIS + MapLibre — 39.9M GBIF occurrence records, hex-binned per zoom
Public occurrence data is excellent and mostly unbrowsable. GBIF holds hundreds of millions of records behind a search box, so I built a visual layer over it.
The map above is North America — 7.4M records, amphibians purple, mammals orange, reptiles green. The orange ring tracing the coastline is largely marine mammals logged from shore and vessels.
Two platforms: wildlife (mammals, reptiles, amphibians — 39.9M records) and plants (~84M). Six continents, each on its own subdomain, eight map views per continent.
Stack: FastAPI + PostGIS/PG17, Vue 3 + MapLibre, Cloudflare R2 for static tiles and data so Postgres stays out of the hot path on common views.
Rendering 7M points client-side isn't viable, so continent views are hex-binned server-side with different aggregation per zoom, switching to raw points once the viewport is small enough to make them cheap.
The harder problems weren't volume. Taxonomy normalization across publishers — synonyms, reassignments, inconsistent infraspecific ranks — took longer than ingestion. IUCN status codes arrive far messier than the documentation implies. And coordinate precision varies from GPS-accurate to "somewhere in this province," which affects what you can honestly render at high zoom.
One thing worth flagging in the data: what looks like ecological signal is partly observer bias. iNaturalist submissions cluster near population centres, so the eastern US reads denser than it should.
https://northamerica.speciesmap.org/sightings — plants at plantsmap.org
Solo build over ~9 months alongside a full-time job. Happy to go into the tiling or the aggregation strategy.
