Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

GBIF-Data

Fetch georeferenced occurrence records from the Global Biodiversity Information Facility straight onto the GeoLibre map.

Repositori di GitHub

Coba langsung: GeoLibre (Qiusheng Wu) berjalan di halaman ini. Buka Plugins → Marketplace, pasang GBIF Data, atau buka layar penuh.

version GeoLibre renderer MapLibre JavaScript ES Modules GBIF API CSS license

Fetch georeferenced occurrence records from the Global Biodiversity Information Facility straight onto the GeoLibre map.

Independent project. This is a community plugin, made out of appreciation for GBIF’s open data. It is not made, affiliated with, sponsored or endorsed by GBIF. “GBIF” names the data source only; the plugin uses no GBIF logo. The data belong to their publishers and come with no guarantee of quality or completeness — see the GBIF data user agreement.

Ringkasan (Bahasa Indonesia) — Plugin GeoLibre untuk mengambil data kemunculan (occurrence) spesies dari GBIF langsung ke peta. Filter berdasarkan area (tampilan peta, extent layer, negara, atau seluruh dunia), takson, jenis rekaman, tahun, kualitas data, kategori IUCN, dan lainnya. Hasil bisa ditambahkan sebagai titik (GeoJSON, maks. 5.000 rekaman), sebagai layer kepadatan heksagon GBIF, atau keduanya. Klik titik untuk melihat detail dan foto rekaman. Plugin ini dibuat secara independen sebagai bentuk apresiasi, bukan produk resmi GBIF. Kartu “Cite this data” membantu mengutip data sesuai pedoman GBIF (daftar dataset untuk DOI derived dataset).

Screenshots

Birds (Aves) around Bandung fetched as points, with the GBIF Data panel open 1,500 bird records around Bandung, West Java, added as a point layer. The header counts every matching record in GBIF (17.3K); the numbered steps hold the filters.

Record popup with photo, and the results card with the Cite this data section Clicking a point opens its record: photo with creator and licence, date, recorder, family, place, uncertainty, IUCN category, dataset and licence. The results card lists the most recorded species, and Cite this data shows the licence mix (with a CC BY-NC warning) and the citation tools.

GBIF hexagon density tiles of all bird records in Indonesia Density output for Area = Country (Indonesia): GBIF hexagon tiles of all 1.7 million matching bird records, without downloading them one by one.

Contents

Features

Requirements

Install

From a release zip

Zip the three plugin files with plugin.json at the root of the zip:

cd geolibre-gbif-data
Compress-Archive -Path plugin.json, index.js, style.css -DestinationPath ..\geolibre-gbif-data-1.1.0.zip

On macOS / Linux:

cd geolibre-gbif-data && zip ../geolibre-gbif-data-1.1.0.zip plugin.json index.js style.css

Then in GeoLibre: Settings → Manage Plugins → Install from file and pick the zip. A ready-made (minified) zip is attached to each GitHub release.

From the marketplace

marketplace/registry-entry.json is this plugin’s entry for the GeoLibre plugin registry (registry/geolibre-gbif-data.json there), pointing at the release zip and its SHA-256. Once it is listed, install the plugin from Settings → Manage Plugins like any other.

Quick start

  1. Open the panel with the leaf button in the map’s top-right toolbar (or the GBIF Data icon on the right panel rail).

  2. Pan and zoom the map to the area you care about — Area defaults to Map view.

  3. Under Taxon, type a scientific name (e.g. Panthera tigris) and pick it from the list, or click a major group such as Aves.

  4. Watch the counter in the header update with the number of matching records.

  5. Press Fetch 500 records. A point layer named GBIF – <taxa> (<count>) is added, and the results card lists the most recorded species.

  6. Click any point to open its popup.

The panel, step by step

StepWhat it setsNotes
01 AreadecimalLatitude / decimalLongitude ranges, or countryMap view follows the map. Layer uses the bounding box of a vector layer, not its exact shape. Country uses GBIF data matching the chosen country code.
02 TaxontaxonKey (repeated)Suggestions appear after 2 characters. Arrow keys + Enter pick a suggestion; Enter with nothing highlighted asks species/match for the best backbone match.
03 Record typebasisOfRecord (repeated)None selected = every type.
04 TimeyearPresets: last 5 years, last 10 years, since 2000, this year. A reversed range is swapped automatically.
05 QualitymediaType, hasGeospatialIssue, occurrenceStatus, coordinateUncertaintyInMeters, iucnRedListCategory, licenseDrop geospatial issues and Presence records only are quick toggles; uncertainty and license filters are narrowed with values.
06 More filtersrecordedBy, datasetKey, institutionCode, qComma-, semicolon- or newline-separated lists for the first three.

Within a step, multiple values are OR-ed; different steps are AND-ed.

Output

Choose under Add to map:

Points, counter and density tiles are built from the same filter parameters, so they always describe the same set of records.

Attribute columns

Every attribute is a flat column, so the attribute table and exports show one value per column:

ColumnMeaning
gbifKeyGBIF occurrence key
scientificName, species, vernacularName, taxonRankName as interpreted by GBIF
kingdom, phylum, class, order, family, genusBackbone classification
taxonKey, speciesKeyBackbone keys
basisOfRecordRecord type
eventDate, yearWhen it was recorded
recordedByObserver / collector
country, countryCode, stateProvince, localityWhere it was recorded
uncertaintyMCoordinate uncertainty in metres
iucnRedListCategoryIUCN Red List category
occurrenceStatusPRESENT / ABSENT
datasetName, datasetKey, datasetUrl, institutionCode, publisherSource dataset, its GBIF page, and the publishing organisation key
rightsHolder, occurrenceIDRights holder and the publisher’s own record identifier
license, licenseLabelLicence of the record (URL, and short label: CC0 / CC BY / CC BY-NC)
imageCount, image, imageCreator, imageLicenseFirst still image and its rights holder / licence
gbifUrlLink to the record on GBIF.org
accessedDate the record was fetched (YYYY-MM-DD), for citations

The dataset key, publisher and licence stay on every record, as the GBIF data user agreement asks for data shared onward — keep these columns when you filter or export. Each feature also carries an internal __gbifPlugin flag that the plugin uses to recognise its own points for the popup.

Limits and defaults

SettingValue
Records per request300 (GBIF’s ceiling)
Max records per fetch5,000 (default 500)
Pause between pages200 ms
Request timeout30 s (10 s for taxon search, 15 s for the counter)
Counter refresh450 ms after the last change or map move
Busy server (429 / 503)Up to 3 retries, waiting Retry-After or 2 s, 4 s, 8 s

The cap keeps the plugin polite to the public API. For larger or citable extracts use a GBIF download, which gets a DOI.

How it works

GBIF endpoints used:

EndpointPurpose
GET /v1/occurrence/searchRecords (paged) and the live counter (limit=0)
GET /v1/species/suggestTaxon autocomplete
GET /v1/species/matchBest backbone match on Enter
GET /v2/map/occurrence/adhoc/{z}/{x}/{y}@1x.pngDensity tiles

GeoLibre host API used: getMap, addMapControl / removeMapControl, registerRightPanel (falls back to registerFloatingPanel), openRightPanel / openFloatingPanel, getViewBounds, listLayers, getSelectedLayerId, getLayerFeatures, addGeoJsonLayer, addTileLayer, fitBounds and getActiveMapTool (the popup steps aside while Identify, selection or GeoEditor own the click).

Other details:

Troubleshooting

MessageWhat to do
A world search needs a taxon, dataset, recorder, institution or keyword.Add a narrowing filter, or pick another Area.
That layer has no vector features to take an extent fromRaster and tile layers have no extent to read — pick a vector layer or use Map view.
This GeoLibre version can’t add tile layersYour host lacks addTileLayer; choose Points.
GBIF did not answer within 30 sThe public API is busy; try again, or narrow the filters.
GBIF is busy (too many requests)GBIF kept answering 429 after three retries; wait a minute. For big extracts use a GBIF.org download.
Save dataset list (CSV) does nothingSome desktop builds block downloads from plugins; use Copy citation, which includes the same list.
Counter shows !api.gbif.org is unreachable — check the connection or a firewall/proxy.
No georeferenced records matched these filters.Loosen the filters (uncertainty limit, year range, photos only).
Fewer points than the counterExpected: points are capped at Max records. Raise it, narrow the filters, or add the Density layer.

Repository layout

GBIF-Data/
├── geolibre-gbif-data/          # the plugin (zip these three files)
│   ├── plugin.json              # manifest: id, version, entry, style, engines
│   ├── index.js                 # self-contained ES module, exports `plugin`
│   ├── style.css                # panel, popup and control styles (light + dark)
│   └── LICENSE
├── docs/screenshots/            # images used in this README
├── marketplace/
│   └── registry-entry.json      # registry/geolibre-gbif-data.json in opengeos/geolibre-plugins
├── LICENSE
└── README.md

Development

There is no build step for development. Edit the files in geolibre-gbif-data/, zip them as shown in Install, and reinstall the zip in GeoLibre. Release zips are whitespace-minified (the marketplace serves bundles as built):

npx esbuild geolibre-gbif-data/index.js --minify-whitespace --outfile=dist/index.js
npx esbuild geolibre-gbif-data/style.css --minify --outfile=dist/style.css

Issues and pull requests are welcome on GitHub.

Data use and citation

Records come from the public GBIF API (https://api.gbif.org/v1). Using them means agreeing to the GBIF data user agreement. In short:

Copy citation puts a ready-made text on the clipboard: the access date, the exact API query, and the list of source datasets with their record counts.

Privacy

The plugin sends only your filter parameters (area bounds, taxon keys, years, etc.) to api.gbif.org, and loads record photos from their publishers’ servers when a popup opens. It stores nothing and needs no account or key. Links to www.gbif.org open only when you click them.

Changelog

1.1.0

Brings the plugin in line with the GBIF data user agreement and citation guidelines:

1.0.0

Licence

The plugin code is MIT, © 2026 Defani Arman Alfitriansyah. Icons from Google’s Material Symbols (Apache-2.0). The MIT licence covers the code only, not the GBIF data it fetches, which keep their publishers’ licences (see Data use and citation).