r-lidar-lab / ALSroads

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

`find_best_connexion()` plus exact #48

Closed jfbourdon closed 2 years ago

jfbourdon commented 2 years ago

Règle générale, la fonction fonctionnait bien, mais il y avait une faille dans la façon dont je calculais la différence d'angle entre les segments qui faisait en sorte que, parfois, la solution optimale (ayant un angle le plus plat possible, soit le plus près de 180°) n'était pas choisie. Je me suis certainement compliqué la vie avec ma nouvelle méthode, mais au moins là ça fonctionne. Ça pourra toujours être revisité.

ori1 <- st_sfc(sf::st_linestring(matrix(c(-259453.9, 377891.1, -259426.9, 377864.3), ncol=2, byrow=T)))
ori2 <- st_sfc(sf::st_linestring(matrix(c(-259453.9, 377891.1, -259419.3, 377881.5), ncol=2, byrow=T)))
ori3 <- st_sfc(sf::st_linestring(matrix(c(-259453.9, 377891.1, -259460.4, 377921.9), ncol=2, byrow=T)))
ori <- st_sf(c(ori1, ori2, ori3), crs = st_crs("EPSG:6622"), id = LETTERS[1:3], SCORE = c(85,50,90), CLASS = c(1,2,1))
ori["heading"] <- sapply(st_geometry(ori), function(x) ALSroads:::st_ends_heading(x)[1])
ori["norm_heading"] <- ifelse(ori[["heading"]] < 0, ori[["heading"]] + 180, ori[["heading"]])
plot(ori["id"])

image

# Résultat avec code actuel:
ALSroads:::find_best_connexion(ori)
# [1] "A" "B"

# Résultat avec cette PR:
ALSroads:::find_best_connexion(ori)
# [1] "A" "C"

À noter que j'ai aussi apporté des modifications dans check_postprod.R qui affectent seulement l'ordre et le nom de certaines variables pour être plus cohérent avec le restant du code.

jfbourdon commented 2 years ago

J'ai mis à jour la façon dont je calculais la différence entre les angles pour quelque chose d'un peu moins tordu.

Jean-Romain commented 2 years ago

Je merge je te fais confiance