Анализ пространственной структуры в R - PullRequest
0 голосов
/ 25 сентября 2018

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

https://files.dtu.dk/userportal/#/shared/public/_CVkU00lZFzuJWRS/Example.rds

Мы можем прочитать данные:

l <- readRDS(paste0(myDownloadFolder, "Example.rds"))

Сделать это пространственным с помощью sf:

library(sf)
st_geometry(l) <- l$geometry

И исследуйте это с помощью карты:

library(mapview)
mapview(l, col.regions = sf.colors(10))

Отсюда мы можем видеть, что они в основном ловят рыбу в двух разных местах в этот конкретный день.

enter image description here

Если мы построим гистограмму скорости, мы получим два выделенных пика, один около 2-4 и один около 7-9:

hist(l$speed,1000, xlim = c(1,15), ylim = c(0,30))

enter image description here

Есть ли способ автоматического определения порогов?

Только с использованием точек в этом интервале

inc <- l[l$speed>2 & l$speed<4,]

Мы можем найти разницу во времени между этими значениями:

inc$INTV2 <- difftime(lead(inc$log), inc$log)
inc$INTV3 <- difftime((inc$log), lag(inc$log))
hist(as.numeric(inc$INTV2),1000, xlim = c(0,1000), ylim=c(0,100))

enter image description here

Обычно между каждой перевозкой будет не менее 1 минуты (60 секунд), но давайте установим его на 90 в этом примере.

stop <- inc[INTV2>90 | is.na(INTV2)]$log
start <- inc[INTV3>90 | is.na(INTV3)]$log

haul <- data.table(start, stop)
haul$length <- difftime(haul$stop, haul$start)

Мы можем использовать выборки, чтобы получить строки из исходных данных:

library(data.table)
library(dplyr)
DT <- data.table(l)

setDT(DT)[,log2 := log]
#allow for data table merge - tidspunkt
setkey(DT, log, log2)

## Merge with blackbox data on afstid og anktid
pts <- foverlaps(haul, DT, by.x=c("start", "stop"), nomatch=0)

st_geometry(pts) <- pts$geometry

l2 <- pts %>% 
  dplyr::group_by(haulid) %>% 
  summarise(do_union = FALSE) %>%
  sf::st_cast("LINESTRING")

mapview(l2, zcol="haulid")

Это выглядит нормально, но некоторые выборки, похоже, состоят из двух выборок (Рыбаки не поворачиваются на 180градусы в пределах одной выборки):

enter image description here

Можно ли использовать курс, чтобы различать, когда выборка должна быть сокращена (когда они начинают поворачиваться и когда ониконец хода)?Было бы неплохо иметь способ, где только прямые линии считаются перевозками.

Это закончилось долгой болтовней - извините за это.В заключение я хотел бы ответить на два вопроса: - Как автоматически определять скорость зацепления - Как обрезать тяги, когда они поворачивают.

...