Stofradar: Difference between revisions
No edit summary |
|||
Line 62: | Line 62: | ||
=== Correction for high humidity === | === Correction for high humidity === | ||
Humidity generally seems to cause an overestimation of PM measurements for measurements done with a "particle counting" type of PM sensor. | |||
The effect become really significant above approximately 70% humidity. | |||
An interesting idea is to try to compensate for this effect, since the luftdaten sensor has an onboard humidity-sensor. | |||
* | Some papers/links about this: | ||
* https://www.samenmetenaanluchtkwaliteit.nl/sites/default/files/2018-07/Status_SDS011_12juli18.pdf | |||
* https://www.researchgate.net/publication/320474792_Influence_of_Humidity_on_the_Accuracy_of_Low-Cost_Particulate_Matter_Sensors | |||
* https://github.com/opendata-stuttgart/meta/wiki/Luftfeuchte-Korrektur | |||
However, I see the following problems with the formulas and coefficient in the opendata-stuttgart link above: | |||
* it combines formulas and coefficients from different sources where relative humidity has different units. One paper seems to use an RH-value from 0 to 100, while another uses a kind of normalized relatively humidity (from 0 to 1). You cannot just use the same coefficients if the unit is different. | |||
* it claims a humidity correction for PM10 with coefficients that is not found in the source paper. | |||
=== Compositing === | === Compositing === |
Revision as of 07:42, 17 December 2018
Project Stofradar | |
---|---|
Visualizing atmospheric particulate matter concentrations on a map | |
Status | In progress |
Contact | bertrik |
Last Update | 2018-12-17 |
Introduction
This page is about creating a 'stofradar' image of atmospheric particulate matter concentrations based on the raw data measured by the luftdaten.info network, see www.stofradar.nl.
See also my DustSensor page.
luftdaten.info is an initiative to allow citizens to measure atmospheric particulate matter concentration using an inexpensive and easy to build sensor. They collect this data, calculate 5 minute and daily averages and publish it again as open data. The total number of sensors is about 5000 worldwide, most of them in Germany, Bulgaria, Belgium, Austria, Sweden. The Netherlands has about 100 sensors.
Future activities:
- get an OSM background map, once their export functionality works again, https://www.openstreetmap.org/export still broken .... :(
- fix fine alignment between map and dust overlay
- put all of the images from one day into an animation
- also create a map of a larger area, including germany (it has a lot of data points)
Visualisation
The general idea is to create an image, with a map at the background and the atmospheric particulate matter concentration overlaid on top.
Background map
Pages to investigate:
- https://wiki.openstreetmap.org/wiki/OSM_on_Paper
- http://maps.stamen.com/m2i/#toner-background/600:800/6/52.200/5.300
- https://developer.mapquest.com/documentation/open/static-map-api/v5/examples/basic/map-bounding-box/
What I need/want is to be able to specify the 'bounding box' and use a equirectangular projection , so I can easily map a pixel back to a latitude/longitude.
Interpolation
Since we only have data at a set of discrete points, the concentration at other points is estimated by combining data from all sensors using inverse distance weighting, in particular using the distance *squared* as the weighing factor in a weighted average. So a nearby sensor has a large effect and a far away sensor has very little effect, contributing only a little bit to the global average.
To calculate the distance2, I use a very simple approximation:
- determine the difference in longitude and latitude
- apply an 'aspect ratio' factor of cos(latitude) to the longitude difference. I use the latitude of the approximate middle of the netherlands (52.2 lat, 5.3 lon) to calculate this aspect ratio factor.
- distance2 = (difference latitude)2 + (difference longitude)2
A better way would be to use the 'great-circle-distance' and possibly even account for the fact that the earth is not perfectly spherical, but I like to start simple and this makes the calculation a lot faster.
PM10 values higher than 500 ug/m3 are simply ignored in the software.
Colour range
The colours I'm using (a kind of inverted spectral range from blue to red):
- 0 ug/m3: fully transparent white (#FFFFFF)
- 25 ug/m3: semi-transparent cyan (#00FFFF)
- 50 ug/m3: semi-transparent yellow (#FFFF00). This is the threshold for the maximum daily average in the Netherlands.
- 100 ug/m3: semi-transparent red (#FF0000)
- 200 ug/m3 and higher: semi-transparent purple (#FF00FF)
Values in between these levels are interpolated linearly with respect to the RGB colour value and alpha channel.
This scale is approximately logarithmic, with each step being twice as big as the previous one.
Correction for high humidity
Humidity generally seems to cause an overestimation of PM measurements for measurements done with a "particle counting" type of PM sensor. The effect become really significant above approximately 70% humidity.
An interesting idea is to try to compensate for this effect, since the luftdaten sensor has an onboard humidity-sensor. Some papers/links about this:
- https://www.samenmetenaanluchtkwaliteit.nl/sites/default/files/2018-07/Status_SDS011_12juli18.pdf
- https://www.researchgate.net/publication/320474792_Influence_of_Humidity_on_the_Accuracy_of_Low-Cost_Particulate_Matter_Sensors
- https://github.com/opendata-stuttgart/meta/wiki/Luftfeuchte-Korrektur
However, I see the following problems with the formulas and coefficient in the opendata-stuttgart link above:
- it combines formulas and coefficients from different sources where relative humidity has different units. One paper seems to use an RH-value from 0 to 100, while another uses a kind of normalized relatively humidity (from 0 to 1). You cannot just use the same coefficients if the unit is different.
- it claims a humidity correction for PM10 with coefficients that is not found in the source paper.
Compositing
I use imagemagick for this, for example:
composite -compose over -geometry 600x800 20180605_210100.json.png netherlands.png output.png
where netherlands.png is an 600x800 opaque black-and-white image of the map of the netherlands and 20180605_210100.json.png is an 60x80 image of dust concentrations with an alpha channel
Animation
GIF appears way too big, resulting in files of about 40 MB for 288 frames. When converted to APNG it is only slighty smaller at about 37 MB.
The webm format seems more suited, can be less than 1MB (lossy, VP9).
Conversion command:
cat ~/luftdatenmapper/tmp/netherlands/*.png |ffmpeg -f image2pipe -r 12 -i - -b:v 200k netherlands.webm
This results in an output file of about 650 kB.
Software
See the github page for the source code.