R语言实践——rWCVP:按照物种的原生分布区清洗坐标点

news2024/12/22 2:34:49

rWCVP:按照物种的原生分布区清洗坐标点

    • 加载库
    • 工作流(单个物种)
      • 1. 下载发现记录数据(rgbif)
      • 2. 发现记录的预备
      • 3. 获取原生区范围
      • 4. 清除非原生分布记录

加载库

library(rWCVP)
library(rgbif)
library(tidyverse)
library(sf)

工作流(单个物种)

本文中,我们使用Callitris rhomboidea作为示例物种

1. 下载发现记录数据(rgbif)

第一步是从某处获取物种记录。我们将使用 rgbifGBIF 获取这些。

我们在这里将物种记录限制为 1000 次,因此下载时间不会太长。我们要求只获取坐标没有被GBIF自动标记任何问题的记录。

gbif_response = occ_data(scientificName = "Callitris rhomboidea",
                         limit = 1000,
                         hasCoordinate = TRUE,
                         hasGeospatialIssue = FALSE)
paste(1000, "of", gbif_response$meta$count, "records downloaded.")
[1] "1000 of 3580 records downloaded."

2. 发现记录的预备

当我们从下载数据中移除非原产地发现记录前,我们需要用正确的格式获取数据。

如果发现记录非常庞大,而且某物种在非常多的地方都是本地种,那么移除非本地物种记录时以像非常耗时的计算任务。所以可以分多次进行数据清洗,比如移除海洋中的记录或在研究所中的记录。

就本文而言,我们的数据量并不大,所以并不需要预先进行清洗数据。但我们确实需要将我们的记录数据集转换为空间数据集,以便通过图层过滤分布点。

occs = gbif_response$data %>%
  select(scientificName, decimalLatitude, decimalLongitude) %>%
  st_as_sf(coords=c("decimalLongitude", "decimalLatitude"), crs=st_crs(4326))

在这里插入图片描述

如果您使用自己的记录数据集,而不是从 GBIF 下载的数据集,您仍然需要像我们上面所做的那样将其转换为空间数据集并设置适当的坐标系。我们在这里使用了 EPSG 4326,因为它是经度和纬度坐标的默认值。

3. 获取原生区范围

现在我们可以用rWCVP下载物种的原生分布区范围。

native_range = wcvp_distribution("Callitris rhomboidea",
                                 taxon_rank = "species",
                                 introduced = FALSE,
                                 extinct = FALSE,
                                 location_doubtful = FALSE)

在这里插入图片描述
可视化观察一下分布区

(p = wcvp_distribution_map(native_range, crop_map = TRUE) +
  theme(legend.position = "none"))

在这里插入图片描述
那么记录分布点在地图上的分布如何呢?
在这里插入图片描述

4. 清除非原生分布记录

现在, 清除掉哪些冗余的分布点

一种方法是检查哪些点落在原生范围多边形内,为每个点获取 TRUE/FALSE 值。 可以使用sfsf_intersects完成。 因为我们获得的分布区不止一个,那么每个分布点就会获得不止一个值,所以需要使用st_union将原生区合并起来。

occs$native = st_intersects(occs, st_union(native_range), sparse = FALSE)[,1]

在这里插入图片描述
在地图上将有问题的记录点标注出来

p + geom_sf(data = occs,
            fill=c("red", "#72994c")[factor(occs$native)],
            col="black",
            shape=21)

在这里插入图片描述
可以看到,有一些明显不在原生区内,而少数记录与原生区很近。让我们靠近些看看原生区范围周围的记录点:

lims = st_bbox(native_range)
p + geom_sf(data=occs,
            fill=c("red","#72994c")[factor(occs$native)],
            col="black",
            shape=21) +
  coord_sf(xlim = lims[c(1,3)], ylim = lims[c(2,4)])

在这里插入图片描述
可以清楚地看到,这些点落在了海里。但是有一些点距离海岸线非常近,可能是WGSRPD图层文件的分辨率导致的。

或许我们可以添加一些条件,还让数据清洗地不那么严格。

图层文件的坐标系是基于度的,所以1km大约为0.009度。但随着纬度升高,0.009度会比1km越来越长,这就要求根据数据和分布区位置做相应的调整。

让我们观察一下有多少分布记录落在原生区外1km内。

buffered_dist = native_range %>%
  st_union() %>%
  st_buffer(0.009)

occs$native_buffer = st_intersects(occs, buffered_dist, sparse=FALSE)[,1]

suspect_occs = occs %>% filter(! native)

p + geom_sf(data = buffered_dist,
            fill = "transparent",
            col = "gold") +
  geom_sf(data=suspect_occs,
          fill=c("red", "gold")[factor(suspect_occs$native_buffer)],
          col="black",
          shape=21) +
  coord_sf(xlim = lims[c(1,3)], ylim = lims[c(2,4)])

在这里插入图片描述
现在,我们可以丢弃在原生范围之外 >1 公里(大约)的记录。

occs_filtered = occs %>% filter(native_buffer)
p + geom_sf(dat=occs_filtered, fill="#6e6ad9", col="black", shape=21)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品Backlog和需求管理

产品Backlog 产品backlog是一个按照价值排序的需求清单。为了达成产品目标,所有的需求都需要放到产品backlog中进行管理和规划。由产品负责人负责管理和维护。Leangoo为每一个里程碑建立了一个产品Backlog看板, 通过这个产品backlog看板来进行需求管理和规划。 里…

搭建服务器的主流中间件有哪些?如何在外网访问内网的服务?

计算机业内人士对于搭建服务器的中间件并不陌生,apache、tomcat、IIS、nginx 都是比较常用的搭建服务器的中间件,它们之间还是有一些区别差异的。今天就说说这些中间件之间有哪些区别,以及如何利用快解析实现内网主机应用让外网访问。 首先说…

大数据入门(六)- UCloud创建云服务器

一.注册UCloud账户 使用UCloud的服务,首先需要注册账户 账户注册非常简单,在UCloud网站首页(https://www.ucloud.cn/)右上角点击快速注册 二.创建VPC 1.注册成功后,选择全部产品 2.选择私有网络UVPC 3.区域选择华北…

uni-app开发小程序使用uni.chooseMedia选择图片,安卓手机无法选择图片

uni-app开发小程序时,使用uni.chooseMedia选择图片,苹果手机是正常的,安卓手机无法打开手机选择图片 问题复现解决方法!!我的反思与总结 问题复现 一、在小程序中,选择图片并上传,是一个很常见…

[Python报错] ImportError: cannot import name ‘timer’ from ‘timer’

[Python报错] ImportError: cannot import name ‘timer’ from ‘timer’ 前言 我最近遇到这个报错,卡了我好长时间去解决,我在互联网上找了很多资料,遗憾的是,我没找到有其他人遇到的类似的问题。所以在这里做一下记录。事实上…

两年外包,从4K涨到了15K....

我18年毕业于一个普通二本学校,电子信息工程学院,是一个很不出名的小本科。大学期间专业知识也没有去认真的学习,所以毕业的时候就随便找了一份工作,在一个外包公司做功能测试。 记得那时候薪资大概是4k左右,因为是以…

神经网络实验---人工神经网络(2)

本实验目的主要是掌握梯度下降法的优化算法;能够使用tf.keras构建Sequential模型,完成多分类任务。 1. 实验目的 ①掌握梯度下降法的优化算法; ②能够使用tf.keras构建Sequential模型,完成多分类任务。 2. 实验内容 ①下载MNIS…

架构设计之复用性概谈

作为开发人员,你对复用这个概念一定不陌生。在开发过程中,我们把系统中通用的代码逻辑抽取出来,变成公共方法或公共类,然后在多个地方调用,这就是最简单的技术上的复用。 但一开始,我们不会过多地考虑复用&…

迭代后首波实测!360智脑一键联网,代码超强,AI诈骗一眼看穿

360大模型(又)交卷了!作为国内首个能联网的大模型,360智脑给了我们怎样的惊喜?话不多说,新鲜出炉的第一手实测来了。 不得不说,自从GPT大模型混战开赛之后,教主周鸿祎可谓是存在感十…

易观分析:消费金融机构以APP为触点,创新消费场景,激发消费活力

易观:随着“用好消费金融、释放消费潜力”等金融支持扩内需的持续深入,消费金融APP活跃用户规模将保持稳健增长的态势,进而在拉动内需、促进消费升级、服务实体经济中扮演更重要的角色。 一、疫情防控较快平稳转段,激发消费市场活…

总结button,input type=“button“,input type=“text“中:[在value添加值] 和 [标签内添加值]的区别

1.如果是需要一个 普通文本框 <input></input>和<input type"text"></input>外观相同 都是 2.对比button,input type"button",input type"text"中&#xff1a;在value添加值 和 标签内 添加值 html中&#xff1a; &l…

第十三章 常用类(Math 类、Arrays 类、System类、Biglnteger 和BigDecimal 类、日期类)

一、Math 类&#xff08;P481&#xff09; Math类包含&#xff0c;用于执行基本数学运算的方法&#xff0c;如初等指数、对数、平方根和三角函数 &#xff08;1&#xff09;abs&#xff1a;绝对值 &#xff08;2&#xff09;pow&#xff1a;求幂 double pow Math.pow(2, 4); /…

520 | ChatGPT会是一个完美情人吗?

A GENERATIVE AI EXPERIMENT 机器人能感受到爱吗&#xff1f;这个困扰了科学家们多年的未解之谜&#xff0c;如今随着ChatGPT的爆火再次回到人们的视线中。虽然我们尚未准备好为机器赋予情感&#xff0c;但机器已经可以借助生成式AI来帮助人类表达自己的情感。 自然情感表达 …

网络原理(七):http 协议(下)

上一章只是谈到了http 中的几个header属性&#xff1a; Host &#xff1a; 域名端口号Content-Length &#xff1a;表示 body 中的数据长度Content-type &#xff1a;表示 body 中的数据格式。User-Agent &#xff1a;表示浏览器/操作系统的属性。Referer &#xff1a; 表示这…

三年的功能测试,让我女朋友跑了,太难受了...

简单概括一下 先说一下自己的情况&#xff0c;普通本科&#xff0c;18年通过校招进入深圳某软件公司&#xff0c;干了3年多的功能测试&#xff0c;21年的那会&#xff0c;因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不…

Spring之DI(依赖注入)

依赖注入&#xff08;DI&#xff09;是一个过程&#xff0c;在这个过程中&#xff0c;对象仅通过构造函数参数、工厂方法的参数或在对象被实例化后通过属性设置来定义它们的依赖项&#xff08;即与该对象一起工作的其他对象&#xff09;。然后&#xff0c;容器在创建 bean 时注…

【网络】无线路由器和路由器的配置方法

目录 &#x1f352;常见的接入互联网方式 &#x1f353;WAN配置 &#x1f353;LAN口配置 &#x1f353;WLAN配置 &#x1f353;WLAN安全 &#x1f352;路由设备管理 &#x1f353;路由器内部组件 &#x1f353;Cisco路由器的启动过程 &#x1f353;基础命令 &#x1f34e;show …

【中间件漏洞】apache未知扩展名解析漏洞、addhandler导致的解析漏洞、换行解析漏洞(CVE-2017-15715)

目录 apache未知扩展名解析漏洞 漏洞复现 防范建议 AddHandler导致的解析漏洞 防范建议 Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; 漏洞复现 防范建议 apache未知扩展名解析漏洞 Apache默认一个文件可以有多个以点分割的后缀&#xff0c;当最右边的后缀…

C#入门:编写运行第一个C#程序Helloworld

参考链接&#xff1a; C#入门学习-希里安 下载安装Visual Studio&#xff0c;创建项目 在官网下载安装Professional 2022即可. https://visualstudio.microsoft.com/zh-hans/ 下载时选择C#、.Net框架等支持&#xff0c;安装后运行&#xff0c;新建模板选择 Visual C#、Windo…

es集群配置与实际演示

es集群配置与实际演示 1》单服务器多节点部署一、准备环境二、安装jdk三、ElasticSearch部署四、实际演示 2》多台服务器集群部署一、准备环境二、安装jdk三、ElasticSearch部署四、实际演示五、密码及集群认证六、其他 集群分类&#xff1a; ES多节点集群分为两种&#xff0c;…