怎么知道公司网站是哪个公司做的,湖北省建设网站,微信公众号这么创建,html5响应式网站源码一句话结论#xff1a;只要有网有流量#xff0c;直接用长WKT传递给参数【geometry】、参数【limit】配合参数【start】获取所有记录。
当我在阅读 【rgbif】 给出的用户手册时#xff0c;注意到 【occ_search】 强调了 参数 【geometry】使用的wkt格式字符串长度。
文中如…一句话结论只要有网有流量直接用长WKT传递给参数【geometry】、参数【limit】配合参数【start】获取所有记录。
当我在阅读 【rgbif】 给出的用户手册时注意到 【occ_search】 强调了 参数 【geometry】使用的wkt格式字符串长度。
文中如是写道
当处理 长WKT字符串1500个字符 时可以通过参数geom_big进行设置asis此值为默认值。不做任何处理只传递WKT字符串。axe这个选项将使用sf包将WKT字符串切割成数个多边形然后根据每个多边形块单独进行数据请求然后将所有数据组合在一起返回。请注意如果WKT字符串不是多边形类型将退回到asis因为没有办法分割线字符串等。这个选项在大多数情况下会比其他两个选项慢。但是这种多边形分割方法不会像使用bbox选项那样存在想要多少记录和实际返回多少记录之间脱节的问题。该方法使用sf::st_make_grid和sf::st_intersection它们有两个参数cellsize和n。您可以通过调整geom_size和geom_n来调整这些参数。在切换返回的WKT字符串的数量方面geom_size似乎更有用。请参阅wkt_parse手动从较大的WKT字符串中分解WKT边界框或者将较大的WKT字符串分解为许多较小的WKT字符串。bbox这个选项检查您的WKT字符串是否超过1500个字符如果是先从WKT创建一个边界框使用该边界框进行GBIF搜索然后将结果数据修剪为仅在原始WKT字符串中出现的数据。但有一个注意事项。因为先从WKT创建了一个边界框并且limit参数确定了要获取的记录子集所以当我们将结果数据修剪到WKT时您获得的记录数量可能少于您使用limit参数设置的记录数量。但是您可以将限制设置得足够高以便获得在该边界框中找到的所有记录然后您将获得WKT中可用的所有记录。然而我在尝试【使用rgbif获取非行政单位区域内的物种记录信息】时发现即使我使用的wkt字符串长度远大于1500但是直接将它或者用【wkt_parse】方法分割了它的结果传递给【occ_search】方法的【geometry】参数时结果数据根本没有差异而结果长度的不同仅仅是因为wkt表达的polygon数量不同造成的独立请求数量不同有关这方面的信息请参考R语言【rgbif】——什么是多值传参如何在rgbif中一次性传递多个值多值传参时的要求有哪些
简单来说实际操作中我发现小心翼翼地处理长WKT字符串完全是多此一举
那么真的还有必要使用【wkt_parse】来分割长WKT吗
下面我将用事实来回答这个问题。
首先我使用的WKT字符串是在【R语言【rgbif】——使用rgbif获取非行政单位区域内的物种记录信息以泛喜马拉雅地区为例】中的 变量【wkt】 和 变量【wkt_for_rgbif】。
变量【wkt】 它的长度nchar(wkt)为8909。符合rgbif对长WKT字符串的定义标准。
变量【wkt_for_rgbif】 是 rgbif 中 wkt_parse 方法将 变量【wkt】变为许多个长度小于1500的非长WKT字符串片段。
for (i in wkt_for_rgbif){print(nchar(i))}1. 查找的数据量的对比
我先按照用户手册推荐的使用非长WKT字符串的 变量【wkt_for_rgbif】 将 变量【wkt_for_rgbif】 传入 occ_search 的 geometry 参数limit 参数设置为 0 以只获得数据量hasCoordinate 参数设置为 TRUE以只统计有坐标信息的记录。 a - occ_search(limit 0, hasCoordinate TRUE, geometry wkt_for_rgbif)因为参数【geometry】接受了多值输入向量型的多值输入发起了多次独立请求所以结果是一个长度为 wkt_for_rgbif 的列表。 前文提到了 wkt_for_rgbif 是向量型的多值输入会发起多次独立请求进而生成了结果列表。既然提到了多值输入还有不会发起多次独立请求的字符串型的多值输入。那么将 wkt_for_rgbif 转换为字符串型再传递给 参数【geometry】 时会发生什么呢 b - occ_search(limit 0, hasCoordinate TRUE, geometry paste(wkt_for_rgbif, collapse ;))不同类型的多值输入生成的结果数量相同吗 sum_a - 0
for (i in a){sum_a - sum_a i$meta$count}
sum_a[1] 6819489b$meta$count sum_a[1] TRUE意料之中数量相同。 实践出真知直接用 长WKT字符串 变量【wkt】 又如何呢 c - occ_search(limit 0, hasCoordinate TRUE, geometry wkt)6819489没有问题
2. 查找的实际数据的比对
在上面对数据量比对中我通过参数【limit】设置为0只获取数据量。
但回头一想 occ_search 单次请求的返回数据量最多为 100000正是通过参数【limit】实现控制的。前文得知查找到的数据量为 6819489远超过了单次请求返回数量的上限假设不考虑拿到所有的 6819489 条数据只按照参数【limit】默认的 500 条数据来操作那么使用不同长度的WKT字符串拿到的结果会一样吗 将 变量【wkt_for_rgbif】 传入 occ_search 的 geometry 参数limit 参数设置为 50hasCoordinate 参数设置为 TRUE以只统计有坐标信息的记录。 d - occ_search(limit 50, hasCoordinate TRUE, geometry wkt_for_rgbif)对于返回的结果我要查看它的数量 sum_d - c()
for (i in d){sum_d - append(sum_d, nrow(i$data))}
sum_d - sum(sum_d)[1] 768以及数据内容 sum_d_data - d$geom1$data
for (i in d){sum_d_data - full_join(sum_d_data, i$data)}说明 参数【limit】 限制每次独立请求的返回数量上限为 50。 将 wkt_for_rgbif 转换为字符串型再传递给 参数【geometry】limit 参数设置为 50hasCoordinate 参数设置为 TRUE以只统计有坐标信息的记录。 e - occ_search(limit 50, hasCoordinate TRUE, geometry paste(wkt_for_rgbif, collapse ;))
e$data只会返回 50 条数据。 将长WKT字符串 变量【wkt】 传入 occ_search 的 geometry 参数limit 参数设置为 50hasCoordinate 参数设置为 TRUE以只统计有坐标信息的记录。 f - occ_search(limit 50, hasCoordinate TRUE, geometry wkt)
f$data这种方式的结果和上一步的结果完全相同。
总结
一般来说长WKT字符串的处理 是不需要的因为利用rgbif从gbif上获取数据时参数【limit】 更多地用来配合 参数【start】 来获得完整的筛选结果。这么看来使用 方法【wkt_parse】 分割WKT然而会让操作更加复杂增加使用门槛。