Mikroklima: výstupní API
Jako IPR chci přístup k měření a k informacím o měřících bodech mikroklimatu prostřednictvím API, abych nad daty mohl vyvinout mapu v ArcGIS a analyzovat historická data o měření.
Akceptační kritéria
- Jsou vytvořeny endpointy
microclimate/locations
,microclimate/points
amicroclimate/measurements
, dle zadání níže. - Jsou napojená data z db, dle mappingu níže.
- Zveřejněno jako open data včetně dokumentace.
Implementační poznámky
microclimate/measurements
Endpoint microclimate/measurements
bude obsahovat id lokality a měřícího bodu a příslušné měřené hodnoty v čase.
Zdrojem jsou data v tabulce v dp microclimate.masurements
(měření) a microclimate.sensor_devices_import
(párování bodů, senzorů a výšky měření), přikládám SQL jak získat správná data.
Mapping, Response Schema & Parameters
SQL
with points_hights as (
select
s.sensor_id,
s.point_id,
s.location_id,
unpivot.measure,
unpivot.hight_cm,
CASE
WHEN unpivot.measure = 'air_temp' THEN '°C'
WHEN unpivot.measure = 'air_hum' THEN '%'
WHEN unpivot.measure = 'pressure' THEN 'Pa'
WHEN unpivot.measure = 'wind_dir' THEN '°'
WHEN unpivot.measure = 'wind_impact' THEN 'km/h'
WHEN unpivot.measure = 'wind_speed' THEN 'km/h'
WHEN unpivot.measure = 'precip' THEN 'mm'
WHEN unpivot.measure = 'sun_irr' THEN 'lux'
WHEN unpivot.measure = 'soil_temp' THEN '°C'
WHEN unpivot.measure = 'water_pot' THEN 'kPa'
WHEN unpivot.measure = 'dendro_circ' THEN 'mm'
WHEN unpivot.measure = 'dendro_gain' THEN 'µm'
ELSE NULL
END AS unit
FROM
microclimate.sensor_devices_import s,
LATERAL (VALUES ('air_temp',s.air_temp),
('air_hum',s.air_hum),
('pressure',s.pressure),
('wind_dir',s.wind_dir),
('wind_impact',s.wind_impact),
('wind_speed',s.wind_speed),
('precip',s.precip),
('sun_irr',s.sun_irr),
('soil_temp',s.soil_temp),
('water_pot',s.water_pot),
('dendro_circ',s.dendro_circ),
('dendro_gain',s.dendro_gain))
unpivot(measure, hight_cm)
where hight_cm is not null),
measurements as (
select
m.sensor_id,
m.measured_at,
unpivot.measure,
unpivot.value
FROM
microclimate.measurements m,
LATERAL (VALUES ('air_temp',m.air_temp),
('air_hum',m.air_hum),
('pressure',m.pressure),
('wind_dir', CASE
WHEN m.wind_dir = 'N' THEN 0
WHEN m.wind_dir = 'NE' THEN 45
WHEN m.wind_dir = 'E' THEN 90
WHEN m.wind_dir = 'SE' THEN 135
WHEN m.wind_dir = 'S' THEN 180
WHEN m.wind_dir = 'SW' THEN 225
WHEN m.wind_dir = 'W' THEN 270
WHEN m.wind_dir = 'NW' THEN 315
ELSE NULL END),
('wind_impact',m.wind_impact),
('wind_speed',m.wind_speed),
('precip',m.precip),
('sun_irr',m.sun_irr),
('soil_temp',m.soil_temp),
('water_pot',m.water_pot),
('dendro_circ',m.dendro_circ),
('dendro_gain',m.dendro_gain))
unpivot(measure, value)
where value is not null)
select
measurements.sensor_id,
measurements.measured_at,
points_hights.point_id,
points_hights.location_id,
concat(measurements.measure, points_hights.hight_cm) as measure,
measurements.value,
points_hights.unit
from
measurements
join points_hights
on points_hights.sensor_id = measurements.sensor_id
and points_hights.measure = measurements.measure;
microclimate/measurements
Mapping pro Atribut | Mapping | Příklad | Datový typ | Nullable | Popis | Poznámka |
---|---|---|---|---|---|---|
measured_at | measured_at | 2022-11-06 04:16:32.628 +0100 | timestamptz | Nope | Datum pro které jsou metriky vypočtené | - |
point_id | point_id | 131 | int | Nope | Id měřícího bodu | První dvě čísla určují lokalitu |
location_id | location_id | 130 | int | Nope | Id lokality | Vždy tři číslice od 110 do 260 s odstupem 10 |
measure | measure | air_temp200 | string | Nope | Měřená veličina | Pro ipr je to naše metrika + výška měření proto concat v query |
value | value | 10.6 | float | Nope | Měřená hodnota | |
unit | unit | °C | string | Nope | Jednotka měření |
Reponse Schema
[
{
"measured_at": "2022-08-21T17:30:00.000Z",
"point_id": "131",
"location_id": "130",
"measure": "air_temp200",
"value": 20,
"unit": "°C"
}
]
Filtry
Bez filtru chci vrátit vždy právě jedno poslední měření pro kombinaci point_id a measure
chci mít možnost filtrovat pole:
-
measured_at
- umožnit filtr od-do včetně času -
location_id
apoint_id
measure
microclimate/locations
Endpoint microclimate/locations
bude obsahovat id lokality, id bodu a atributy těchto lokalit.
Zdrojem je tabulka microclimate.sensor_devices_import
.
Mapping, Response Schema & Parameters
sql
select distinct
location_id,
point_id,
location,
loc_description,
loc_orientation,
loc_surface,
point_name,
address
from microclimate.sensor_devices_import;
microclimate/locations
Mapping pro Atribut | Mapping | Příklad | Datový typ | Nullable | Popis | Poznámka |
---|---|---|---|---|---|---|
location_id | location_id | 130 | int | No | Id lokality | Vždy tři číslice od 110 do 260 s odstupem 10 |
point_id | point_id | 131 | int | No | Id měřícího bodu | Tři číslice, první dvě číslice odpovídají lokalitě |
location | location | Pražská Holešovická tržnice | string | No | Název lokality | |
loc_description | loc_description | areál bez zeleně | string | No | Popis lokality ve zkratce | Slouží pro porovnání měření z jednotlivých lokalit, např. areál bez zeleně vs se zelení |
loc_orientation | loc_orientation | východ-západ | string | No | Orientace lokality na světové strany | Slouží pro porovnání měření z jednotlivých lokalit, např. orientace východ-západ vs sever-jih |
loc_surface | loc_surface | asfalt/beton | string | No | Povrch lokality | Slouží pro porovnání měření z jednotlivých lokalit, např. asfalt vs zeleň |
point_name | point_name | Pražská tržnice osvětlení | string | No | Název měřícího bodu | |
address | address | Pražská tržnice | string | No | Název ulice/náměstí umístění |
Reponse Schema
Vnořená struktura, jedna lokace (location_id) má N bodů (point_id).
[
{
"location_id": "130",
"location": "Pražská Holešovická tržnice",
"loc_description": "areál bez zeleně",
"loc_orientation": "východ-západ",
"loc_surface": "asfalt/beton",
"address": "Pražská tržnice",
"points": [
{
"point_id": "131",
"point_name": "Pražská tržnice osvětlení"
}
]
}
]
Filtry
Default vrátí vše
chci mít možnost filtrovat pole:
location_id
microclimate/points
Endpoint microclimate/points
bude obsahovat id lokality, id bodu a atributy těchto bodů včetně výčtu měřených veličin v bodě.
Mapping, Response Schema & Parameters
microclimate/points
Mapping pro SQL
SELECT DISTINCT
s.point_id,
s.point_name,
s.location_id,
s."location",
s.loc_description,
s.loc_orientation,
s.loc_surface,
s.lat,
s.lng,
null as x_jtsk, -- bude doplneno na s.x_jtsk
null as y_jtsk, -- bude doplneno
null as elevation_m, -- bude doplneno
s.sensor_position,
s.sensor_position_detail,
concat(unpivot.measure, unpivot.hight_cm) as measure,
CASE
WHEN unpivot.measure = 'air_temp' THEN 'Teplota vzduchu'
WHEN unpivot.measure = 'air_hum' THEN 'Vlhkost vzduchu'
WHEN unpivot.measure = 'pressure' THEN 'Atmosférický tlak'
WHEN unpivot.measure = 'wind_dir' THEN 'Směr větru'
WHEN unpivot.measure = 'wind_impact' THEN 'Náraz větru'
WHEN unpivot.measure = 'wind_speed' THEN 'Rychlost větru'
WHEN unpivot.measure = 'precip' THEN 'Úhrn srážek'
WHEN unpivot.measure = 'sun_irr' THEN 'Sluneční záření'
WHEN unpivot.measure = 'soil_temp' THEN 'Teplota půdy'
WHEN unpivot.measure = 'water_pot' THEN 'Vodní potenciál půdy'
WHEN unpivot.measure = 'dendro_circ' THEN 'Obvod stromu'
WHEN unpivot.measure = 'dendro_gain' THEN 'Přírůstek obvodu stromu'
ELSE NULL
END AS measure_cz,
CASE
WHEN unpivot.measure = 'air_temp' THEN '°C'
WHEN unpivot.measure = 'air_hum' THEN '%'
WHEN unpivot.measure = 'pressure' THEN 'Pa'
WHEN unpivot.measure = 'wind_dir' THEN '°'
WHEN unpivot.measure = 'wind_impact' THEN 'km/h'
WHEN unpivot.measure = 'wind_speed' THEN 'km/h'
WHEN unpivot.measure = 'precip' THEN 'mm'
WHEN unpivot.measure = 'sun_irr' THEN 'lux'
WHEN unpivot.measure = 'soil_temp' THEN '°C'
WHEN unpivot.measure = 'water_pot' THEN 'kPa'
WHEN unpivot.measure = 'dendro_circ' THEN 'mm'
WHEN unpivot.measure = 'dendro_gain' THEN 'µm'
ELSE NULL
END AS unit
FROM
microclimate.sensor_devices_import s,
LATERAL (VALUES ('air_temp',s.air_temp),
('air_hum',s.air_hum),
('pressure',s.pressure),
('wind_dir',s.wind_dir),
('wind_impact',s.wind_impact),
('wind_speed',s.wind_speed),
('precip',s.precip),
('sun_irr',s.sun_irr),
('soil_temp',s.soil_temp),
('water_pot',s.water_pot),
('dendro_circ',s.dendro_circ),
('dendro_gain',s.dendro_gain))
unpivot(measure, hight_cm)
where hight_cm is not null;
microclimate/points
Mapping pro Atribut | Mapping | Příklad | Datový typ | Nullable | Popis |
---|---|---|---|---|---|
location_id | location_id | 130 | int | No | Id lokality |
point_id | point_id | 131 | int | No | Id měřícího bodu |
lat | lat | 50.098934 | float | No | Zeměpisná šířka |
lng | lng | 14.445023 | float | No | Zeměpisná délka |
x_jstk | x_jstk | -741926.70 | float | No | X souřadnice S-JTSK |
y_jtsk | y_jtsk | -1040946.85 | float | No | Y souřadnice S-JTSK |
measure | measure | air_temp_200 | string | No | Název měřené veličiny |
measure_cz | measure_cz | Teplota vzduchu | string | No | Český popis měřené veličin |
point_name | point_name | Pražská tržnice osvětlení | string | No | Název bodu |
location | location | Pražská Holešovická tržnice | string | No | Název lokality |
loc_description | loc_description | areál bez zeleně | string | No | Popis lokalit |
loc_orientation | loc_orientation | východ-západ | string | No | Orientace lokality |
loc_surface | loc_surface | asfalt/beton | string | No | Povrch lokalit |
sensor_position | sensor_position | veřejné osvětlení | string | No | Umisteni senzoru |
sensor_position_detail | sensor_position_detail | veřejné osvětlení 42533 | string | No | Detail umisteni senzoru |
Reponse Schema
Jeden bod (point_id) má N measures.
[
{
"point_id": "131",
"location_id": "130",
"point_name": "Pražská tržnice osvětlení",
"location": "Pražská Holešovická tržnice",
"loc_description": "areál bez zeleně",
"loc_orientation": "východ-západ",
"loc_surface": "asfalt/beton",
"lat": 50.098934,
"lng": 14.445023,
"x_jtsk": -741926.70,
"y_jtsk": -1040946.85,
"elevation_m": 184.3,
"measures":[
{
"measure": "air_temp200",
"measure_cz": "Teplota vzduchu",
"unit": "°C"
},
{
"measure": "air_hum200",
"measure_cz": "Vlhkost vzduchu",
"unit": "%"
}
],
"sensor_position": "veřejné osvětlení",
"sensor_position_detail": "veřejné osvětlení ve středu Tržnice"
}
]
Filtry
Default vrátí vše.
chci mít možnost filtrovat pole:
-
point_id
,location_id
Odkaz na aktualizovanou dokumentaci k Mikroklimatu zde.