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.rhkb.cn/news/220168.html

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

相关文章

【node】 地址标准化 解析手机号、姓名、行政区

地址标准化 解析手机号、姓名、行政区 实现效果链接源码 实现效果 将东光县科技园南路444号马晓姐13243214321 解析为 东光县科技园南路444号 13243214321 河北省;沧州市;东光县;东光镇 马晓姐 console.log(address, phone, divisions,name);链接 API概览 源码 https://gi…

php hyperf 读取redis,存储到数据库

背景说明 小白&#xff1a;伟哥&#xff0c;java中的set是无序的&#xff0c;Redis中可以带顺序吗&#xff1f; 伟哥&#xff1a;可以&#xff0c; 不过不叫set了&#xff0c;叫zset。 概述 SortedSet又叫zset&#xff0c;它是Redis提供的特殊数据类型&#xff0c;是一种特殊…

php-使用wangeditor实现富文本(完成图片上传)-npm

官网参考连接&#xff1a;快速开始 | wangEditor 样式&#xff1a; 一、新建一个临时文件夹test1和一个文件夹wangeditor 临时文件夹test1&#xff1a;临时存放通过npm下载的文件文件夹wangeditor&#xff1a;用于存放在临时文件夹test1拷贝的css和js 二、安装 editor 在确保有…

USB2.0 Spec

USB System Description A USB system is described by three definitional areas: • USB interconnect • USB devices • USB host USB interconnect The USB interconnect is the manner in which USB devices are connected to and communicate with the host. USB Ho…

选择排序、快速排序和插入排序

1. 选择排序 xuanze_sort.c #include<stdio.h> #include<stdlib.h>//选择排序void xuanze_sort(int arr[],int sz){//正着for(int i0;i<sz;i){//外层循环从第一个数据开始依次作为基准数据for(int j i1;j<sz;j){//int j i1 因为第一个数据作为了基准数据&…

网络空间搜索引擎- FOFA的使用技巧总结

简介 FOFA是一款网络空间测绘的搜索引擎&#xff0c;旨在帮助用户以搜索的方式查找公网上的互联网资产。 FOFA的查询方式类似于谷歌或百度&#xff0c;用户可以输入关键词来匹配包含该关键词的数据。不同的是&#xff0c;这些数据不仅包括像谷歌或百度一样的网页&#xff0c;还…

详解 Jeecg-boot 框架如何配置 elasticsearch

目录 一、下载安装 Elasticsearch 1、 地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch 2、下载完成后&#xff0c;解压缩&#xff0c;进入config目录更改配置文件 3、 修改配置完成后&#xff0c;前往bin目录启动el 4、访问&#xff1a;localhost:92…

【Proteus仿真】【51单片机】定时智能插座开关

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使LCD1602液晶&#xff0c;DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示…

钡铼无线R10A工业级路由器在工业机器人领域的创新应用

随着工业机器人的普及&#xff0c;对于高可靠性和高稳定性的网络接入设备的需求也越来越大。传统的有线网络虽然稳定&#xff0c;但在现场布置和维护上面临很多困难&#xff0c;而无线网络虽然方便&#xff0c;但受到信号干扰和传输距离限制等问题的影响。如何解决这些问题&…

【Docker】Docker安装部署maven私服

文章目录 镜像拉取构建nexus实例登录maven私服如何查看实例初始化的admin密码呢&#xff1f;1.查看容器挂载卷2.找到nexus_nexus_data查看挂载卷详情3.查看admin账号密码4.登录并重置密码 使用nexus私服1.设置settings.xml2.设置idea pom 出现的问题小插曲 镜像拉取 docker pu…

计算机网络:数据链路层(VLAN)

今天又学到一个知识&#xff0c;加油&#xff01; 目录 一、传统局域网的局限&#xff08;促进VLAN的诞生&#xff09; 二、VLAN简介 三、VLAN的实现 总结 一、传统局域网的局限&#xff08;促进VLAN的诞生&#xff09; 缺乏流量隔离:即使把组流量局域化道一个单一交换机中…

科技云报道:至简至强,新一代服务器的算力美学

科技云报道原创。 在这个时代&#xff0c;数据和计算的边界正在迅速扩张。 随着云计算、物联网和人工智能的日益成熟&#xff0c;对算力的需求已经突破了传统的限制&#xff0c;进入了一个全新的阶段。在这个阶段&#xff0c;不仅是算力的量级发生了变化&#xff0c;其性质和…

利用原始套接字解决mac地址错误问题【南瑞SysKeeper-2000】

一&#xff1a;案例描述 一键可视顺控图像智能项目在网络部署过程中&#xff0c;对网络限制隔离安全性要求很高&#xff0c;用到正向隔离装置&#xff08;南瑞SysKeeper-2000型号&#xff09;。 图一 正向装置示意图 现场发现问题&#xff1a;直连网线情况下&#xff0c;我方…

pytorch:to()、device()、cuda()将Tensor或模型移动到指定的设备上

将Tensor或模型移动到指定的设备上&#xff1a;tensor.to(‘cuda:0’) 最开始读取数据时的tensor变量copy一份到device所指定的GPU上去&#xff0c;之后的运算都在GPU上进行在做高维特征运算的时候&#xff0c;采用GPU无疑是比用CPU效率更高&#xff0c;如果两个数据中一个加了…

RHEL8_Linux使用podman管理容器

本章主要介绍使用 podman 管理容器 了解什么是容器&#xff0c;容器和镜像的关系安装和配置podman拉取和删除镜像给镜像打标签导出和导入镜像创建和删除镜像 1.了解容器及和镜像的关系 对于初学者来说&#xff0c;不太容易理解什么是容器&#xff0c;这里举一个例子。想象一下…

C语言学习----指针和数组

&#x1f308;这篇blog记录一下指针学习~ 主要是关于指针和数组之间的关系&#xff0c;还有指针的使用等~ &#x1f34e;指针变量是一个变量 其本身也有一个地址 也需要存放&#xff0c;就和int char等类型一样的&#xff0c;也需要有一个地址来存放它 &#x1f34c;而指针变量…

matlab面向对象编程入门笔记

文章目录 1. 类和结构2. 定义类3. 属性3.1 private/protected/public属性3.2 constant属性3.3 hidden属性 4. 方法4.1 private/protected/public方法4.2 static方法4.3 外部方法 5. 动态调用6. 继承-超类6.1 handle超类6.2 dynamicprops 和 hgsetget子类 7. 封闭(sealed)类、方…

[论文笔记] chatgpt系列 SparseMOE—GPT4的MOE结构

SparseMOE: 稀疏激活的MOE Swtich MOE,所有token要在K个专家网络中,选择一个专家网络。 显存增加。 Experts Choice:路由MOE:​​​​​​​ 由专家选择token。这样不同的专家都选择到某个token,也可以不选择该token。 由于FFN层的时间复杂度和attention层不同,FFN层的时…

【开源Mongdb驱动】SpringBoot+Mybatis+Mongdb融合使用教程

#【开源Mongdb驱动】SpringBootMybatisMongdb无缝融合使用教程 介绍 本文介绍一款基于JAVA开源的mongodb jdbc驱动为基础的无缝与springbootmybatis融合使用案例 mongodb JDBC 使用案例 https://blog.csdn.net/gongbing798930123/article/details/135002530 《基于开源的JA…