使用rgbif按gadm提取加拿大省份门级类群分布记录遇问题求助
问题分析与解决办法
一、phylumKey搭配gadm报错的原因及解决
1. 核心问题:高阶分类单元查询触发API限制
当使用phylumKey(门级分类单元)时,符合条件的记录量通常极大,GBIF的API会触发查询限制,而错误信息可能被误导指向gadm参数,而非真实的量级限制。
2. 解决步骤
- 先验证
phylumKey的正确性:确保你使用的门级key是有效的,比如通过name_backbone获取官方key:library(rgbif) # 以脊索动物门为例,替换为你的目标类群 target_phylum_key <- name_backbone(name = "Chordata")$phylumKey - 用
pred_list组合条件,避免参数解析冲突:直接同时传入phylumKey和gadm可能导致API解析异常,改用pred_list明确组合筛选条件:# 先设置小limit测试,避免触发量级限制 test_results <- occ_search( pred_list( pred("phylumKey", target_phylum_key), pred("gadm", "CAN11_1") ), limit = 50 ) - 批量下载替代实时查询:如果目标记录量超过
occ_search的单次上限(默认1000条),改用occ_download发起批量下载请求:download_request <- occ_download( pred("phylumKey", target_phylum_key), pred("gadm", "CAN11_1") ) # 等待下载完成后获取结果 download_results <- occ_download_get(download_request) %>% occ_download_import()
二、pred_in+pred_within区域不对的原因及解决
1. 核心问题:未正确获取目标GADM区域的空间边界
pred_within需要传入准确的WKT格式多边形边界,如果你的WKT不是来自CAN11_1对应的区域,自然会返回错误范围的记录。
2. 解决步骤
- 获取目标GADM区域的边界并转换为WKT:使用
gadmtools包直接获取对应编码的区域边界:library(gadmtools) library(sf) # 加载加拿大一级行政区数据 gadm_canada <- gadm_load(country = "CAN", level = 1, use_cache = TRUE) # 筛选目标编码CAN11_1的区域 target_area <- gadm_canada[gadm_canada$GID_1 == "CAN11_1", ] # 转换为WKT格式 target_wkt <- st_as_text(st_geometry(target_area)) - 使用正确的空间筛选参数:
pred_in是针对字段取值的筛选(比如筛选特定数据集key),空间筛选只需要pred_within搭配正确的WKT:# 结合门级key和空间边界查询 area_results <- occ_search( pred("phylumKey", target_phylum_key), pred_within(target_wkt), limit = 50 )
三、容易遗漏的细节
- 确认
CAN11_1的GADM编码对应正确的省份:不同版本的GADM编码可能有差异,建议通过gadmtools的预览功能确认区域范围。 - GBIF的API有请求频率限制,批量下载时不要频繁发起请求,避免被临时封禁。
内容的提问来源于stack exchange,提问作者kl-higgins
相关产品推荐
相关产品推荐

