Title: | Road Condition Analysis |
---|---|
Description: | Computation of the International Roughness Index (IRI) given a longitudinal road profile. The IRI can be calculated for a single road segment or for a sequence of segments with a fixed length (e. g. 100m). For the latter, an overlap of the segments can be selected. The IRI and likewise the algorithms for its determination are defined in Sayers, Michael W; Gillespie, Thomas D; Queiroz, Cesar A.V. 1986. The International Road Roughness Experiment (IRRE) : establishing correlation and a calibration standard for measurements. World Bank technical paper; no. WTP 45. Washington, DC : The World Bank. (ISBN 0-8213-0589-1) available from <http://documents.worldbank.org/curated/en/326081468740204115>. |
Authors: | Viliam Simko [cre, aut], Kevin Laubis [aut] |
Maintainer: | Viliam Simko <[email protected]> |
License: | MIT + file LICENSE |
Version: | 0.0.5 |
Built: | 2024-11-10 03:59:22 UTC |
Source: | https://github.com/vsimko/rroad |
Depending on the sample size a certain buffer has to be attached to the profile for calculation the slope at the end.
CalculateIRIContinuously(profile, iri_coef)
CalculateIRIContinuously(profile, iri_coef)
profile |
Road profile (as numeric vector in mm) whose IRIs are to be calculated. |
iri_coef |
Set of coefficients for specific sample size (e. g. IRI_COEF_250). |
Calculated IRIs (m/km) for increasing segments (as numeric vector) of the given profile.
generate_test_profile <- function (x) { if (x < 1) return(0) if (x >= 1 && x < 3) return(x - 1) if (x >= 3 && x < 5) return(5 - x) if (x >= 5) return(0) } x <- seq(.25, 30, by = .25) test_profile <- data.frame(x = x, profile=sapply(x, generate_test_profile)) test_profile$iri <- CalculateIRIContinuously( test_profile$profile, IRI_COEF_250) plot(x = test_profile$x, y = test_profile$profile, ylim = c(0, 8), xlim = c(0,25), type = "l") lines(x = test_profile$x, y = test_profile$iri*10)
generate_test_profile <- function (x) { if (x < 1) return(0) if (x >= 1 && x < 3) return(x - 1) if (x >= 3 && x < 5) return(5 - x) if (x >= 5) return(0) } x <- seq(.25, 30, by = .25) test_profile <- data.frame(x = x, profile=sapply(x, generate_test_profile)) test_profile$iri <- CalculateIRIContinuously( test_profile$profile, IRI_COEF_250) plot(x = test_profile$x, y = test_profile$profile, ylim = c(0, 8), xlim = c(0,25), type = "l") lines(x = test_profile$x, y = test_profile$iri*10)
Computes the IRI for fixed length segments (e.g. 100m segments) given a road profile.
CalculateIRIperSegments(profile, iri_coef, segment.length = 100)
CalculateIRIperSegments(profile, iri_coef, segment.length = 100)
profile |
Road profile (as numeric vector in mm) whose IRI is to be calculated. |
iri_coef |
Set of coefficients for specific sample size (e. g. IRI_COEF_100). |
segment.length |
Distance (in m) for which the IRI is to be calculated. Default is 100 m. |
Calculated IRI (m/km) per segment (as numeric) of the given profile.
profile <- rnorm(10000) iri <- CalculateIRIperSegments(profile, IRI_COEF_100, 20) par(mfrow = c(1,2)) plot(profile, type="l", xlab="Distance [dm]", ylab="Profile [m]", main="Read profile (Laser measurement)") plot(iri, type="s", xlab="Segment", ylab="IRI [m/km]", main="International Roughness Index (IRI)\nsample = 10cm, segment = 20m")
profile <- rnorm(10000) iri <- CalculateIRIperSegments(profile, IRI_COEF_100, 20) par(mfrow = c(1,2)) plot(profile, type="l", xlab="Distance [dm]", ylab="Profile [m]", main="Read profile (Laser measurement)") plot(iri, type="s", xlab="Segment", ylab="IRI [m/km]", main="International Roughness Index (IRI)\nsample = 10cm, segment = 20m")
Computes the IRI for fixed length overlapping segments (e.g. 100 m segments) with an offset (e.g. 20 m) given a road profile
CalculateIRIperSegmentsOverlapping(profile, iri_coef, segment.length = 100, segment.offset = 20)
CalculateIRIperSegmentsOverlapping(profile, iri_coef, segment.length = 100, segment.offset = 20)
profile |
Road profile (as numeric vector in mm) whose IRI is to be calculated. |
iri_coef |
Set of coefficients for specific sample size (e. g. IRI_COEF_100). |
segment.length |
Distance (in m) for which the IRI is to be calculated. Default is 100 m. |
segment.offset |
Offset (in m) for which the segments will not overlap. Default is 20 m. |
Calculated IRI (m/km) per segment (as numeric) of the given profile.
profile <- rnorm(10000) iri <- CalculateIRIperSegments(profile, IRI_COEF_100, 20) par(mfrow = c(1,2)) plot(profile, type="l", xlab="Distance [dm]", ylab="Profile [m]", main="Read profile (Laser measurement)") plot(iri, type="s", xlab="Segment (with 20 m offset)", ylab="IRI [m/km]", main="International Roughness Index (IRI)\nsample = 10cm, segment = 20m")
profile <- rnorm(10000) iri <- CalculateIRIperSegments(profile, IRI_COEF_100, 20) par(mfrow = c(1,2)) plot(profile, type="l", xlab="Distance [dm]", ylab="Profile [m]", main="Read profile (Laser measurement)") plot(iri, type="s", xlab="Segment (with 20 m offset)", ylab="IRI [m/km]", main="International Roughness Index (IRI)\nsample = 10cm, segment = 20m")
precomputed coeficients 100 mm segments (lazily evaluated promise)
precomputed coeficients 250 mm segments (lazily evaluated promise)