Receptors
The Receptors model generates and updates receptors inside a city polygon. Such a polygon can for example be created in QGIS or taken from an existing collection, such as the shape of a city district. Within the city polygon, four types of receptors are generated: (1) grid receptors, (2) road receptors, (3) building receptors, and (4) screen receptors. After this generation, two post-processing steps are performed. First, receptors inside buildings are removed. Second, receptors that are in too close proximity of each other are removed. An input parameter is used to define the desired distance between receptors. Once post-processing is finished, several collections are being watched for changes. The receptors are updated when a building, road, or screen changes.
Overview of computation steps
Generating grid receptors
For the grid receptors, first the bounding rectangle of the city polygon is determined. Next, a number of receptors is placed in an equilateral triangular pattern inside this bounding rectangle. Finally, receptors inside the bounding rectangle that are outside the city polygon are removed. An input parameter is used to define the spacing of the pattern, an example of which is shown.

Generating road receptors
For the road receptors, first the separate segments are used to generate receptors for. In multiple locations, four receptors are generated in a line: one far to the left of the road, one close to the left of the road, one close to the right of the road, and one far to the right of the road. Again an input parameter is used to define the distance between consecutive sets of four receptors, an example of which is shown. In addition to this algorithm, the distance between newly generated receptors and previously generated receptors for this road is calculated. If the distance is less than the set spacing, then the newly generated receptors are removed.

Generating building receptors
For building receptors, the separate segments are also used to generate receptors for. The algorithm is such that receptors will never be on the corners of a building, since this could result in unwanted effects from the models which use these receptors (specifically the air and noise model). As before, an input parameter is used to define the distance between consecutive receptors, an example of which is shown.

Generating screen receptors
For screen receptors, part of the algorithm is identical to the algorithm for generating building receptors. By generating receptors both clockwise (which would normally result in receptors outside a building) and counter-clockwise (which would normally result in receptors inside a building), receptors are generated on both sides of a sound screen.
Post-processing receptors
When all receptors have been generated, post-processing takes place. Removing receptors from buildings is done with a parallel loop over all buildings, inside of which a loop over all receptors takes place. Testing whether a receptor is inside a building requires the Crossing Number method (for determining whether a point is inside a polygon), which is relatively slow. To speed up the calculation, the bounding boxes of the buildings have been precalculated and the test whether a receptor is inside a building is only performed if the receptor is inside the bounding box.
Removing receptors that are in too close proximity of each other uses parallelization as well. First, irrelevant receptors are determined with a parallel loop over all receptors, inside of which a second loop over all other receptors takes place. If no other receptor is too close, then the receptor is irrelevant and excluded from further consideration. Second, there is a sequential loop over all remaining receptors, inside of which a second loop over all other remaining receptors takes place. If a receptor from the second loop is too close, then that receptor is removed.
Updating receptors
When a relevant object changes, receptors have to be updated. This could be a building, road, or screen change, including the removal of an object. There are several steps that are performed. First, the change is treated as if the object was removed. This means that all receptors that belong to this specific object (generated as described above) are removed. Moreover, if the object is a building, then new grid receptors are generated to fill the empty space that has now been created. The newly generated grid receptors are removed if they are inside another building or too close to existing receptors.
Second, if the object was not removed but changed or added, new receptors are generated for this specific object (generated as described above). Again, the newly generated object receptors are removed if they are inside another building. Moreover, if the object is a building, then all previously generated receptors that are inside this specific building are removed. Finally, the newly generated object receptors are removed if they are too close to existing receptors.
Output
The output is saved in two collections, "air_receptors" and "nois_receptors", which are generated with the same number of receptors in the same locations. For each receptor, the following columns are filled:
- id: the globally unique identifier of this receptor.
- X: the x-coordinate of the receptor.
- Y: the y-coordinate of the receptor.
- H: the height above the ground of the receptor.
- OBJECT_ID: the number of this receptor.
- OBJECT_TYPE: indicating a grid (1), road (2), building (3), or screen (4) receptor.
- REF_KEY: the globally unique identifier of the road, building, or screen this receptor belongs to, if applicable.
- REF_OBJECT_ID: the number of the road, building, or screen this receptor belongs to, if applicable.
- DISABLED: whether this receptor should still be removed from the collection.
Parameters and settings
Name | Data type | Default value | Description |
---|---|---|---|
DimensionID | Integer | 1 | DimensionID to filter roads on: receptors are only generated for roads with this DimensionID. |
RemoveReceptors | Boolean | False | Whether to remove existing receptors: receptors are only generated if existing receptors are removed. |
SpacingProximity | Integer | 10 | Disabling distance for the receptors: if two receptors are within this distance of each other, one of them is removed. |
ReceptorSpacingGrid | Integer | 50 | Spacing distance for the grid receptors: receptors are placed at this distance from each other for each type separately. |
ReceptorSpacingBuilding | Integer | 50 | Spacing distance for the building receptors: receptors are placed at this distance from each other for each type separately. |
ReceptorSpacingRoad | Integer | 50 | Spacing distance for the road receptors: receptors are placed at this distance from each other for each type separately. |
ReceptorSpacingScreen | Integer | 50 | Spacing distance for the screen receptors: receptors are placed at this distance from each other for each type separately. |
CityPolygon | String | "" | Polygon in which to place receptors: right click on the parameter name, click on "Advanced", click on "Import polygon" to load from a file. |
JSON
[{"Name":"DimensionID","Value":1,"Type":1},
{"Name":"RemoveReceptors","Value":false,"Type":3},{"Name":"SpacingProximity","Value":10,"Type":1,"Unit":""},{"Name":"ReceptorSpacingGrid","Value":50,"Type":1},{"Name":"ReceptorSpacingBuilding","Value":50,"Type":1},{"Name":"ReceptorSpacingRoad","Value":50,"Type":1},{"Name":"ReceptorSpacingScreen","Value":50,"Type":1},
{"Name":"CityPolygon","Value":""}]
Literature
For more information on the generation of receptors for air and noise, refer to this document: "Geluidmodule weg- en railverkeer Urbis: conceptuele en functionele beschrijving", PG/VGZ/2002.219, TNO report.