Public
Edited
Dec 11
1 fork
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
data
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
statewide_snow_today
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
Insert cell
button(statewide_snow_today, `statewide_snow.json`)
Insert cell
Insert cell
Insert cell
multi_station_params = ({
state: "MN",
sdate: "2023-10-01",
edate: new Date().toISOString().split("T")[0],
elems: [
{
name: "snow",
interval: "dly", // Choose the appropriate interval (daily, monthly, etc.)
duration: "dly"
},
{
name: "snwd",
interval: "dly",
duration: "dly"
},
{
name: "snow",
interval: "dly",
duration: "std",
season_start: [10, 1],
reduce: "sum",
maxmissing: missing_days
}
],
meta: "name,uid,ll,elev,valid_daterange,sids",
output: "json"
})

Insert cell
Insert cell
statewide_snow_today = fetch(
`https://data.rcc-acis.org/MultiStnData?params=${JSON.stringify(
multi_station_params
)}`
)
.then((response) => response.json())
.then((data) =>
data.data
.map((record) => {
let current_data = record.data[record.data.length - 1];

return {
id: record.meta.uid,
name: record.meta.name,
lon: record.meta.ll ? record.meta.ll[0] : "undefined",
lat: record.meta.ll ? record.meta.ll[1] : "undefined",
elev: record.meta.elev,
//note that these metrics will occaisonally return a "T" for "Trace amounts"
current_snowfall: encode(current_data[0]),
current_snow_depth: encode(current_data[1]),
current_total_snowfall: encode(current_data[2]),
//if valid date range includes current date
active: record.meta.valid_daterange.some((date) => {
let today = new Date();
let yesterday = new Date();
yesterday.setDate(today.getDate() - 1);
return date[1] === today.toISOString().split("T")[0] ||
date[1] === yesterday.toISOString().split("T")[0]
}),
full_record: record
};
})
.filter((station) => station.active)
.filter((station) => station.lat != "undefined")
.filter((station) => station.current_total_snowfall != null)
)

Insert cell
Insert cell
Insert cell
single_station_elems = {
let elems = [];
selected_measurement.forEach((elem) => {
if (elem !== "total_snow") {
elems.push({
name: elem,
interval: "dly",
duration: "dly"
});
} else {
elems.push({
name: "snow",
interval: "dly",
duration: "std",
season_start: [10, 1],
reduce: "sum",
maxmissing: missing_days
});
}
});
return elems;
}

Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more