Как исправить «указанные неверные сегменты» при выполнении линейных ссылок с пакетом Riverdist? - PullRequest
0 голосов
/ 01 октября 2019

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

Я попытался изменить проекцию и попытался использовать другие данные. Единственный раз, когда это сработало, была очень простая речная система с двумя точками рыбы.

river <- line2network(path= ".../A_river.shp")
#clean the shp
river_fixed <- cleanup(river)
#import data point from shp
point <- pointshp2segvert(path=".../A_eels.shp", layer="A_eels", 
                          rivers=river)
# Mouth must be specified
river_fixed$mouth$mouth.seg <- 9
river_fixed$mouth$mouth.vert <- 2704

#get value of seg and vert for calculating distance
seg <- point$seg
vert <- point$vert

#distance for each point to the mouth
mouthdist <- mouthdist(seg=c(129, 129, 104, 86, 87, 73, 35, 35, 55, 71, 76, 88, 35, 71, 102, 71, 55, 75, 72, 102, 54, 2, 83, 85, 54, 84, 84, 84, 17, 17, 105, 51, 50), 
                       vert=c(106, 123, 1, 11, 86, 142, 35, 63, 21, 25, 50, 37, 84, 41, 48, 44, 43, 119, 23, 69, 26, 30, 10, 8, 53, 26, 74, 111, 49, 68, 13, 208, 6), rivers=river_fixed)

В последней строке я получаю это сообщение об ошибке, и вот где я застрял: «Ошибка во рту (seg = c (129, 129, 104, 86, 87, 73, 35), 35, 55, 71,: указаны недопустимые сегменты. "

Шейп-файл доступен здесь: https://drive.google.com/drive/folders/1CSLye8UQkGY7wnS4LurgraGUjO-wFfpv?usp=sharing

РЕДАКТИРОВАТЬ - вот откуда возникает проблема, но я не понимаю, какчтобы исправить это:

riverdirection <- function(startseg,endseg,startvert,endvert,rivers,flowconnected=FALSE,stopiferror=TRUE,algorithm=NULL) {
  if(class(rivers)!="rivernetwork") stop("Argument 'rivers' must be of class 'rivernetwork'.  See help(line2network) for more information.")
  if(max(c(startseg,endseg),na.rm=T)>length(rivers$lines) | min(c(startseg,endseg),na.rm=T)<1) {
    stop("Invalid segments specified.")
  }

Спасибо!

...