Как измерить перекрытие между растровым слоем домашнего диапазона и многоугольником в R - PullRequest
0 голосов
/ 06 мая 2020

У меня есть данные для отслеживания, для которых я рассчитываю домашний диапазон. Я хочу измерить степень перекрытия между растром домашнего диапазона и защищенной областью.

Я использую пакеты amt и sf, но когда я пытаюсь работать с растром, я получаю сообщение об ошибке:

Ошибка в UseMethod ("st_as_sf"): нет применимого метода для 'st_as_sf', примененного к объекту класса "c ('RasterLayer', 'Raster', 'BasicRaster')"

# load packages
library(wdpar)
library(dplyr)
library(sf)
library(amt)
library(adehabitatHR)

# download protected area data 
# (excluding areas represented as point localities)
sa_raw_pa_data <- wdpa_fetch(c("Malta"))
sa_raw_pa_data 

sa_raw_pa_data <- sa_raw_pa_data %>% filter(NAME == "Ghadira")

# reproject data
sa_pa_data <- st_transform(sa_raw_pa_data, 4326)

  sa_pa_data %>%
  st_set_geometry(NULL) %>%
  glimpse()

sa_pa_data$GIS_AREA <- st_area(sa_pa_data)
sa_pa_data

#' dissolve
sa_pa_data <-
  sa_pa_data %>%
  summarise(area = sum(GIS_AREA))

# create some random data
set.seed(123)
d = data.frame(long=runif(100,13.9324226,14.8267966), lat=runif(100,35.6029696,36.2852706))
d$id <- c(rep("A", 50), rep("B", 50))

trk <-
  mk_track(
    d,
    .x = long,
    .y = lat,
    id = id,
    crs = CRS(
      "+init=epsg:4326"
    ))

#' create the home ranges 
kde_shape_1 <- trk %>% filter(id == "A") %>%
  hr_kde(., levels = c(0.95))
kde_shape_2 <- trk %>% filter(id == "B") %>%
  hr_kde(., levels = c(0.95))

#' measure the overlap - HERE'S THE ERROR
kernel.sf = st_as_sf(kde_shape_1$ud)
st_intersect(kernel.sf, sa_pa_data)
...