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,然而会让操作更加复杂,增加使用门槛。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot管理系统数据权限过滤(二)——SQL拦截器

上一节Springboot管理系统数据权限过滤——ruoyi实现方案对数据权限实现方案有了认识&#xff0c;本文将进一步优化权限过滤方案&#xff0c;实现对业务代码零入侵。 回顾上一章中权限方案&#xff1a; 主要是通过注解拦截&#xff0c;拼接好权限脚本后&#xff0c;放到对象变…

P2P如何使用register_attention_control为UNet的CrossAttention关联AttentionStore

上次的调试到这里了&#xff0c;写完这篇接着看&#xff0c;prepare_latents_ddim_inverted 如何预计算 inversion latents&#xff1a; /home/pgao/yue/FateZero/video_diffusion/pipelines/p2p_ddim_spatial_temporal.py 1. 原始的UNet3D的CrossAttention和SparseCausalAtte…

详解git pull和git fetch的区别

git pull和git fetch的区别, 网上人云亦云胡说八道的实在是太多了&#xff0c;误导我很久。 今天看到一个说得好的&#xff0c;记录一下。 前言 在我们使用git的时候用的更新代码是git fetch&#xff0c;git pull这两条指令。但是有没有小伙伴去思考过这两者的区别呢&#xff…

Docker 的基本概念、优势、及在程序开发中的应用

Docker 是一种容器化平台,它通过使用容器化技术,将应用程序及其依赖性打包到一个独立的、可移植的容器中,从而实现应用程序的快速部署、可靠性和可扩展性。 下面是 Docker 的一些基本概念和优势: 容器:Docker 使用容器化技术,将应用程序及其依赖性打包到一个可移植的容器…

[密码学]AES

advanced encryption standard&#xff0c;又名rijndael密码&#xff0c;为两位比利时数学家的名字组合。 分组为128bit&#xff0c;密钥为128/192/256bit可选&#xff0c;对应加密轮数10/12/14轮。 基本操作为四种&#xff1a; 字节代换&#xff08;subBytes transformatio…

Postman介绍和快速使用

Postman 是什么&#xff1f; Postman 是一个流行的API&#xff08;Application Programming Interface&#xff09;开发工具&#xff0c;它使得开发者可以很容易地创建、测试、共享和文档化API。Postman 提供了一个友好的用户界面&#xff0c;来发送HTTP请求&#xff0c;接收响…

bp神经网络学习

1.input(1:m,:)‘含义 矩阵A第一列的转置矩阵。(x,y)表示二维矩阵第x行第y列位置的元素&#xff0c;x为:则表示所有的行。因此&#xff0c;A(:,1)就表示A的第1列的所有元素&#xff0c;这是一个列向量。 所以这里input(1:m,:)表示1到m行&#xff0c;所有列&#xff0c;而后面…

python设计模式之工厂模式、策略模式、生产者-消费者模式

前言 这篇主要总结下 设计模式&#xff1a; 工厂模式、策略模式、生产者-消费者模式&#xff0c; 用python举例说明 一、策略模式 1.1 理论理解 顾名思义&#xff0c;根据情况来选择不一样的《策略》。 这种设计模式主要适用于&#xff1a; 希望能够根据特定条件选择方法的情况…

【谭浩强C语言:前八章编程题(多解)】

文章目录 第一章1. 求两个整数之和(p7) 第二章2. 求三个数中的较大值&#xff08;用函数&#xff09;(p14、p107)3.求123...n(求n的阶乘&#xff0c;用for循环与while循环)(P17)1.循环求n的阶乘2.递归求n的阶乘(n< 10) 4.有M个学生&#xff0c;输出成绩在80分以上的学生的学…

紫光FPGA DDR3 IP使用和注意事项(axi4协议)

紫光DDR3 IP使用 对于紫光ddr3 IP核的使用需要注意事情。 阅读ddr ip手册&#xff1a; 1、注意&#xff1a;对于写地址通道&#xff0c;axi_awvalid要一直拉高&#xff0c;axi_awready才会拉高。使用的芯片型号时PG2L100H-6FBG676&#xff0c;不同的型号IP核接口和axi的握手协…

计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等

文章目录 1 网络层的两个层面2 网络协议IP2.1 虚拟互联网络2.2 IP地址2.2.1 固定分类编址方式2.2.2 无分类编制CIDR2.2.3 MAC地址和IP地址区别 2.3 地址解析协议ARP2.3.1 解析过程 2.4 IP数据报格式 3 IP层转发分组流程4 国际控制报文协议ICMP4.1 ICMP格式结构4.2 分类4.2.1 差…

【物联网】EMQX(二)——docker快速搭建EMQX 和 MQTTX客户端使用

一、前言 在上一篇文章中&#xff0c;小编向大家介绍了物联网必然会用到的消息服务器EMQ&#xff0c;相信大家也对EMQ有了一定的了解&#xff0c;那么接下来&#xff0c;小编从这篇文章正式开始展开对EMQ的学习教程&#xff0c;本章节来记录一下如何对EMQ进行安装。 二、使用…

系列八、约束

一、约束 1.1、概述 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据&#xff0c;通过这种规则&#xff0c;可以保证数据库中数据的正确性、有效性和完整性。 1.2、分类 1.3、注意事项 约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添加…

vue3的大致使用

<template><div class"login_wrap"><div class"form_wrap"> <!-- 账号输入--> <el-form ref"formRef" :model"user" class"demo-dynamic" > <!--prop要跟属性名称对应-->…

2023 OADC:开放原子云社区正式启航,Curve、Kyuubi获奖

12月16-17日&#xff0c;2023开放原子开发者大会&#xff08;OADC&#xff09;在江苏省无锡市召开。大会首日&#xff0c;由网易数帆联合发起的“开放原子云社区”宣告成立&#xff0c;随后网易数帆资深云原生专家侯诗军分享了稳定性保障的前沿实践&#xff0c;Curve、Apache K…

引领位置服务驱动:腾讯地图 WebService 服务端 API 实用指南

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

Web前端-JavaScript(js表达式)

文章目录 JavaScript基础第01天1.编程语言概述1.1 编程1.2 计算机语言1.2.1 机器语言1.2.2 汇编语言1.2.3 高级语言 1.4 翻译器 2.计算机基础2.1 计算机组成2.2 数据存储2.3 数据存储单位2.4 程序运行 3.初始JavaScript3.1 JavaScript 是什么3.2 JavaScript的作用3.3 HTML/CSS/…

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…

大数据基础-测试过程

一、大数据&#xff1a; 大数据是一个大的数据集合&#xff0c;通过传统的计算技术无法处理。这些数据集的测试需要用各种工具、技术、框架进行处理。大数据涉及数据创建&#xff0c;存储、检索、分析&#xff0c;而且它在数量、多样性、速度都很出色。 二、大数据的测试类型…

【JAVA】CyclicBarrier源码解析以及示例

文章目录 前言CyclicBarrier源码解析以及示例主要成员变量核心方法 应用场景任务分解与合并应用示例 并行计算应用示例 游戏开发应用示例输出结果 数据加载应用示例 并发工具的协同应用示例 CyclicBarrier和CountDownLatch的区别循环性&#xff1a;计数器的变化&#xff1a;用途…