R-Sprachpraxis – rWCVP: Bereinigen von Koordinatenpunkten 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))

Fügen Sie hier eine Bildbeschreibung ein

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)

Fügen Sie hier eine Bildbeschreibung ein
Beobachten Sie den Verbreitungsbereich visuell

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

Fügen Sie hier eine Bildbeschreibung ein
Wie sieht es also mit der Verteilung der Datensatzverteilungspunkte auf der Karte aus?
Fügen Sie hier eine Bildbeschreibung ein

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]

Fügen Sie hier eine Bildbeschreibung ein
Markieren Sie die betreffenden Aufnahmepunkte auf der Karte

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

Fügen Sie hier eine Bildbeschreibung ein
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)])

Fügen Sie hier eine Bildbeschreibung ein
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)])

Fügen Sie hier eine Bildbeschreibung ein
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)

Fügen Sie hier eine Bildbeschreibung ein

Supongo que te gusta

Origin blog.csdn.net/whitedrogen/article/details/130869915
Recomendado
Clasificación