R语言【rgbif】——occ_search对待字符长度大于1500的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】

  1. 变量【wkt_for_rgbif】 传入 occ_searchgeometry 参数,limit 参数设置为 0 以只获得数据量,hasCoordinate 参数设置为 TRUE以只统计有坐标信息的记录。

    a <- occ_search(limit = 0, hasCoordinate = TRUE, geometry = wkt_for_rgbif)
    

    因为参数【geometry】接受了多值输入,向量型的多值输入发起了多次独立请求,所以结果是一个长度为 wkt_for_rgbif 的列表。
    在这里插入图片描述
    在这里插入图片描述

  2. 前文提到了 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] 6819489
    
    b$meta$count == sum_a
    
    [1] TRUE
    

    意料之中,数量相同。

  3. 实践出真知,直接用 长WKT字符串 变量【wkt】 又如何呢?

    c <- occ_search(limit = 0, hasCoordinate = TRUE, geometry = wkt)
    

    在这里插入图片描述
    6819489,没有问题!

2. 查找的实际数据的比对

在上面对数据量比对中,我通过参数【limit】设置为0,只获取数据量。

但回头一想, occ_search 单次请求的返回数据量最多为 100000,正是通过参数【limit】实现控制的。前文得知查找到的数据量为 6819489,远超过了单次请求返回数量的上限,假设不考虑拿到所有的 6819489 条数据,只按照参数【limit】默认的 500 条数据来操作,那么使用不同长度的WKT字符串拿到的结果会一样吗?

  1. 变量【wkt_for_rgbif】 传入 occ_searchgeometry 参数,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。

  2. wkt_for_rgbif 转换为字符串型再传递给 参数【geometry】limit 参数设置为 50hasCoordinate 参数设置为 TRUE以只统计有坐标信息的记录。

    e <- occ_search(limit = 50, hasCoordinate = TRUE, geometry = paste(wkt_for_rgbif, collapse = ";"))
    e$data
    

    只会返回 50 条数据。

    在这里插入图片描述

  3. 将长WKT字符串 变量【wkt】 传入 occ_searchgeometry 参数,limit 参数设置为 50hasCoordinate 参数设置为 TRUE以只统计有坐标信息的记录。

    f <- occ_search(limit = 50, hasCoordinate = TRUE, geometry = wkt)
    f$data
    

    这种方式的结果和上一步的结果完全相同。在这里插入图片描述

总结

一般来说,长WKT字符串的处理 是不需要的!因为,利用rgbif从gbif上获取数据时,参数【limit】 更多地用来配合 参数【start】 来获得完整的筛选结果。这么看来,使用 方法【wkt_parse】 分割WKT,然而会让操作更加复杂,增加使用门槛。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283398.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置Nginx解决跨域问题

Nginx 中将前端请求中的所有以 “/apiUrl” 开头的路径代理到 http://192.12.200.101:9813 例如&#xff1a; /apiUrl/login > http://192.12.200.101:9813/login 配置nginx环境 进入Nginx 的配置文件编辑界面: sudo nano /etc/nginx/conf.d/default.conf开始编辑 defaul…

计算机网络(1):开始

计算机网络&#xff08;1&#xff09;&#xff1a;开始 计算机网络在信息时代中的作用 21世纪的一些重要特征就是数字化、网络化和信息化&#xff0c;是一个以网络为核心的信息时代。要实现信息化就必须依靠完善的网络&#xff0c;因为网络可以非常迅速地传递信息。因此网络现…

STM32/STM8资源节约主义设计方式

STM32/STM8资源节约主义设计方式 在小资源芯片进行代码设计时&#xff0c;如STM32C0系列&#xff0c;STM8系列&#xff0c;因为官方库本身要包含各种场景应用特征的支持&#xff0c;所以会有一些冗余的代码占用更多FLASH空间。当需要实现资源占用最简化设计方式时&#xff0c;…

AAAI中稿心得

很幸运我们的一篇工作中稿了AAAI2024&#xff0c;题目是 Self-Prompt Mechanism for Few-Shot Image Recognition. 很高兴能在研二的上学期中稿一篇a会保底&#xff0c;也是我中稿的第一篇工作&#xff0c;成为我申请博士的资本。最重要的是&#xff0c;让枯燥无味的科研&#…

3.3【窗口】窗口的几何形状(二,窗口属性)

写在前面 应用程序使用窗口来显示内容。一些属性决定了窗口及其内容的大小和位置。其他属性决定了窗口内容的外观和解释。 了解窗口属性引用的两个坐标系非常重要。如果你知道你正在使用的坐标系,那么为你的窗口属性选择设置值会容易得多,并且会更有意义。 一,显示相关属…

12.16~12.17图的存储方式(邻接矩阵,邻接表),相应定义与构建,PTA特性(要初始化),BFS抓牛,判断题

图的存储方式 邻接矩阵 #include<iostream> using namespace std; #define maxn; struct tu {int juzhen[maxn][maxn];//行为起点&#xff0c;列为终点&#xff0c;即第一个为起点&#xff0c;第二个为终点//确定一个点的出度&#xff0c;就固定行&#xff0c;即第一个…

读取小数部分

1.题目描述 2.题目分析 //假设字符串为 char arr[] "123.4500"; 1. 找到小数点位置和末尾位置 代码如下&#xff1a; char* start strchr(arr, .);//找到小数点位置char* end start strlen(start) - 1;//找到末尾位置 如果有不知道strchr()用法的同学&#xf…

力扣刷题记录(10)LeetCode:51、37

51. N 皇后 应为各个皇后之间不能同行&#xff0c;所以一行只能有一个皇后。我们可以遍历每一行的各个位置&#xff0c;判断该位置是否可以放置皇后&#xff0c;一行放置一个。当一个皇后的位置已经在这一行确定了&#xff0c;我们就可以遍历下一行来确定下一个皇后在下一行的位…

使用drawio绘制依赖关系图

使用drawio绘制依赖关系图 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存…

libxls - 编译

文章目录 libxls - 编译概述笔记静态库工程测试控制台exe工程测试备注备注END libxls - 编译 概述 想处理.xls格式的excel文件. 查了一下libxls库可以干这个事. 库地址 https://github.com/libxls/libxls.git 但是这个库的makefile写的有问题, 在mingw和WSL下都编译不了. 好在…

【Python从入门到进阶】44、Scrapy的基本介绍和安装

接上篇《43.验证码识别工具结合requests的使用》 上一篇我们学习了如何使用验证码识别工具进行登录验证的自动识别。本篇我们开启一个新的章节&#xff0c;来学习一下快速、高层次的屏幕抓取和web抓取框架Scrapy。 一、Scrapy框架的背景和特点 Scrapy框架是一个为了爬取网站数…

Diva配置——Communication Tests

关联文章:CANoe.Diva生成测试用例 Diva目录 一、CANoe.Diva简介二、Communication Tests配置一、CANoe.Diva简介 CANoe.DiVa 是一种 CANoe 选项,用于对 ECU 中的诊断软件实施进行自动化测试。 可以通过CANdelaStudio制作的CDD或ODX文件,经过Diva配置自动生成测试用例和测试脚…