You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中使用Leaflet与GBIF API显示截至指定年份的瓦片数据

解决GBIF瓦片地图年份范围过滤问题

问题核心是GBIF的occurrence密度瓦片API不支持直接在year参数中使用比较运算符(如<=),这种写法不符合API的参数格式规范,导致请求无法被正确解析。而单个年份的year=2015是API认可的格式,所以能正常返回数据。

正确的参数用法

GBIF地图API提供了minYear和maxYear两个参数来实现年份范围过滤:

  • maxYear=YYYY:筛选年份小于等于指定年份的数据
  • minYear=YYYY:筛选年份大于等于指定年份的数据
  • 两者组合可实现任意区间的年份过滤

修改后的代码

library(leaflet)

projection = '3857' # 投影编码
style = 'style=gbif-middle'
tileRaster = paste0('https://tile.gbif.org/', projection, '/omt/{z}/{x}/{y}@1x.png?', style)

prefix = 'https://api.gbif.org/v2/map/occurrence/density/{z}/{x}/{y}@1x.png?'
polygons = 'style=classic.poly&bin=hex&hexPerTile=100' 
datasetKey = 'datasetKey=cc09386c-43a4-4a12-8ae4-d25610645250'
# 替换为maxYear参数指定截至年份
year_filter = 'maxYear=1955'
tilePolygons = paste0(prefix, polygons, '&', datasetKey, '&', year_filter)

leaflet() %>%
  setView(lng = 5.4265362, lat = 43.4200248, zoom = 1) %>%
  addTiles(urlTemplate = tileRaster) %>%
  addTiles(urlTemplate = tilePolygons)  

补充说明

如果需要筛选1800到1955年之间的数据,只需将year_filter改为:

year_filter = 'minYear=1800&maxYear=1955'

内容的提问来源于stack exchange,提问作者EML

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:20:49