{"id":8157,"date":"2023-12-20T14:22:22","date_gmt":"2023-12-20T19:22:22","guid":{"rendered":"https:\/\/weather.umd.edu\/wordpress\/?page_id=8157"},"modified":"2023-12-20T14:22:25","modified_gmt":"2023-12-20T19:22:25","slug":"mdmesonet-compare","status":"publish","type":"page","link":"https:\/\/weather.umd.edu\/wordpress\/mdmesonet-compare\/","title":{"rendered":"Maryland Mesonet Comparison Tool &#8211; Experimental Page"},"content":{"rendered":"        \r\n        <script src=\"https:\/\/code.highcharts.com\/highcharts.js\"><\/script>\r\n        <script src=\"https:\/\/code.highcharts.com\/modules\/boost.js\"><\/script>\r\n        <script src=\"https:\/\/code.highcharts.com\/highcharts-more.js\"><\/script>\r\n        <script src=\"https:\/\/code.highcharts.com\/stock\/highcharts-more.js\"><\/script>\r\n        <script src=\"https:\/\/code.highcharts.com\/modules\/accessibility.js\"><\/script>\r\n\r\n        <form name='data-selector' onsubmit=\"return getTimeRange()\" style='clear:both'>\r\n\r\n        <script>\r\n        \/\/ Define functions for stations and fields\r\n        function toggleStation(source) {\r\n            var checkboxes = document.getElementsByName('station');\r\n            for (var i = 0; i < checkboxes.length; i++) {\r\n                if (checkboxes[i] != source)\r\n                checkboxes[i].checked = source.checked;\r\n            }\r\n        }\r\n        function uncheckStation() {\r\n            var checkboxes = document.getElementsByName('station');\r\n            document.getElementById('allStation').checked = true\r\n            for (var i = 0; i < checkboxes.length; i++) {\r\n                if (!checkboxes[i].checked) {\r\n                    document.getElementById('allStation').checked = false\r\n                }\r\n            }\r\n        }\r\n        \r\n        function toggleField(source) {\r\n            var checkboxes = document.getElementsByName('field');\r\n            for (var i = 0; i < checkboxes.length; i++) {\r\n                if (checkboxes[i] != source)\r\n                checkboxes[i].checked = source.checked;\r\n            }\r\n        }\r\n        function uncheckField() {\r\n            var checkboxes = document.getElementsByName('field');\r\n            document.getElementById('allField').checked = true\r\n            for (var i = 0; i < checkboxes.length; i++) {\r\n                if (!checkboxes[i].checked) {\r\n                    document.getElementById('allField').checked = false\r\n                }\r\n            }\r\n        }\r\n        <\/script>\r\n\r\n<br>\r\n\r\n        <!-- Create checkboxes, use functions above when clicked-->\r\n            <div class=\"formrow\">\r\n                <div class=\"formcol\" id='stationselect'>\r\n                    <input id=\"allStation\" type=\"checkbox\" name=\"station\" onclick=\"toggleStation(this);\" \/><b>Select All<\/b><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"baltimore\" onclick=\"uncheckStation();\">Baltimore<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"cambridge\" onclick=\"uncheckStation();\">Cambridge<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"chestertown\" onclick=\"uncheckStation();\">Chestertown<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"clarksville\" onclick=\"uncheckStation();\">Clarksville<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"clearspring\" onclick=\"uncheckStation();\">Clear Spring<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"collegepark\" onclick=\"uncheckStation();\">College Park<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"goldsboro\" onclick=\"uncheckStation();\">Goldsboro<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"easton\" onclick=\"uncheckStation();\">Easton<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"frostburg\" onclick=\"uncheckStation();\">Frostburg<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"keedysville\" onclick=\"uncheckStation();\">Keedysville<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"princessanne\" onclick=\"uncheckStation();\">Princess Anne<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"quantico\" onclick=\"uncheckStation();\">Quantico<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"ridgely\" onclick=\"uncheckStation();\">Ridgely<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"salisbury\" onclick=\"uncheckStation();\">Salisbury<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"stevensville\" onclick=\"uncheckStation();\">Stevensville<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"towson\" onclick=\"uncheckStation();\">Towson<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"uppermarlboro\" onclick=\"uncheckStation();\">Upper Marlboro<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"waldorf\" onclick=\"uncheckStation();\">Waldorf<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"westminster\" onclick=\"uncheckStation();\">Westminster<\/input><br>\r\n                    <input type=\"checkbox\" name=\"station\" value=\"wyemills\" onclick=\"uncheckStation();\">Wye Mills<\/input><br>\r\n                <\/div>\r\n                <div class=\"formcol\" id='fieldselect'>\r\n                    <input id=\"allField\" type=\"checkbox\" name=\"field\" onclick=\"toggleField(this);\" \/><b>Select All<\/b><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Air_Temperature_Avg\" onclick=\"uncheckField();\">Temperature<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"DP_2m_Avg\" onclick=\"uncheckField();\">Dew Point<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Relative_Humidity\" onclick=\"uncheckField();\">Relative Humidity<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"SLP\" onclick=\"uncheckField();\">Sea Level Pressure<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Rain_ICA_Tot\" onclick=\"uncheckField();\">Rainfall<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"WS_Mean\" onclick=\"uncheckField();\">Wind Speed<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Wind_Speed_Max\" onclick=\"uncheckField();\">Wind Gust<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"WD_Mean\" onclick=\"uncheckField();\">Wind Direction<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Snow_Depth_Avg\" onclick=\"uncheckField();\">Snow Depth<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Solar_Radiation_Avg\" onclick=\"uncheckField();\">Solar Radiation<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Soil_Moisture_5cm\" onclick=\"uncheckField();\">5cm Soil Moisture<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Soil_Moisture_10cm\" onclick=\"uncheckField();\">10cm Soil Moisture<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Soil_Moisture_20cm\" onclick=\"uncheckField();\">20cm Soil Moisture<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Soil_Moisture_50cm\" onclick=\"uncheckField();\">50cm Soil Moisture<\/input><br>\r\n                    <input type=\"checkbox\" name=\"field\" value=\"Soil_Moisture_100cm\" onclick=\"uncheckField();\">100cm Soil Moisture<\/input><br>\r\n                <\/div>\r\n            <\/div>\r\n            \r\n            \r\n<br>\r\n            <!-- Start\/end time buttons and Submit button -->\r\n            <label for=\"starttime\">Select start time<\/label>\r\n            <input type=\"datetime-local\" id=\"starttime\" name=\"starttime\">\r\n\r\n            <label for=\"endtime\">Select end time<\/label>\r\n            <input type=\"datetime-local\" id=\"endtime\" name=\"endtime\">\r\n            <input type=\"submit\">\r\n            <input id=\"smoothing\" type=\"checkbox\" name=\"smoothing\" value=\"smoothing\">Smoothing (avg over \r\n            <input type=\"number\" id=\"smoothingLength\" name=\"smoothingLength\" min=\"1\" max=\"60\" style=\"width: 40px\">\r\n            min)<\/input>\r\n        <\/form>\r\n        <div id='container-wrapper'>\r\n            <div id=\"container1\" style=\"height:400px; width:100%;display:none\"><\/div>\r\n            <div id=\"container2\" style=\"height:400px; width:100%;display:none\"><\/div>\r\n            <div id=\"container3\" style=\"height:400px; width:100%;display:none\"><\/div>\r\n            <div id=\"container4\" style=\"height:400px; width:100%;display:none\"><\/div>\r\n            <div id=\"container5\" style=\"height:400px; width:100%;display:none\"><\/div>\r\n            <div id=\"container6\" style=\"height:400px; width:100%;display:none\"><\/div>\r\n            <div id=\"container7\" style=\"height:400px; width:100%;display:none\"><\/div>\r\n        <\/div>\r\n\r\n        <style>\r\n            #container-wrapper {\r\n                display: grid;\r\n                grid-template-columns: repeat(2, 1fr);\r\n                grid-template-rows: repeat(3, 1fr);\r\n                \/* gap: 20px; *\/\r\n                \/* margin: 20px; *\/\r\n            }\r\n\r\n            .formcol {\r\n                float: left;\r\n                width: 50%;\r\n            }\r\n\r\n            \/* Clear floats after the columns *\/\r\n            .formrow {\r\n                content: \"\";\r\n                display: table;\r\n                clear: both;\r\n                width: 400px\r\n            }\r\n        <\/style>\r\n\r\n        <script type=\"text\/javascript\">\r\n\r\n            var stationIdMap = {\r\n                clarksville: 'MDMSNT-01',\r\n                frostburg: 'MDMSNT-02',\r\n                keedysville: 'MDMSNT-03',\r\n                easton: 'MDMSNT-04',\r\n                ridgely: 'MDMSNT-05',\r\n                collegepark: 'MDMSNT-06',\r\n                wyemills: 'MDMSNT-07',\r\n                baltimore: 'MDMSNT-08',\r\n                uppermarlboro: 'MDMSNT-09',\r\n                waldorf: 'MDMSNT-10',\r\n                princessanne: 'MDMSNT-11',\r\n                quantico: 'MDMSNT-12',\r\n                towson: 'MDMSNT-13',\r\n                westminster: 'MDMSNT-14',\r\n                clearspring: 'MDMSNT-15',\r\n                chestertown: 'MDMSNT-16',\r\n                cambridge: 'MDMSNT-17',\r\n                salisbury: 'MDMSNT-18',\r\n                goldsboro: 'MDMSNT-19',\r\n                stevensville: 'MDMSNT-20',\r\n            }\r\n            var stationTitleMap = {\r\n                clarksville: 'Clarksville',\r\n                baltimore: 'Baltimore',\r\n                frostburg: 'Frostburg',\r\n                keedysville: 'Keedysville',\r\n                easton: 'Easton',\r\n                ridgely: 'Ridgely',\r\n                uppermarlboro: 'Upper Marlboro',\r\n                wyemills: 'Wye Mills',\r\n                collegepark: 'College Park',\r\n                waldorf: 'Waldorf',\r\n                princessanne: 'Princess Anne',\r\n                quantico: 'Quantico',\r\n                towson: 'Towson',\r\n                westminster: 'Westminster',\r\n                clearspring: 'Clear Spring',\r\n                chestertown: 'Chestertown',\r\n                cambridge: 'Cambridge',\r\n                salisbury: 'Salisbury',\r\n                goldsboro: 'Goldsboro',\r\n                stevensville: 'Stevensville',\r\n            }\r\n            var fieldTitleMap = {\r\n                'Air_Temperature_Avg': 'Temperature (&deg;F)',\r\n                'Relative_Humidity': 'Relative Humidity (%)',\r\n                'DP_2m_Avg': 'Dewpoint (&deg;F)',\r\n                'SLP': 'Sea Level Pressure (mb)',\r\n                'Rain_ICA_Tot': 'Rainfall (in)',\r\n                'WS_Mean': 'Wind Speed (mph)',\r\n                'Wind_Speed_Max': 'Wind Gust (mph)',\r\n                'WD_Mean': 'Wind Direction (deg)',\r\n                'Snow_Depth_Avg': 'Snow Depth (m)',\r\n                'Solar_Radiation_Avg': 'Solar Radiation (W\/m^2)',\r\n                'Soil_Moisture_5cm': '5cm Soil Moisture (m^3\/m^3)',\r\n                'Soil_Moisture_10cm': '10cm Soil Moisture (m^3\/m^3)',\r\n                'Soil_Moisture_20cm': '20cm Soil Moisture (m^3\/m^3)',\r\n                'Soil_Moisture_50cm': '50cm Soil Moisture (m^3\/m^3)',\r\n                'Soil_Moisture_100cm': '100cm Soil Moisture (m^3\/m^3)',\r\n                \/\/ 'windDir': 'Wind Direction (deg)'\r\n            }\r\n\r\n\r\n            \r\n\r\n            \/\/ var fieldColorMap = {\r\n            \/\/     'Air_Temperature_Avg': '#fc0204',\r\n            \/\/     \/\/ 'dewpoint': '#048a04',\r\n            \/\/     'SLP': '#000000',\r\n            \/\/     'Rain_ICA_Tot': '#4fa1e3',\r\n            \/\/     'WS_Mean': '#2c3ede',\r\n            \/\/     'Wind_Speed_Max': '#2c8ede',\r\n            \/\/     \/\/ 'windDir': '#b5b5b5'\r\n            \/\/ }\r\n\r\n\r\n            function formatDateUTC(date) {\r\n                const year = date.getUTCFullYear();\r\n                const month = String(date.getUTCMonth() + 1).padStart(2, '0');\r\n                const day = String(date.getUTCDate()).padStart(2, '0');\r\n                const hours = String(date.getUTCHours()).padStart(2, '0');\r\n                const minutes = String(date.getUTCMinutes()).padStart(2, '0');\r\n                const seconds = String(date.getUTCSeconds()).padStart(2, '0');\r\n                \r\n                return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\r\n            }\r\n\r\n            Highcharts.setOptions({  \/\/ This is for all plots, change Date axis to local timezone\r\n                global : {\r\n                    useUTC : false\r\n                }\r\n            });\r\n\r\n            var today = new Date()\r\n            var yesterday = new Date(new Date().getTime() - (12 * 60 * 60 * 1000))\r\n            var dailiesStart = new Date(new Date().getTime() - (365 * 24 * 60 * 60 * 1000))\r\n            document.addEventListener(\"DOMContentLoaded\", function(event) { \r\n                console.log('BURHEURSEHKFHKESJFj')\r\n                today.setMinutes(today.getMinutes() - today.getTimezoneOffset());\r\n                yesterday.setMinutes(yesterday.getMinutes() - yesterday.getTimezoneOffset());\r\n                document.getElementById('endtime').value = today.toISOString().slice(0,16);\r\n\r\n                document.getElementById('starttime').value = yesterday.toISOString().slice(0,16);\r\n            });\r\n            var station = 'atlantic'\r\n\r\n            function getTimeRange() {\r\n                for (let i = 1; i < 8; i++) {\r\n                    divId = 'container' + String(i)\r\n                    document.getElementById(divId).style.display = 'none'\r\n                }\r\n\r\n                let starttime = document.forms['data-selector']['starttime'].value;\r\n                let endtime = document.forms['data-selector']['endtime'].value;\r\n                \r\n                \/\/ let newStation = document.forms['station-selector']['station'].value;\r\n                let newStations = Array.from(document.querySelectorAll('#stationselect input:checked')).map((x) => {\r\n                    return x.value\r\n                })\r\n                if (newStations[0] == \"on\") {\r\n                    newStations.shift()\r\n                }\r\n                console.log(newStations)\r\n\r\n                let fields = Array.from(document.querySelectorAll('#fieldselect input:checked')).map((x) => {\r\n                    return x.value\r\n                })\r\n                if (fields[0] == \"on\") {\r\n                    fields.shift()\r\n                }\r\n                console.log(\"Fields:\")\r\n                console.log(fields)\r\n                allFields = ['TMSTAMP'].concat(fields)\r\n                \/\/ fields.unshift('dateTime')\r\n\r\n                \/\/ let newStations = ['atlantic', 'golf', 'williams', 'vmh'];\r\n\r\n                if (starttime == '' || endtime == '') {\r\n                    alert('Both a start time and an end time must be selected');\r\n                    return false\r\n                }\r\n                startDt = new Date(starttime)\r\n                endDt = new Date(endtime)\r\n                var diff = endDt - startDt\r\n                if (diff <= 0) {\r\n                    alert('Start time must be before end time')\r\n                    return false\r\n                }\r\n                maxDays = 100\r\n                if (diff > 1000*60*60*24*maxDays) {\r\n                    alert('Plotting more than ' + maxDays + ' days of data results in a fair amount of lag (and may not look very good on a plot). If you would like to access and plot large ranges of data yourself, see the data download form below.')\r\n                    return false\r\n                }\r\n\r\n                t1 = Date.now()\r\n                \/\/ document.getElementById('container').style.opacity = 0.5;\r\n                console.log('BEFORE FETCH')\r\n\r\n                fetch('https:\/\/weather.umd.edu\/wordpress\/wp-content\/plugins\/meso-fsct\/functions\/get-mdmesonet-data.php', {\r\n                    method: \"POST\",\r\n                    mode: \"same-origin\",\r\n                    cache: 'no-cache',\r\n                    credentials: \"same-origin\",\r\n                    headers: {\r\n                        \"Content-Type\": \"application\/json\",\r\n                        \"Accept\": \"application\/json\"\r\n                    },\r\n                    redirect: 'follow',\r\n                    referrerPolicy: 'no-referrer',\r\n                    body: JSON.stringify({\r\n                        startms: formatDateUTC(new Date(startDt.getTime())),\r\n                        endms: formatDateUTC(new Date(endDt.getTime())),\r\n                        station_id: stationIdMap[newStations[0]],\r\n                        cols: allFields\r\n                        \/\/ cols: [\r\n                        \/\/     'dateTime',\r\n                        \/\/     'outTemp',\r\n                        \/\/     \/\/ 'dewpoint', 'barometer', 'rainRate', 'windSpeed', 'windGust', 'windDir'\r\n                        \/\/ ]\r\n                    }),\r\n                })\r\n                .then(data => {\r\n                    return data.json();\r\n                })\r\n                .then(data => {\r\n                    \/\/ console.log(data)\r\n                    data_series = []\r\n                    data['data'].forEach((ob) => {\r\n                        \/\/ console.log(ob)\r\n                        data_series.push(allFields.map((f) => {\r\n                            if (f=='TMSTAMP') return new Date(ob[f]+'Z').getTime()\r\n                            else if (f=='Air_Temperature_Avg') return Math.round(10*(parseFloat(ob[f])*(9\/5)+32))\/10\r\n                            else if (f=='DP_2m_Avg') return Math.round(10*(parseFloat(ob[f])*(9\/5)+32))\/10\r\n                            else if (f=='Wind_Speed_Max' || f=='WS_Mean') return Math.round(10*2.23694*parseFloat(ob[f]))\/10\r\n                            else if (f=='Snow_Depth_Avg') return Math.round(10*(parseFloat(ob[f])*39.3701))\/10\r\n                            else return parseFloat(ob[f])\r\n                        }));\r\n                    });\r\n                    data_series.reverse()\r\n\r\n                    var smoothnessLength = document.getElementById(\"smoothingLength\").value\r\n                    if (document.getElementById(\"smoothing\").checked == true && data_series.length >= smoothnessLength * 3) {\r\n                        var N = data_series.length\r\n                        var K = data_series[0].length\r\n                        var newData = []\r\n                        for (var i=0; i < N-smoothnessLength; i++) {\r\n                            newData.push([data_series[i][0]])\r\n                        }\r\n                        for (var i=1; i < K; i++) {\r\n                            for (var j=0; j < N - smoothnessLength; j++) {\r\n                                var sumAvg = 0\r\n                                for (var k=0; k < smoothnessLength; k++) {\r\n                                    sumAvg += data_series[j+k][i]\r\n                                }\r\n                                newData[j].push(Math.round(100 * sumAvg\/smoothnessLength)\/100)\r\n                            }\r\n                        }\r\n                        data_series = newData.slice(0)\r\n                    }\r\n\r\n                    let fcount = 0\r\n                    charts = fields.map((f) => {\r\n                        fcount++;\r\n                        \/\/ if (fcount!=0) {\r\n                        console.log(\"HELLELFJOEFJEIOSO:\")\r\n                        console.log(fieldTitleMap[f])\r\n                        divId = 'container' + String(fcount)\r\n                        document.getElementById(divId).style.display = 'block'\r\n\r\n                        return Highcharts.chart(divId, {\r\n                            title: {\r\n                                text: fieldTitleMap[f]\r\n                            },\r\n                            tooltip: {\r\n                                crosshairs: true,\r\n                                shared: true,\r\n                            },\r\n                            chart: {\r\n                                zoomType: 'x',\r\n                            },\r\n                            yAxis: [{\r\n                                    title: {\r\n                                        text: fieldTitleMap[f]\r\n                                    },\r\n                                },\r\n                            ],\r\n                            xAxis: {\r\n                                type: 'datetime'\r\n                            },\r\n                            series: [{\r\n                                name: stationTitleMap[newStations[0]],\r\n                                data: data_series.map(i => [i[0], i[fcount]]),\r\n                                \/\/ color: fieldColorMap[f],\r\n                                color: \"red\", \r\n                                dataGrouping: { enabled: true }\r\n                            },\r\n                            ]\r\n                        })\r\n                        \/\/ }\r\n                    })\r\n\r\n                    \/\/ chart = Highcharts.chart('container0', {\r\n                    \/\/     title: {\r\n                    \/\/         text: stationTitleMap[newStations[0]] + ' Station'\r\n                    \/\/     },\r\n                    \/\/     tooltip: {\r\n                    \/\/         crosshairs: true,\r\n                    \/\/         shared: true,\r\n                    \/\/     },\r\n                    \/\/     chart: {\r\n                    \/\/         zoomType: 'x'\r\n                    \/\/     },\r\n                    \/\/     yAxis: [{\r\n                    \/\/             title: {\r\n                    \/\/                 text: 'Temperature (F)'\r\n                    \/\/             },\r\n                    \/\/             \/\/ height: '33%',\r\n                    \/\/         },\r\n                    \/\/     ],\r\n                    \/\/     xAxis: {\r\n                    \/\/         type: 'datetime'\r\n                    \/\/     },\r\n                    \/\/     series: [{\r\n                    \/\/         name: stationTitleMap[newStations[0]],\r\n                    \/\/         data: data_series.map(i => [i[0], i[1]]),\r\n                    \/\/         color: '#fc0204'\r\n                    \/\/     },\r\n                    \/\/     ]\r\n                    \/\/ })\r\n\r\n                    \/\/ document.getElementById('container').style.opacity = 1;\r\n                \/\/ })\r\n                \/\/ .catch (error => console.log('Error:' + error));\r\n\r\n                    console.log('AFTER FETCH')\r\n\r\n                    newStations.slice(1).forEach((newStation) => {\r\n                        \/\/ console.log('loop iteration')\r\n                        \/\/ console.log(newStation)\r\n                        fetch('https:\/\/weather.umd.edu\/wordpress\/wp-content\/plugins\/meso-fsct\/functions\/get-mdmesonet-data.php', {\r\n                            method: \"POST\",\r\n                            mode: \"same-origin\",\r\n                            cache: 'no-cache',\r\n                            credentials: \"same-origin\",\r\n                            headers: {\r\n                                \"Content-Type\": \"application\/json\",\r\n                                \"Accept\": \"application\/json\"\r\n                            },\r\n                            redirect: 'follow',\r\n                            referrerPolicy: 'no-referrer',\r\n                            body: JSON.stringify({\r\n                                startms: formatDateUTC(new Date(startDt.getTime())),\r\n                                endms: formatDateUTC(new Date(endDt.getTime())),\r\n                                station_id: stationIdMap[newStation],\r\n                                cols: allFields\r\n                                \/\/ cols: [\r\n                                \/\/     'dateTime',\r\n                                \/\/     'outTemp',\r\n                                \/\/     \/\/ 'dewpoint', 'barometer', 'rainRate', 'windSpeed', 'windGust', 'windDir'\r\n                                \/\/ ]\r\n                            }),\r\n                        })\r\n                        .then(data => {\r\n                            return data.json();\r\n                        })\r\n                        .then(data => {\r\n                            data_series = []\r\n                            data['data'].forEach((ob) => {\r\n                                \/\/ console.log(ob)\r\n                                data_series.push(allFields.map((f) => {\r\n                                    if (f=='TMSTAMP') return new Date(ob[f]+'Z').getTime()\r\n                                    else if (f=='Air_Temperature_Avg') return Math.round(10*(parseFloat(ob[f])*(9\/5)+32))\/10\r\n                                    else if (f=='DP_2m_Avg') return Math.round(10*(parseFloat(ob[f])*(9\/5)+32))\/10\r\n                                    else if (f=='Wind_Speed_Max' || f=='WS_Mean') return Math.round(10*2.23694*parseFloat(ob[f]))\/10\r\n                                    else if (f=='Snow_Depth_Avg') return Math.round(10*(parseFloat(ob[f])*39.3701))\/10\r\n                                    else return parseFloat(ob[f])\r\n                                }));\r\n                                \/\/ data_series.push([\r\n                                    \/\/ ob['dateTime']*1000,\r\n                                    \/\/ parseFloat(ob['outTemp']),\r\n                                    \/\/ Math.round(parseFloat(ob['dewpoint'])*10)\/10,\r\n                                    \/\/ parseFloat(ob['rainRate']),\r\n                                    \/\/ Math.round(parseFloat(ob['barometer'])*33.864*10)\/10,\r\n                                    \/\/ parseFloat(ob['windGust']),\r\n                                    \/\/ parseFloat(ob['windSpeed']),\r\n                                    \/\/ parseFloat(ob['windDir']),\r\n                                \/\/ ]);\r\n                            });\r\n                            data_series.reverse()\r\n\r\n                            var smoothnessLength = document.getElementById(\"smoothingLength\").value\r\n                            if (document.getElementById(\"smoothing\").checked == true && data_series.length >= smoothnessLength * 3) {\r\n                                var N = data_series.length\r\n                                var K = data_series[0].length\r\n                                var newData = []\r\n                                for (var i=0; i < N-smoothnessLength; i++) {\r\n                                    newData.push([data_series[i][0]])\r\n                                }\r\n                                for (var i=1; i < K; i++) {\r\n                                    for (var j=0; j < N - smoothnessLength; j++) {\r\n                                        var sumAvg = 0\r\n                                        for (var k=0; k < smoothnessLength; k++) {\r\n                                            sumAvg += data_series[j+k][i]\r\n                                        }\r\n                                        newData[j].push(Math.round(100 * sumAvg\/smoothnessLength)\/100)\r\n                                    }\r\n                                }\r\n                                data_series = newData.slice(0)\r\n                            }\r\n\r\n                            \/\/ console.log('ADDING ' + newStation)\r\n                            let fcount = 0\r\n                            charts.forEach((chart) => {\r\n                                fcount++\r\n                                chart.addSeries({\r\n                                    name: stationTitleMap[newStation],\r\n                                    data: data_series.map(i => [i[0], i[fcount]]),\r\n                                })\r\n                            })\r\n                            \/\/ console.log('ADDED ' + newStation)\r\n\r\n                            \/\/ chart.series[1].setData(data_series.map(i => [i[0], i[2]]))\r\n                            \/\/ chart.series[2].setData(data_series.map(i => [i[0], i[6]]))\r\n                            \/\/ chart.series[3].setData(data_series.map(i => [i[0], i[5]]))\r\n                            \/\/ chart.series[4].setData(data_series.map(i => [i[0], i[4]]))\r\n                            \/\/ chart.series[5].setData(data_series.map(i => [i[0], i[3]]))\r\n                            \/\/ chart.series[6].setData(data_series.map(i => [i[0], i[7]]))\r\n\r\n                            \/\/ chart.setTitle({text: stationTitleMap[newStation] + ' Station'})\r\n\r\n                            console.log(Date.now() - t1)\r\n                            \/\/ document.getElementById('container').style.opacity = 1;\r\n\r\n                        })\r\n                        .catch (error => console.log('Error:' + error));\r\n                    })\r\n                \r\n                }).catch (error => console.log('Error:' + error));\r\n\r\n                \/\/ chart.redraw();\r\n\r\n                return false\r\n            }\r\n\r\n        <\/script>\r\n\r\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":77,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8157","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/pages\/8157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/users\/77"}],"replies":[{"embeddable":true,"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/comments?post=8157"}],"version-history":[{"count":1,"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/pages\/8157\/revisions"}],"predecessor-version":[{"id":8158,"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/pages\/8157\/revisions\/8158"}],"wp:attachment":[{"href":"https:\/\/weather.umd.edu\/wordpress\/wp-json\/wp\/v2\/media?parent=8157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}