У меня много данных о местоположении рыболовных судов, с которых я хотел бы обнаружить рыболовную деятельность.В основном рыбацкие суда бывают либо на пару, либо на рыбалке, либо неактивныеЯ загрузил пример типичных данных о днях здесь:
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))
Отсюда мы можем видеть, что они в основном ловят рыбу в двух разных местах в этот конкретный день.
Если мы построим гистограмму скорости, мы получим два выделенных пика, один около 2-4 и один около 7-9:
hist(l$speed,1000, xlim = c(1,15), ylim = c(0,30))
Есть ли способ автоматического определения порогов?
Только с использованием точек в этом интервале
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))
Обычно между каждой перевозкой будет не менее 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градусы в пределах одной выборки):
Можно ли использовать курс, чтобы различать, когда выборка должна быть сокращена (когда они начинают поворачиваться и когда ониконец хода)?Было бы неплохо иметь способ, где только прямые линии считаются перевозками.
Это закончилось долгой болтовней - извините за это.В заключение я хотел бы ответить на два вопроса: - Как автоматически определять скорость зацепления - Как обрезать тяги, когда они поворачивают.