This is a QGIS plugin, which implements NoiseModelling (https://github.com/Universite-Gustave-Eiffel/NoiseModelling) and help estimate the health risks posed by (road traffic) noise.
This plugin can
At this moment, the operation of the plugin with NoiseModelling v4.0.2 is confirmed. (Not with v4.0.4)
This plug-in complies with the GPL v3 license. Please see the LICENSE file for details.
License of the external program used by this plug-in:
Note: This service uses the API function of the e-Stat (e-Stat), but the content of the service is not guaranteed by the government.
Install QGIS (version >= 3.22.0) and install the plugin according to the following instruction. Note that to calculate the sound levels, NoiseModelling (https://noise-planet.org/noisemodelling.html) and Java implementation are needed.
The installer (installer/hrisk-setup.exe) will help install required components including the present plugin.
Execute the installer (installer/hrisk-setup.exe).
The program can also install this plugin, as well as all the required components.
Environmental variables that are needed to execute NoiseModelling are also set.
Install from QGIS repo or download all the files in the repository (https://gitlab.com/jtagusari/hrisk-noisemodelling) and save them in the QGIS plugin folder.
C:\Program Files\NoiseModelling)NOISEMODELLING_HOME to the installed folderC:\Program Files\Java)JAVA_FOR_NOISEMODELLING to the installed folder. Note that %JAVA_FOR_NOISEMODELLING%\bin\java.exe exists.The following is a tutorial of this plugin.
The results are in tutorial directory.
Execute Road centerline (OSM) algorithm (in Fetch geometries group), with following parameters (unspecified parameters are default values):
FETCH_EXTENT: 141.300,141.305,43.125,43.130 [EPSG:4326]TARGET_CRS: EPSG: 32654BUFFER: 200.0 (m)Execute Building (OSM) algorithm with following parameters:
FETCH_EXTENT: 141.300,141.305,43.125,43.130 [EPSG:4326]TARGET_CRS: EPSG: 32654BUFFER: 200.0 (m)Execute Elevation points (SRTM) algorithm with following parameters. Note that user id and password of Earthdata Login (https://urs.earthdata.nasa.gov/users/new) is needed before the execution.
FETCH_EXTENT: 141.300,141.305,43.125,43.130 [EPSG:4326]TARGET_CRS: EPSG: 32654BUFFER: 200.0 (m)USERNAME: (registered user name)PASSWORD: (registered password)Note that the roads and buildings are also obtained with following procedures.
native:extenttolayer using the above FETCH_EXTENT as INPUTnative:reprojectlayer using the output of the previous procedure as INPUT and the above TARGET_CRS as TARGET_CRSnative:buffer using the output of the previous procedure as INPUT and the above BUFFER as DISTANCEquickosm:downloadosmdataextentquery using highway as KEY (if for buildings, building as KEY) and the extent of the obtained rectangle as the EXTENTnative:reprojectlayer using the output of the previous procedure as INPUT and the above TARGET_CRS as TARGET_CRSnative:dissolve using the output of the previous procedure as INPUT and the all the fields as FIELDnative:multiparttosingleparts using the output of the previous procedure as INPUTPK,LV_d, LV_e, LV_n, MV_d, MV_e, MV_n, HV_d, HV_e, HV_n, LV_spd_d, LV_spd_e, LV_spd_n, MV_spd_d, MV_spd_e, MV_spd_n, HV_spd_d, HV_spd_e, HV_spd_n, LWd63, LWd125, LWd250, LWd500, LWd1000, LWd2000, LWd4000, LWd8000, LWe63, LWe125, LWe250, LWe500, LWe1000, LWe2000, LWe4000, LWe8000, LWn63, LWn125, LWn250, LWn500, LWn1000, LWn2000, LWn4000, LWn8000, pvmt, temp_d, temp_e, temp_n, ts_stud, pm_stud, junc_dist, slope, way)PK,height)For roads of which osm_id are 35099042 and 35099047, set the following traffic volumes:
LV_d: 500 / LV_e: 200 / LV_n : 60HV_d: 70 / HV_e: 10 / HV_n : 10For a road of which osm_id is 133439796, set the following traffic volumes:
LV_d: 130 / LV_e: 0 / LV_n : 0HV_d: 5 / HV_e: 0 / HV_n : 0Execute Building facade algorithm in Set receiver group, with the following parameters:
BUILDING: (fetched features representing the buildings)SOURCE: (fetched features representing the roads)DELTA: 2.0The user can fetch the geometries of roads and buildings using algorithms in Fetch geometries group.
In Japan, precised data (including population) can be obtained using algorithms in Fetch geometries (Ja) group.
The algorithms are:
Fetch geometries group
fetchosmroad.py): fetch road geometries from OpenStreetMap. QuickOSM is needed.fetchosmbuilding.py): fetch building geometries from OpenStreetMap. QuickOSM is needed.fetchsrtmdem.py): fetch elevation-points geometries from Shuttle Radar Topography Mission dataset. User id and password of Earthdata Login (https://urs.earthdata.nasa.gov/users/new) is needed.Fetch geometries (Ja) group
fetchjaroad.py): fetch road geometries from vector-tile map provided by the GSI of Japanfetchjabuilding.py): fetch building geometries from vector-tile map provided by the GSI of Japanfetchjadem.py): fetch elevation-points geometries from vector-tile map provided by the GSI of Japanfetchjapop.py): fetch 250m-mesh population from the ESTAT-API of Japanfetchjageom.py): fetch all geometries listed above (and also set receivers, if specified)Note that QuickOSM plugin (https://docs.3liz.org/QuickOSM/) is needed to fetch geometries from OpenStreetMap.
To fetch geometries from Shuttle Radar Topography Mission, user id and password of Earthdata Login (https://urs.earthdata.nasa.gov/users/new) is needed.
Before calculating sound levels, the user must set traffic volumes (light/medium/heavy vehicles during day/evening/night) or the sound power levels, as the fields of road layer.
Required fields are already set in the layer fetched if the features are fetched using the algorithms in Fetch geometries group (previous procedure).
Or, the user can manually set the fields using algorithms in Initialize features group.
The algorithms in Initialize features group are:
initroad.py): initialize linestrings as roadsinitroademissionfromtraffic.py): calculate the emission level (sound power level) using the traffic volumeinitbuilding.py): initialize polygons as buildingsinitelevationpoint.py): initialize points as elevation pointsinitgroundabsorption.py): initialize polygons as ground absorptionTo set receiver points, algorithms in Set receivers group are available.
The algorithms, employing NoiseModelling algorithms, set receiver points, such as at the facades of the buildings and at delaunay grid points.
The algorithms in Set receiver group are:
receiverfacade.py): create receivers at building facadesreceiverdelaunaygrid.py): create receivers at delaunay grid pointsreceiverregulargrid.py): create receivers at regular grid pointsThe sound levels at receiver points can be calculate using algorithms stored in Predict sound level group, employing NoiseModelling.
The algorithms in Predict sound level group are:
noisefromtraffic.py): calculate the sound levels from traffic volumenoisefromemission.py): calculate the sound levels from the sound power levelThe user can assign the number of residents of each building and estimate health risks posed by the noise, using algorithms in Evaluate health risk group.
The algorithms in Evaluate health risk group are:
estimatepopulationofbuilding.py): estimate the number of residents for each building using a raster representing the populationestimatepopulationofbuildingplg.py): estimate the number of residents for each building using polygons representing the populationestimatelevelofbuilding.py): estimate the sound level for each buildingestimateriskofbuilding.py): estimate the health risks for each buildingThere are several scripts for developers, as follows:
algabstract: an abstract class inheriting QgsProcessingAlgorithm, defining attributes and methods
PARAMETERS: to set UIs.NOISEMODELLING: to use NoiseModelling, such as paths and arguments.initParameters(self) -> None: convert PARAMETERS attributes to UIs.initNoiseModellingPath(self, paths:dict) -> None: set NoiseModelling paths.initNoiseModellingArg(self, parameters:dict, context: QgsProcessingContext, feedback:QgsProcessingFeedback) -> None: initialize NoiseModelling arguments from UIs.addNoiseModellingArg(self, args:dict) -> None: add NoiseModelling arguments.saveVectorLayer(self, vector_layer: QgsVectorLayer, path: str) -> None): save a vector layer.saveRasterLayer(self, raster_layer: QgsVectorLayer, path: str) -> None): save a raster layer.execNoiseModellingCmd(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback) -> None: exec NoiseModelling.streamNoiseModellingCmd(self, cmd: str, feedback: QgsProcessingFeedback) -> None: stream NoiseModellingimportNoiseModellingResultsAsSink(self, parameters: dict, context: QgsProcessingContext, attribute: str, path: str) -> None: import NoiseModelling results as a sinkfetchabstract: an abstract class inheriting algabstract, defining attributes and methods
FETCH_AREA: the fetch area (QgsReferencedRectangle)TILEMAP_ARGS: arguments for tile-mapOSM_ARGS: arguments for OpenStreetMapWEBFETCH_ARGS: arguments for fetching geometries from web without tile-map or OpenStreetMapinitUsingCanvas(self) -> None: set FETCH_EXTENT and TARGET_CRS to the current canvas settingsgetUtmCrs(self, lng: float, lat: float) -> QgsCoordinateReferenceSystem: get Universal Transverse Melcator CRSsetFetchArea(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback, new_crs: QgsCoordinateReferenceSystem = None) -> None: set the FETCH_AREA attributefetchAreaAsVectorLayer(self) -> QgsVectorLayer get a vector layer from the FETCH_AREA attributesetTileMapArgs(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback, geom_type: str = None) -> None: set the arguments for tile maps.setOsmArgs(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback, geom_type: str=None) -> None: set the arguments for OpenStreetMap.setWebFetchArgs(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback) -> None: set the arguments for fetching geometries from web (but not tile maps or OpenStreetMap)fetchFeaturesFromTile(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback) -> None: fetch features from tile mapsfetchFeaturesFromOsm(self, parameters:dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback) -> None: fetch features from OpenStreetMapfetchFeaturesFromWeb(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback) -> None: fetch features from web (but not tile maps or OpenStreetMap). Note that the fetched features are stored just as filesmodifyFeaturesFromTile(self, fts: QgsVectorLayer | QgsRasterLayer, z: int, tx: int, ty: int)- > QgsVectorLayer | QgsRasterLayer: modify features fetched from tile mapsdissolveFeatures(self, fts: QgsVectorLayer) -> QgsVectorLayer: dissolve featurestransformToTargetCrs(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback, fts: QgsVectorLayer) -> QgsVectorLayer: transform features (to the TARGET_CRS)initabstract: an abstract class inheriting algabstract, defining attributes and methods
FIELDS_ADD: the fields to be initializedFIELDS_INIT: the existing fields and FIELDS_ADDFIELDS_FROM: whether each field existed or in FIELDS_ADDsetFields(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback) -> None: set FIELDS_INIT and FIELDS_FROMcreateVectorLayerAsSink(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback) -> str: create a sink using the fields and return dest_idnoiseabstract: an abstract class inheriting algabstract, defining attributes and methods
BLDG_LEVEL_ARGS: arguments to assign the sound level to each buildingISOSURFACE_ARGS: arguments to create isosurfacePROC_RESULTS: results of the calculationoutputWpsArgs(self, parameters:dict, context:QgsProcessingContext, extent_rec: QgsReferencedRectangle) -> str: output a polygon (sink and output the dest_id) that stores arguments of the calculationcmptBuildingLevel(self, parameters: dict, context: QgsProcessingContext, feedback: QgsProcessingFeedback, bldg_layer: QgsVectorLayer, rcv_layer: QgsVectorLayer) -> None: create sound-level-assigned buildingsworldmesh.py: used for obtaining the world mesh code (from Research Institute for World Grid Squares)Delete the files and folders in JAVA_FOR_NOISEMODELLING and NOISEMODELLING_HOME paths and delete the environmental variables.