微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用rgbif一次从多个多边形下载发生数据?

如何解决如何使用rgbif一次从多个多边形下载发生数据?

我正在尝试使用 R 包 rgbif 从多个区域下载多个分类群的出现数据。我更喜欢将所有区域组合在一起进行一次下载(因为我有数千个区域,单独下载会很疯狂)。但是,我没有找到这样做的方法。我可以为每个查询一个区域执行 occ_download

这是我的示例代码

library(rgbif)
gbif_taxon_keys = c(212,359)
# below are bBox of 3 regions;
# I have polygons as WKT,but they are clockwise 
# (how to convert to counter clockwise??)
wkts = c("polyGON((11.3431 47.2451,11.4638 47.2451,11.4638 47.2919,11.3431 47.2919,11.3431 47.2451))","polyGON((12.9644 47.7608,13.0922 47.7608,13.0922 47.8453,12.9644 47.8453,12.9644 47.7608))","polyGON((14.2284 48.2217,14.3669 48.2217,14.3669 48.3443,14.2284 48.3443,14.2284 48.2217))")

# this works
queries = occ_download_prep(
  pred_in("taxonKey",gbif_taxon_keys),pred("hasCoordinate",TRUE),pred("hasGeospatialIssue",FALSE),pred_within(wkts[1]),user = gbif_user,pwd = gbif_pwd,email = gbif_email)
out_test = occ_download_queue(.list = list(queries))

# Now try to combine regions in one download
# this does not work
queries = occ_download_prep(
  pred_in("taxonKey",pred_within(wkts),email = gbif_email)
out_test = occ_download_queue(.list = list(queries))
Error: 'value' must be length 1
# this does not work neither (it runs though)
queries = occ_download_prep(
  pred_in("taxonKey",pred("geometry",paste0(wkts,collapse = ";")),email = gbif_email)
out_test = occ_download_queue(.list = list(queries))
<<gbif download Metadata>>
  Status: KILLED

我在 GBIF 上的下载中心显示“下载请求失败。”。

有人可以帮忙吗?谢谢!

解决方法

我想我知道如何做到这一点。我只是将所有多边形组合成一个多多边形,它似乎有效。

换句话说,我只是把上面的3个多边形放进这个:

wkts2 = "MULTIPOLYGON (((11.3431 47.2451,11.4638 47.2451,11.4638 47.2919,11.3431 47.2919,11.3431 47.2451)),((12.9644 47.7608,13.0922 47.7608,13.0922 47.8453,12.9644 47.8453,12.9644 47.7608)),((14.2284 48.2217,14.3669 48.2217,14.3669 48.3443,14.2284 48.3443,14.2284 48.2217)))"

然后,我运行:

queries = occ_download_prep(
  pred_in("taxonKey",gbif_taxon_keys),pred("hasCoordinate",TRUE),pred("hasGeospatialIssue",FALSE),pred_within(wkts2),user = gbif_user,pwd = gbif_pwd,email = gbif_email)
out_test = occ_download_queue(.list = list(queries))

它适用于这个例子。 @sckott 可能有更好的方法。

,

仅将多边形连接成多多边形会导致重叠,这是无效的,并会导致下载失败。

相反,使用 GIS 库来组合多边形。这是我为 R 找到的第一个:

library(sf)
x = st_as_sfc("POLYGON((5.032 52.237,5.426 52.237,5.426 52.525,5.032 52.525,5.032 52.237))")
y = st_as_sfc("POLYGON((5.234 52.033,5.546 52.033,5.546 52.311,5.234 52.311,5.234 52.033))")
u = st_union(x,y)

st_as_text(u)
[1] "POLYGON ((5.032 52.525,5.426 52.311,5.234 52.033,5.234 52.237,5.032 52.237,5.032 52.525))"

Wicket 的快速检查表明我们现在有一个 8 边的多边形,它应该用作内谓词。

我认为,使用它,您可以将所有多边形放入一次下载中。单次下载总积分上限为 10,000 点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。