r-lidar-lab / ALSroads

Road corrections and measurements from ALS data
19 stars 4 forks source link

NaNs in conductivity raster messing up transition values #54

Closed jfbourdon closed 2 years ago

jfbourdon commented 2 years ago

Erreur à partir de la version 7cc78cf (04a51ed n'a pas le problème):

Call:  Error in if (!all(transition.values >= 0)) warning("transition function gives negative values")
Message:  missing value where TRUE/FALSE needed

Reproduction avec un jeu de données du package:

library(ALSroads)
library(lidR)
library(raster)

dir  <- system.file("extdata", "", package="ALSroads")
road <- system.file("extdata", "j5gr_centerline_971487.gpkg", package="ALSroads")
dtm  <- system.file("extdata", "j5gr_dtm.tif", package="ALSroads")
ctg  <- readLAScatalog(dir)
road <- st_read(road, "original", quiet = TRUE)
dtm  <- raster(dtm)

res <- measure_road(ctg, road, dtm = dtm)

Le problème semble provenir du raster de conductivité (qu'il soit RasterLayer ou SpatRaster) qui contient à la fois des valeurs NaN et NA pour désigner le NoData. Les NA sont bien gérés, mais pas les NaN, ce qui fait en sorte que des cellules NoData sont sélectionnées à la ligne 211 ce qui engendre des valeurs non numériques à la ligne 222: https://github.com/Jean-Romain/ALSroads/blob/7cc78cfd6747346f725601dc694a5bebe01c1043/R/lcp_tools.R#L211-L225

Je ne suis pas certain de la solution, mais en ajoutant le code raster::values(x)[is.nan(raster::values(x))] <- NA après la ligne 182 (l'équivalent est à faire pour un SpatRaster) en plus du code transition.values[is.na(transition.values)] <- 0 après la ligne 222, je semble obtenir un résultat correct.

Jean-Romain commented 2 years ago

Fixed