Commit 8d8108b9 authored by alain's avatar alain 🐙

update teom source

parent a87e148c
import luchtmeetnet from "./sources/luchtmeetnet"
import teom from "./sources/teom"
import holu from "./sources/holu-rivm"
import holu from "./sources/holu"
//import holu from "./sources/holu-rivm"
//import sentinel from "./sources/sentinel"
const colors = {
......@@ -28,14 +29,14 @@ export const dataGroups = [
35: { label: "Matig", color: colors.yellow },
70: { label: "Onvoldoende", color: colors.orange },
105: { label: "Slecht", color: colors.red },
150: { label: "Zeer slecht", color: colors.purple },
150: { label: "Zeer slecht", color: colors.purple }
},
formula: "PM25",
tooltip: "<p>PM2.5 is een verzamelnaam voor zwevende, inhaleerbare deeltjes met een maximale doorsnede van 0,0025 millimeter. Doordat PM2.5 nog kleiner is dan PM10 kunnen deze deeltjes dieper doordringen in de longen en zijn ze schadelijker voor de gezondheid.</p><p>De wettelijke norm is een jaargemiddelde van 25 (μg/m3).</p>",
more: "https://www.luchtmeetnet.nl/uitleg",
type: "StationLayer",
sources: [
luchtmeetnet,
teom,
holu
]
},
......@@ -50,9 +51,8 @@ export const dataGroups = [
55: { label: "Matig", color: colors.yellow },
100: { label: "Onvoldoende", color: colors.orange },
165.5: { label: "Slecht", color: colors.red },
250: { label: "Zeer slecht", color: colors.purple },
250: { label: "Zeer slecht", color: colors.purple }
},
formula: "PM10",
tooltip: "<p>PM10 is een verzamelnaam voor zwevende, inhaleerbare deeltjes met een maximale doorsnede van 0,01 milimeter.</p><p>De wettelijke norm is een jaargemiddelde van 40 (μg/m3). Daarnaast mag het daggemiddelde jaarlijks maximaal 35 keer hoger zijn dan 50 (μg/m3).</p>",
more: "https://www.luchtmeetnet.nl/uitleg",
type: "StationLayer",
......@@ -63,6 +63,26 @@ export const dataGroups = [
]
},
"ps": {
id: "ps",
label: "totaal stof",
unit: " μg/m3",
range: [0, 250],
legend: {
0: { label: "Goed", color: colors.green },
55: { label: "Matig", color: colors.yellow },
100: { label: "Onvoldoende", color: colors.orange },
165.5: { label: "Slecht", color: colors.red },
250: { label: "Zeer slecht", color: colors.purple }
},
tooltip: "<p>Deze monitor meet de totale hoeveelheid stof. De Engelse benaming voor deze metingen is Total Suspended Particles ‘TSP”. Tientallen jaren geleden bestonden er normen voor deze metingen. Omdat een gedeelte van dit stof te groot is om in te ademen is deze wetgeving later omgezet in PM10 normen. Van deze TSP metingen is bekend dat het een relatie kan leggen met klachten over zichtbare stofoverlast.</p>",
more: "",
type: "StationLayer",
sources: [
teom
]
},
"no2": {
id: "no2",
label: "stikstofdioxide (NO2)",
......@@ -73,9 +93,8 @@ export const dataGroups = [
70: { label: "Matig", color: colors.yellow },
140: { label: "Onvoldoende", color: colors.orange },
200: { label: "Slecht", color: colors.red },
250: { label: "Zeer slecht", color: colors.purple },
250: { label: "Zeer slecht", color: colors.purple }
},
formula: "NO2",
tooltip: "<p>NO2 ontstaat uit een reactie tussen stikstofmonoxide en ozon. Het weer en de verkeersdrukte hebben grote invloed op de concentratie.</p><p>De wettelijke norm is een jaargemiddelde van 40 (μg/m3).<p>",
more: "https://www.luchtmeetnet.nl/uitleg",
type: "StationLayer",
......@@ -94,9 +113,8 @@ export const dataGroups = [
100: { label: "Matig", color: colors.yellow },
200: { label: "Onvoldoende", color: colors.orange },
240: { label: "Slecht", color: colors.red },
300: { label: "Zeer slecht", color: colors.purple },
300: { label: "Zeer slecht", color: colors.purple }
},
formula: "O3",
tooltip: "<p>Ozon (O3) wordt niet rechtstreeks uitgestoten, maar wordt gevormd uit stikstofoxiden, vluchtige organische stoffen en koolmonoxide. De concentratie ozon is vooral afhankelijk van het weer.</p><p>In heel Europa wordt de bevolking gewaarschuwd bij ozonconcentraties boven 180 (μg/m3). Een concentratie van 240 (μg/m3) is de Europese alarmdrempel.</p>",
more: "https://www.luchtmeetnet.nl/uitleg",
type: "StationLayer",
......@@ -123,7 +141,6 @@ export const dataGroups = [
// 105: { label: "Slecht", color: colors.red },
// 150: { label: "Zeer slecht", color: colors.purple },
// },
// formula: "PM25",
// tooltip: "",
// more: "https://www.luchtmeetnet.nl/uitleg",
// type: "HeatmapLayer",
......
import { addMissingHours } from "../../data-on-a-map-app/src/util/data"
import { addMissingHours, inArray } from "../../data-on-a-map-app/src/util/data"
export default {
name: "teom",
......@@ -10,36 +10,52 @@ export default {
try {
const allResponse = await fetch(`https://data.waag.org/api/holu/ggd_teom`)
const all = await allResponse.json()
const latestResponse = await fetch(`https://data.waag.org/api/holu/ggd_teom/recent`)
const latest = await latestResponse.json()
const data = all.map(sensor => {
let allowedSensorTypes = []
switch(parameter) {
case "pm10" :
allowedSensorTypes = ["TATA", "TEOM", "TEOM_TSP"]
break;
case "pm25" :
allowedSensorTypes = ["TATA"]
break;
case "ps" :
allowedSensorTypes = ["TEOM_TSP"]
break;
}
const data = all
.filter(sensor => {
return inArray(allowedSensorTypes, sensor.sensor_type)
})
.map(sensor => {
let sensorData = latest.find(o => o.id === sensor.id)
const sensorDataReturn = {
id: sensor.id.toString(),
name: `${sensor.sensor_type}: ${sensor.name}`,
source: "teom",
type: sensor.sensor_type,
coordinates: sensor.coordinates,
mean: null,
max: null
}
if(sensorData) {
return {
id: sensor.id.toString(),
name: "TEOM-sensor: " + sensor.name,
source: "teom",
coordinates: sensor.coordinates,
mean: sensorData[`${parameter}_mean`],
max: sensorData[`${parameter}_max`]
}
sensorDataReturn.mean = sensorData[`${parameter}_mean`]
sensorDataReturn.max = sensorData[`${parameter}_max`]
} else {
return {
id: sensor.id.toString(),
name: "TEOM-sensor: " + sensor.name + " (geen data)",
source: "teom",
coordinates: sensor.coordinates,
mean: null,
max: null
}
sensorDataReturn.name = sensorDataReturn.name + " (geen data)"
}
return sensorDataReturn
})
return data
} catch (error) {
console.log(error)
}
......@@ -48,23 +64,26 @@ export default {
detail: async function getDetailTeom(station, parameter, start, end) {
try {
const stationMeta = {
type: station.type,
name: station.name,
description: "Op deze locatie wordt gemeten met monitoren die voorheen (tot 2008) in het meetnet werden gebruikt, de zogenaamde TEOM. Het zijn monitoren die zeer snel reageren op wisselende PM concentraties. Ze benaderen de nauwkeurigheid van de officiële meetapparatuur maar voldoen echter niet aan de huidige Europese eisen voor het doen van officiële metingen. Elke 10 seconden registreert deze meter een waarde. Alle meetwaarden zijn opgehoogd met een factor 1,3 omdat de TEOM meter een onderschatting van gemiddeld 30% kent."
}
if(station.type === "TATA") stationMeta.description = "Meetstation Bosweg is een industriestation. Op deze locatie, op enkele tientallen meters van de terreingrens Tata Steel, wordt de luchtkwaliteit voor een belangrijk deel bepaald door de uitstoot van de industrie. Tata Steel meet hier de luchtkwaliteit met meetapparatuur die gelijk is aan die van de officiële meetstations op luchtmeetnet.nl.<br><br>bron: Tata Steel"
if(parameter === "ps") stationMeta.description = "Op deze locatie wordt gemeten met monitoren die voorheen (tot 2008) in het meetnet werden gebruikt, de zogenaamde TEOM. Het zijn monitoren die zeer snel reageren op wisselende PM concentraties.. Elke 10 seconden registreert deze meter een waarde. Deze monitor meet de totale hoeveelheid stof. De Engelse benaming voor deze metingen is Total Suspended Particles ‘TSP”. Tientallen jaren geleden bestonden er normen voor deze metingen. Omdat een gedeelte van dit stof te groot is om in te ademen is deze wetgeving later omgezet in PM10 normen. Van deze TSP metingen is bekend dat het een relatie kan leggen met klachten over zichtbare stofoverlast."
const response = await fetch(`https://data.waag.org/api/holu/ggd_teom/hourly?sensor_id=${station.id}&start=${start}&end=${end}`)
const responseData = await response.json()
const conformedData = responseData.map(m => {
return {
timestamp: new Date(m.time).getTime(),
value: m["pm10_mean"],
value: m[`${parameter}_mean`],
}
})
const data = addMissingHours(conformedData)
return { stationMeta, data }
} catch (error) {
console.log(error)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment