The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
This vignette shows how to prepare road-noise modelling inputs from
building height data, OSM-style roads, greenspace, canopy height, and
optional terrain data. The same input pattern used by svf()
is used here: pass building footprints as x, choose the
height column with height_field, and supply canopy/DEM
rasters directly or let the function retrieve them.
library(gloBFPr)
library(sf)
library(terra)
The package includes a small building layer and companion raster
examples. For a real study area, replace this with
search_3dglobdf().
data(globfp_example)
data(globfp_example_dem)
data(globfp_example_canopy_height)
buildings <- globfp_example
dem <- rast(globfp_example_dem)
canopy_height <- rast(globfp_example_canopy_height)
names(buildings)
By default, prepare_noisemodelling_inputs() and
get_noise_map() download OSM roads from the bounding box of
x. If measured traffic columns are not present,
infer_osm_traffic() fills screening-level speed and traffic
assumptions from the OSM highway class.
noise_inputs <- prepare_noisemodelling_inputs(
x = buildings,
height_field = "Height",
datasource_greenspace = "esri",
greenspace_zoom = 14,
canopy_height = canopy_height,
dem = dem,
receiver = "grid",
resolution = 25,
quiet = FALSE
)
For measured traffic counts, pass a road layer with NoiseModelling
traffic columns directly through roads. The inferred
defaults are useful for screening or scenario comparisons, not
calibrated regulatory maps.
Use prepare_noisemodelling_inputs() when you want to
inspect or export the layers before running the external NoiseModelling
solver.
noise_inputs <- prepare_noisemodelling_inputs(
x = buildings,
height_field = "Height",
canopy_height = canopy_height,
dem = dem,
receiver = "grid",
resolution = 25,
quiet = TRUE
)
names(noise_inputs)
nrow(noise_inputs$receivers)
The prepared object contains:
buildings: building polygons with PK,
HEIGHT, and optional POP.roads: road lines with PK and
CNOSSOS-style traffic columns.ground: hard/green ground absorption polygons.receivers: 3D receiver points, defaulting to 4 m
height.dem: optional terrain raster aligned for later
export.You can write a GeoPackage for inspection.
noise_inputs <- prepare_noisemodelling_inputs(
x = buildings,
roads = roads,
canopy_height = canopy_height,
dem = dem,
out_dir = tempdir(),
write = TRUE,
quiet = TRUE
)
noise_inputs$gpkg
The noise functions can follow the same style as svf():
provide datasource_canopy_height,
datasource_greenspace, and key instead of
supplying rasters. Roads are downloaded internally from the building
extent unless you pass roads explicitly.
noise_inputs <- prepare_noisemodelling_inputs(
x = buildings,
height_field = "Height",
min_tree_height = 2,
datasource_canopy_height = "metachm",
datasource_greenspace = "esri",
opentopo_key = Sys.getenv("OPENTOPOGRAPHY_KEY"),
receiver = "grid",
resolution = 25,
quiet = TRUE
)
opentopo_key is only needed when DEM retrieval is
requested. Canopy height is used to classify green ground absorption; it
is not treated as a hard acoustic barrier.
get_noise_map(run = TRUE) runs the official headless
NoiseModelling WPS scripts. This requires Java 11 or newer
(11<=version<=17). The first run can download the headless
NoiseModelling release into the R user cache, or you can preinstall it
with install_noisemodelling().
install_noisemodelling(version = "5.0.1")
noise_result <- get_noise_map(
x = buildings,
height_field = "Height",
datasource_canopy_height = "metachm",
datasource_greenspace = "esri",
dem = dem,
receiver = "grid",
resolution = 25,
run = TRUE,
keep_files = TRUE,
quiet = FALSE,
java = 17
)
plot_noise_map(noise_result, period = "DEN", scalebar = TRUE)
plot_noise_map(noise_result, period = "DEN")
The result includes the prepared inputs, the raw
RECEIVERS_LEVEL output, a spatial noise_map
receiver layer with period-specific columns such as LAEQ_D,
LAEQ_E, LAEQ_N, and LAEQ_DEN, the
official NoiseModelling CONTOURING_NOISE_MAP polygons in
isophones, the exported GeoJSON paths, logs from each WPS
script, and the NoiseModelling runner path.
For production work, start with a building layer from
search_3dglobdf() and replace OSM-inferred traffic with
local speed and volume observations when available.
get_noise_map() exposes the main acoustic controls used
by Noise_level_from_source.groovy. The defaults are
deliberately moderate for screening maps; increasing propagation
distance, reflection order, diffraction, or ray export can make the run
much slower.
noise_result <- get_noise_map(
x = buildings,
height_field = "Height",
canopy_height = canopy_height,
dem = dem,
receiver = "grid",
resolution = 25,
run = TRUE,
java = 17,
reflection_order = 1,
max_src_distance = 500,
max_reflection_distance = 350,
diffraction_horizontal = TRUE,
diffraction_vertical = FALSE,
wall_alpha = 0.1,
humidity = 75,
temperature = 31,
favourable_occurrences = rep(0.5, 16),
max_error = 0.1,
export_source_id = FALSE,
frequency_field_prepend = "HZ"
)
plot_noise_map(noise_result, period = "DEN", scalebar = TRUE)
Key controls:
reflection_order: maximum number of specular
reflections on vertical surfaces. Higher values are more realistic in
street canyons but much slower.max_src_distance: maximum source-receiver search
distance in meters. Larger values include farther roads.max_reflection_distance: maximum distance used when
searching walls for reflected paths.diffraction_horizontal and
diffraction_vertical: enable diffraction over horizontal
edges or around vertical edges. NoiseModelling recommends horizontal
diffraction for many propagation studies; vertical diffraction is mainly
for rail and industrial sources under CNOSSOS-EU guidance.wall_alpha: wall absorption coefficient.
0.1 is a common reflective facade assumption.humidity, temperature, and
favourable_occurrences: atmospheric absorption and
meteorological propagation settings.max_error: pruning threshold in dB for negligible
source contributions. A smaller value can be more complete but
slower.export_source_id: keeps receiver levels by source id,
useful for source contribution diagnostics.rays_name: exports propagation rays or attenuation
diagnostics to a table or file URL. This is mainly for debugging and can
be very large.noise_wps_args: passes named raw arguments to the
NoiseModelling WPS script for advanced options not yet represented by a
dedicated R argument.The OSM traffic defaults used by infer_osm_traffic()
mirror the category values embedded in NoiseModelling’s
Import_OSM.groovy, including the cited Good Practice Guide
assumptions. Import_OSM.groovy itself works from a local
.osm, .osm.gz, or .osm.pbf
extract; the current R workflow instead downloads roads from the
building bounding box and applies matching traffic defaults in R.
If you already have a local OSM extract and want NoiseModelling to
create the ROADS table itself, pass osm_file
and leave roads = NULL.
You can download a regional .osm.pbf extract directly in
R. osmextract is a convenient option when the area is
available from a provider such as Geofabrik:
install.packages("osmextract")
osm_file <- osmextract::oe_get(
place = "Detroit, Michigan",
provider = "geofabrik",
download_directory = tempdir(),
force_download = FALSE
)
You can also download a known extract URL with base R:
osm_file <- file.path(tempdir(), "michigan-latest.osm.pbf")
utils::download.file(
"https://download.geofabrik.de/north-america/us/michigan-latest.osm.pbf",
osm_file,
mode = "wb"
)
noise_result <- get_noise_map(
x = buildings,
height_field = "Height",
canopy_height = canopy_height,
dem = dem,
osm_file = osm_file,
receiver = "grid",
resolution = 25,
run = TRUE,
java = 17
)
This uses your x buildings and ground preparation from
R, but asks NoiseModelling’s Import_OSM.groovy to create
the road network and traffic defaults from the OSM file.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.