在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
相关产品推荐
相关产品推荐

