rWCVP: Reinigungskoordinatenpunkte entsprechend dem heimischen Verbreitungsgebiet der Art
Bibliothek laden
library(rWCVP)
library(rgbif)
library(tidyverse)
library(sf)
Arbeitsablauf (einzelne Art)
In dieser Arbeit verwenden wir Callitris rhomboidea als Beispielart
1. Discovery-Datensatzdaten herunterladen (rgbif)
Der erste Schritt besteht darin, Artenaufzeichnungen von irgendwoher zu beschaffen. Wir erhalten diese von GBIF mit rgbif .
Wir beschränken die Artenaufzeichnungen hier auf 1000, damit der Download nicht zu lange dauert. Wir bitten darum, nur Datensätze abzurufen, deren Koordinaten nicht automatisch von GBIF für eventuelle Probleme gekennzeichnet werden.
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. Erstellung von Entdeckungsunterlagen
Bevor wir Non-Origin-Discovery-Datensätze aus den heruntergeladenen Daten entfernen können, müssen wir die Daten im richtigen Format abrufen.
Wenn sich herausstellt, dass die Datensätze sehr umfangreich sind und eine Art an vielen Orten heimisch ist, kann das Entfernen von Datensätzen nicht heimischer Arten wie eine sehr zeitaufwändige Rechenaufgabe erscheinen. Daher kann die Datenbereinigung mehrmals durchgeführt werden, beispielsweise durch das Entfernen von Datensätzen im Meer oder von Datensätzen im Forschungsinstitut.
Was diesen Artikel betrifft, ist unser Datenvolumen nicht groß, sodass keine Notwendigkeit besteht, die Daten im Voraus zu bereinigen. Allerdings müssen wir unseren Datensatz in einen räumlichen Datensatz konvertieren, um die Verteilungspunkte nach Layer zu filtern.
occs = gbif_response$data %>%
select(scientificName, decimalLatitude, decimalLongitude) %>%
st_as_sf(coords=c("decimalLongitude", "decimalLatitude"), crs=st_crs(4326))
Wenn Sie Ihren eigenen Datensatz anstelle des von GBIF heruntergeladenen verwenden, müssen Sie ihn trotzdem in einen räumlichen Datensatz konvertieren und das entsprechende Koordinatensystem festlegen, wie wir es oben getan haben. Wir haben hier EPSG 4326 verwendet, da es die Standardeinstellung für Längen- und Breitengradkoordinaten ist.
3. Ermitteln Sie den Bereich des ursprünglichen Bereichs
Jetzt können wir rWCVP verwenden , um das heimische Verbreitungsgebiet der Art herunterzuladen.
native_range = wcvp_distribution("Callitris rhomboidea",
taxon_rank = "species",
introduced = FALSE,
extinct = FALSE,
location_doubtful = FALSE)
Beobachten Sie den Verbreitungsbereich visuell
(p = wcvp_distribution_map(native_range, crop_map = TRUE) +
theme(legend.position = "none"))
Wie sieht es also mit der Verteilung der Datensatzverteilungspunkte auf der Karte aus?
4. Löschen Sie nicht-native Verteilungsdatensätze
Welche redundanten Verteilungspunkte werden nun eliminiert?
Eine Möglichkeit besteht darin, zu überprüfen, welche Punkte innerhalb des nativen Ausdehnungspolygons liegen, und für jeden Punkt einen TRUE/FALSE-Wert zu erhalten. Dies kann mit sf_intersects von sf erfolgen .Da wir über mehr als ein Verteilungsgebiet verfügen, erhält jeder Verteilungspunkt mehr als einen Wert. Daher müssen wir st_union verwenden , um die ursprünglichen Gebiete zu kombinieren.
occs$native = st_intersects(occs, st_union(native_range), sparse = FALSE)[,1]
Markieren Sie die betreffenden Aufnahmepunkte auf der Karte
p + geom_sf(data = occs,
fill=c("red", "#72994c")[factor(occs$native)],
col="black",
shape=21)
Es ist ersichtlich, dass einige Datensätze offensichtlich nicht im Originalbereich liegen, während einige Datensätze sehr nahe am Originalbereich liegen. Schauen wir uns die Protokollierungspunkte rund um den nativen Bereich genauer an:
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)])
Es ist deutlich zu erkennen, dass die Punkte ins Meer fallen. Einige Punkte liegen jedoch sehr nahe an der Küste, was möglicherweise an der Auflösung der WGSRPD-Layer-Datei liegt.
Vielleicht können wir einige Bedingungen hinzufügen und die Datenbereinigung weniger streng gestalten.
Das Koordinatensystem der Layer-Datei basiert auf Graden, sodass 1 km ungefähr 0,009 Grad entspricht. Allerdings werden mit zunehmendem Breitengrad 0,009 Grad immer länger als 1 km, was entsprechende Anpassungen auf Basis der Daten und der Lage des Verbreitungsgebietes erfordert.
Beobachten wir, wie viele Verbreitungsdatensätze innerhalb von 1 km außerhalb der ursprünglichen Zone liegen.
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)])
Wir können jetzt Datensätze verwerfen, die mehr als 1 km (ungefähr) außerhalb des nativen Bereichs liegen.
occs_filtered = occs %>% filter(native_buffer)
p + geom_sf(dat=occs_filtered, fill="#6e6ad9", col="black", shape=21)