{"id":4654,"date":"2026-01-06T10:55:59","date_gmt":"2026-01-06T15:55:59","guid":{"rendered":"http:\/\/localhost:9010\/?page_id=4654"},"modified":"2026-06-17T13:49:55","modified_gmt":"2026-06-17T17:49:55","slug":"forecasts","status":"publish","type":"page","link":"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/","title":{"rendered":"Forecasts"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     STATE 1 \u2014 Teaser (visible on page load)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <div class=\"intro-teaser\" id=\"introTeaser\" onclick=\"openIntroArticle()\">\n        <div class=\"intro-teaser-title\">Weather Forecasts: Don't Fight Uncertainty, Leverage It.<\/div>\n        <div class=\"intro-teaser-text\">A traditional weather forecast usually presents only one scenario: the forecast temperature, the expected rainfall amount, or the most likely wind speed \u2014 this is known as a \"deterministic forecast.\" While easy to communicate, this approach can create a misleading impression of certainty...<\/div>\n        <span class=\"intro-teaser-more\">Read more <i class=\"mdi mdi-arrow-right\"><\/i><\/span>\n    <\/div>\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     STATE 2 \u2014 Full article (hidden by default)\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n    <div class=\"intro-full\" id=\"introFull\">\n        <button class=\"intro-back\" onclick=\"closeIntroArticle()\"><i class=\"mdi mdi-arrow-left\"><\/i> Back<\/button>\n        <span class=\"intro-title\">Why Probabilistic Forecasts?<\/span>\n        <p class=\"intro-subtitle\">At Solutions Mesonet, every forecast is probabilistic: uncertainty is part of the information, not the problem.<\/p>\n        <div class=\"intro-article\">\n            <div class=\"intro-block\">\n                <p>A traditional weather forecast usually presents only one scenario: the forecast temperature, the expected rainfall amount, or the most likely wind speed \u2014 this is known as a \"deterministic forecast.\" While easy to communicate, this approach can create a misleading impression of certainty. In reality, the atmosphere is an extraordinarily complex system, and weather observations can capture only a fraction of its complexity. As a result, multiple future outcomes remain possible from the same observed atmospheric state.<\/p>\n            <\/div>\n            <div class=\"intro-block\">\n                <p>Ensemble forecasting explicitly acknowledges this reality. Instead of producing a single version of the future, it simulates a large number of plausible scenarios, each consistent with the available observations and the inherent limits of our knowledge of the atmosphere.<\/p>\n            <\/div>\n            <div class=\"intro-block\">\n                <p>Rather than hiding uncertainty, this approach makes it an integral part of the forecast. Knowing that an event has an 80% chance of occurring is fundamentally different from knowing it has only a 20% chance.<\/p>\n            <\/div>\n            <h3 class=\"intro-closing\">Weather Forecasts: Don't Fight Uncertainty, Leverage It.<\/h3>\n        <\/div>\n    <\/div>\n    <script>\n        function openIntroArticle() {\n            document.getElementById('introTeaser').style.display = 'none';\n            document.getElementById('introFull').classList.add('visible');\n            document.getElementById('introFull').scrollIntoView({ behavior: 'smooth', block: 'start' });\n        }\n        function closeIntroArticle() {\n            document.getElementById('introFull').classList.remove('visible');\n            document.getElementById('introTeaser').style.display = 'block';\n        }\n    <\/script>\n\n    <div class=\"sm-weather-widget\"\n         data-obs-url=\"\"\n         data-ensemble-url=\"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/sm\/v1\/ensemble\">\n\n        <!-- Select stations -->\n        <div class=\"sm-weather-stations\">\n\n            <!-- Location search via Google Maps Autocomplete -->\n            <div class=\"sm-location-search\">\n                <input\n                    id=\"city-autocomplete\"\n                    type=\"text\"\n                    placeholder=\"Search city\"\n                    autocomplete=\"off\" \/>\n                <div id=\"sm-weather-loading\" style=\"display:none;\" class=\"spinner-div\">\n                    <div class=\"spinner-maps\"><\/div>\n                <\/div>\n            <\/div>\n\n            <select id=\"sm-weather-station-select\">\n\n                <option value=\"\">\n\n                    Choose a station\n                <\/option>\n\n                \n                    <option value=\"CWFW\">\n\n                        Baie-Comeau (Baie-Comeau)\n                    <\/option>\n\n                \n                    <option value=\"CGAH\">\n\n                        Baie-James (La Grande IV)\n                    <\/option>\n\n                \n                    <option value=\"CWUK\">\n\n                        Baie-James (Chapais)\n                    <\/option>\n\n                \n                    <option value=\"CYAH\">\n\n                        Baie-James (La Grande IV A)\n                    <\/option>\n\n                \n                    <option value=\"CYGL\">\n\n                        Baie-James (La Grande Rivi\u00e8re)\n                    <\/option>\n\n                \n                    <option value=\"CYMT\">\n\n                        Baie-James (Chibougamau-Chapais A)\n                    <\/option>\n\n                \n                    <option value=\"CZEM\">\n\n                        Baie-James (A\u00e9roport d&#039;Eastmain)\n                    <\/option>\n\n                \n                    <option value=\"CWTG\">\n\n                        Baie-Trinit\u00e9 (Pointe-Des-Monts)\n                    <\/option>\n\n                \n                    <option value=\"CWHV\">\n\n                        Beauceville (Beauceville)\n                    <\/option>\n\n                \n                    <option value=\"CYBX\">\n\n                        Blanc-Sablon (Blanc-Sablon)\n                    <\/option>\n\n                \n                    <option value=\"CWSG\">\n\n                        Cap-Chat (Cap-Chat)\n                    <\/option>\n\n                \n                    <option value=\"CWRZ\">\n\n                        Cap-d&#039;Espoir (Cap D&#039;Espoir)\n                    <\/option>\n\n                \n                    <option value=\"CWQW\">\n\n                        Chevery (Cap Whittle)\n                    <\/option>\n\n                \n                    <option value=\"CGCH\">\n\n                        Chibougamau (Chibougamau-Chapais)\n                    <\/option>\n\n                \n                    <option value=\"CYSC\">\n\n                        Cookshire-Eaton (Sherbrooke)\n                    <\/option>\n\n                \n                    <option value=\"CWDM\">\n\n                        C\u00f4te-Nord-du-Golfe-du-Saint-Laurent (Chevery)\n                    <\/option>\n\n                \n                    <option value=\"CWHQ\">\n\n                        Deschambault-Grondines (Deschambault)\n                    <\/option>\n\n                \n                    <option value=\"SCEB\">\n\n                        Dunham (Dunham Vignoble)\n                    <\/option>\n\n                \n                    <option value=\"CWFQ\">\n\n                        Frelighsburg (Frelighsburg)\n                    <\/option>\n\n                \n                    <option value=\"CGGA\">\n\n                        Gasp\u00e9 (A\u00e9roport de Gasp\u00e9)\n                    <\/option>\n\n                \n                    <option value=\"CYGP\">\n\n                        Gasp\u00e9 (Gasp\u00e9 A)\n                    <\/option>\n\n                \n                    <option value=\"CYND\">\n\n                        Gatineau (Gatineau A)\n                    <\/option>\n\n                \n                    <option value=\"CMGB\">\n\n                        Granby (Granby)\n                    <\/option>\n\n                \n                    <option value=\"CMGZ\">\n\n                        Grandes-Bergeronnes (Grandes-Bergeronnes)\n                    <\/option>\n\n                \n                    <option value=\"CYGV\">\n\n                        Havre-Saint-Pierre (Havre-Saint-Pierre)\n                    <\/option>\n\n                \n                    <option value=\"CMFJ\">\n\n                        Kuujjuarapik (Kuujjuarapik)\n                    <\/option>\n\n                \n                    <option value=\"CYGW\">\n\n                        Kuujjuarapik (Kuujjuarapik A)\n                    <\/option>\n\n                \n                    <option value=\"CWIZ\">\n\n                        L&#039;Acadie (L&#039;Acadie)\n                    <\/option>\n\n                \n                    <option value=\"CWEW\">\n\n                        L&#039;Assomption (L&#039;Assomption)\n                    <\/option>\n\n                \n                    <option value=\"CWBY\">\n\n                        L&#039;\u00eele-d&#039;Anticosti (Port Menier)\n                    <\/option>\n\n                \n                    <option value=\"CWDQ\">\n\n                        La Tuque (La Tuque)\n                    <\/option>\n\n                \n                    <option value=\"CWPK\">\n\n                        La Tuque (Parent)\n                    <\/option>\n\n                \n                    <option value=\"CMFM\">\n\n                        Lac-Jacques-Cartier (For\u00eat Montmorency)\n                    <\/option>\n\n                \n                    <option value=\"CWPD\">\n\n                        Lac-Jacques-Cartier (Parc des Laurentides)\n                    <\/option>\n\n                \n                    <option value=\"CWEO\">\n\n                        Lac-J\u00e9r\u00f4me (Lac \u00c9on)\n                    <\/option>\n\n                \n                    <option value=\"CMMY\">\n\n                        Lac-Matawin (Saint-Michel-des-Saints)\n                    <\/option>\n\n                \n                    <option value=\"CMUS\">\n\n                        Lac-M\u00e9gantic (Lac Megantic)\n                    <\/option>\n\n                \n                    <option value=\"SGLB\">\n\n                        Lachute (Lachute Recherche)\n                    <\/option>\n\n                \n                    <option value=\"CWQO\">\n\n                        Le Bic (Ile Bicquette)\n                    <\/option>\n\n                \n                    <option value=\"CMLU\">\n\n                        Lemieux (Lemieux)\n                    <\/option>\n\n                \n                    <option value=\"CWGR\">\n\n                        Les \u00celes-de-la-Madeleine (\u00celes-de-la-Madeleine)\n                    <\/option>\n\n                \n                    <option value=\"CYGR\">\n\n                        Les \u00celes-de-la-Madeleine (A\u00e9roport des \u00celes de la Madeleine)\n                    <\/option>\n\n                \n                    <option value=\"CWBT\">\n\n                        Longue-Pointe-de-Mingan (Longue Pointe De Mingan)\n                    <\/option>\n\n                \n                    <option value=\"CWQR\">\n\n                        Longue-Pointe-de-Mingan (Ile aux Perroquets)\n                    <\/option>\n\n                \n                    <option value=\"CYHU\">\n\n                        Longueuil (Saint-Hubert)\n                    <\/option>\n\n                \n                    <option value=\"CWBS\">\n\n                        Louiseville (Lac Saint-Pierre)\n                    <\/option>\n\n                \n                    <option value=\"SCAA\">\n\n                        L\u00e9vis (Ferme Montaye)\n                    <\/option>\n\n                \n                    <option value=\"CWTT\">\n\n                        Magog (Lac Memphremagog)\n                    <\/option>\n\n                \n                    <option value=\"CGMG\">\n\n                        Matagami (Matagami)\n                    <\/option>\n\n                \n                    <option value=\"CYNM\">\n\n                        Matagami (Matagami A)\n                    <\/option>\n\n                \n                    <option value=\"CWMJ\">\n\n                        Messines (Maniwaki)\n                    <\/option>\n\n                \n                    <option value=\"CYMX\">\n\n                        Mirabel (Mirabel)\n                    <\/option>\n\n                \n                    <option value=\"CMJI\">\n\n                        Mont-Joli (Mont-Joli)\n                    <\/option>\n\n                \n                    <option value=\"CYYY\">\n\n                        Mont-Joli (Mont-Joli A)\n                    <\/option>\n\n                \n                    <option value=\"CGTL\">\n\n                        Mont-Tremblant (Mont-Tremblant)\n                    <\/option>\n\n                \n                    <option value=\"CWXC\">\n\n                        Mont-Valin (Onatchiway)\n                    <\/option>\n\n                \n                    <option value=\"CWTA\">\n\n                        Montr\u00e9al (Mctavish)\n                    <\/option>\n\n                \n                    <option value=\"CWTQ\">\n\n                        Montr\u00e9al (Montr\u00e9al Intl)\n                    <\/option>\n\n                \n                    <option value=\"CWVQ\">\n\n                        Montr\u00e9al (Sainte-Anne-de-Bellevue)\n                    <\/option>\n\n                \n                    <option value=\"CMNT\">\n\n                        Natashquan (Natashquan)\n                    <\/option>\n\n                \n                    <option value=\"CYNA\">\n\n                        Natashquan (Natashquan A)\n                    <\/option>\n\n                \n                    <option value=\"CWOC\">\n\n                        New Carlisle (New Carlisle)\n                    <\/option>\n\n                \n                    <option value=\"CMJN\">\n\n                        New Richmond (New Richmond East)\n                    <\/option>\n\n                \n                    <option value=\"CWNQ\">\n\n                        Nicolet (Nicolet)\n                    <\/option>\n\n                \n                    <option value=\"CWOD\">\n\n                        Normandin (Normandin)\n                    <\/option>\n\n                \n                    <option value=\"CWIS\">\n\n                        Petite-Rivi\u00e8re-Saint-Fran\u00e7ois (Charlevoix)\n                    <\/option>\n\n                \n                    <option value=\"CGBC\">\n\n                        Pointe-Lebel (Baie-Comeau RCS)\n                    <\/option>\n\n                \n                    <option value=\"CYBC\">\n\n                        Pointe-Lebel (Baie-Comeau A)\n                    <\/option>\n\n                \n                    <option value=\"CWYQ\">\n\n                        Pointe-au-P\u00e8re (Pointe-Au-P\u00e8re)\n                    <\/option>\n\n                \n                    <option value=\"CWJB\">\n\n                        Qu\u00e9bec (Sainte-Foy)\n                    <\/option>\n\n                \n                    <option value=\"CWQB\">\n\n                        Qu\u00e9bec (Qu\u00e9bec)\n                    <\/option>\n\n                \n                    <option value=\"CXBO\">\n\n                        Qu\u00e9bec (Beauport)\n                    <\/option>\n\n                \n                    <option value=\"CYQB\">\n\n                        Qu\u00e9bec (Qu\u00e9bec A)\n                    <\/option>\n\n                \n                    <option value=\"CWNH\">\n\n                        Rivi\u00e8re-du-Loup (Rivi\u00e8re-du-Loup)\n                    <\/option>\n\n                \n                    <option value=\"CYRJ\">\n\n                        Roberval (Roberval)\n                    <\/option>\n\n                \n                    <option value=\"CWUY\">\n\n                        Rouyn-Noranda (Rouyn)\n                    <\/option>\n\n                \n                    <option value=\"CYUY\">\n\n                        Rouyn-Noranda (Rouyn A)\n                    <\/option>\n\n                \n                    <option value=\"CMBE\">\n\n                        Saguenay (Bagotville Airport)\n                    <\/option>\n\n                \n                    <option value=\"CWJO\">\n\n                        Saguenay (Jonqui\u00e8re)\n                    <\/option>\n\n                \n                    <option value=\"CWUX\">\n\n                        Saguenay (La Baie)\n                    <\/option>\n\n                \n                    <option value=\"CYBG\">\n\n                        Saguenay (Bagotville)\n                    <\/option>\n\n                \n                    <option value=\"CWBZ\">\n\n                        Saint-Anicet (Saint-Anicet)\n                    <\/option>\n\n                \n                    <option value=\"CWIG\">\n\n                        Saint-Antoine-de-l&#039;Isle-aux-Grues (Isle aux Grues)\n                    <\/option>\n\n                \n                    <option value=\"CGSA\">\n\n                        Saint-Camille-de-Lellis (Saint-Camille-de-Lellis EC)\n                    <\/option>\n\n                \n                    <option value=\"CWER\">\n\n                        Saint-Fran\u00e7ois-de-l&#039;\u00cele-d&#039;Orl\u00e9ans (Ile d&#039;Orl\u00e9ans)\n                    <\/option>\n\n                \n                    <option value=\"CYOY\">\n\n                        Saint-Gabriel-de-Valcartier (Valcartier A)\n                    <\/option>\n\n                \n                    <option value=\"CMSI\">\n\n                        Saint-Germain-de-Grantham (Saint-Germain-de-Grantham)\n                    <\/option>\n\n                \n                    <option value=\"CYRC\">\n\n                        Saint-Honor\u00e9 (Chicoutimi\/St-Honore)\n                    <\/option>\n\n                \n                    <option value=\"CGOJ\">\n\n                        Saint-Jean-de-l&#039;\u00cele-d&#039;Orl\u00e9ans (\u00cele d&#039;Orl\u00e9ans - Quai de St-Jean)\n                    <\/option>\n\n                \n                    <option value=\"CYJN\">\n\n                        Saint-Jean-sur-Richelieu (St. Jean)\n                    <\/option>\n\n                \n                    <option value=\"CWTN\">\n\n                        Saint-Joachim (Cap-Tourmente)\n                    <\/option>\n\n                \n                    <option value=\"CWST\">\n\n                        Sainte-Anne-de-la-Pocati\u00e8re (La Pocati\u00e8re)\n                    <\/option>\n\n                \n                    <option value=\"CWIT\">\n\n                        Sainte-Clotilde (Sainte-Clotilde)\n                    <\/option>\n\n                \n                    <option value=\"CGCL\">\n\n                        Sainte-Florence (Causapscal)\n                    <\/option>\n\n                \n                    <option value=\"CWSF\">\n\n                        Sainte-Madeleine-de-la-Rivi\u00e8re-Madeleine (Cap-Madeleine)\n                    <\/option>\n\n                \n                    <option value=\"CWQM\">\n\n                        Sainte-Rose-du-Nord (Cap-Rouge)\n                    <\/option>\n\n                \n                    <option value=\"CGKM\">\n\n                        Schefferville (Schefferville)\n                    <\/option>\n\n                \n                    <option value=\"CYKL\">\n\n                        Schefferville (Schefferville A)\n                    <\/option>\n\n                \n                    <option value=\"CWIP\">\n\n                        Sept-\u00celes (Pointe Noire)\n                    <\/option>\n\n                \n                    <option value=\"CXZV\">\n\n                        Sept-\u00celes (Sept-\u00celes)\n                    <\/option>\n\n                \n                    <option value=\"CYZV\">\n\n                        Sept-\u00celes (Sept-\u00celes A)\n                    <\/option>\n\n                \n                    <option value=\"CXSH\">\n\n                        Shawinigan (Shawinigan)\n                    <\/option>\n\n                \n                    <option value=\"CWQH\">\n\n                        Sherbrooke (Lennoxville)\n                    <\/option>\n\n                \n                    <option value=\"CWAF\">\n\n                        Tadoussac (\u00cele Rouge)\n                    <\/option>\n\n                \n                    <option value=\"CWQD\">\n\n                        Tadoussac (Pointe de l&#039;Islet)\n                    <\/option>\n\n                \n                    <option value=\"CWQV\">\n\n                        Tadoussac (Pointe Claveau)\n                    <\/option>\n\n                \n                    <option value=\"CMTH\">\n\n                        Thetford Mines (Thetford Mines)\n                    <\/option>\n\n                \n                    <option value=\"CGRQ\">\n\n                        Trois-Rivi\u00e8res (A\u00e9roport de Trois-Rivi\u00e8res)\n                    <\/option>\n\n                \n                    <option value=\"CWTY\">\n\n                        Trois-Rivi\u00e8res (Trois-Rivi\u00e8res)\n                    <\/option>\n\n                \n                    <option value=\"CYRQ\">\n\n                        Trois-Rivi\u00e8res (Trois-Rivi\u00e8res A)\n                    <\/option>\n\n                \n                    <option value=\"CWBA\">\n\n                        T\u00e9miscaming (Barrage T\u00e9miscamingue)\n                    <\/option>\n\n                \n                    <option value=\"CYVO\">\n\n                        Val d&#039;Or (Val d&#039;Or A)\n                    <\/option>\n\n                \n                    <option value=\"CGVO\">\n\n                        Val-d&#039;Or (Val-d&#039;Or RCS)\n                    <\/option>\n\n                \n                    <option value=\"CYKQ\">\n\n                        Waskaganish (Waskaganish A)\n                    <\/option>\n\n                \n                    <option value=\"CYNC\">\n\n                        Wemindji (A\u00e9roport de Wemindji)\n                    <\/option>\n\n                \n                    <option value=\"SCCB\">\n\n                        \u00cele d&#039;Orl\u00e9ans (Saint-Jean-de-l&#039;\u00cele-d&#039;Orl\u00e9ans)\n                    <\/option>\n\n                \n            <\/select>\n\n        <\/div>\n\n        <!-- Observations -->\n<!--        <div class=\"sm-weather-block sm-weather-observations\">-->\n<!---->\n<!--            <h3>--><!--<\/h3>-->\n<!---->\n<!--            <div id=\"sm-weather-observations-content\" class=\"sm-weather-cards\">-->\n\n                <!-- WIND -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-weather-windy\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"wind_speed\">--<\/span> km\/h-->\n<!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-sub\">-->\n<!--                        <span data-field=\"wind_direction\">--<\/span>\u00b0-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n                <!-- GUESTS -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-windsock\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"wind_gusts\">--<\/span> km\/h-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n                <!-- TEMPERATURE -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-thermometer\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"temperature\">--<\/span> \u00b0C-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n                <!-- HUMIDITY -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-water-percent\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"humidity\">--<\/span> %-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n                <!-- PRESSURE -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-gauge\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"pressure\">--<\/span> hPa-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n                <!-- DEW POINT -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-water-thermometer-outline\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"dew_point\">--<\/span> \u00b0C-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n                <!-- SUNRISE -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-weather-sunset-up\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"sunrise\">--:--<\/span>-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n                <!-- SUNSET -->\n<!--                <div class=\"sm-weather-card\">-->\n<!--                    <div class=\"sm-weather-card-title\">-->\n<!--                        <i class=\"mdi mdi-weather-sunset-down\"><\/i> --><!--                    <\/div>-->\n<!--                    <div class=\"sm-weather-card-value\">-->\n<!--                        <span data-field=\"sunset\">--:--<\/span>-->\n<!--                    <\/div>-->\n<!--                <\/div>-->\n\n<!--            <\/div>-->\n<!---->\n<!--        <\/div>-->\n\n        <!-- Ensembles Forecast -->\n<!--        <div class=\"sm-weather-block sm-weather-ensemble\">-->\n<!---->\n<!--            <div id=\"sm-weather-ensemble-content\" class=\"sm-weather-content\">-->\n<!---->\n<!--                <div id=\"sm-ensemble-chart\" style=\"width:100%; height:400px;\"><\/div>-->\n<!---->\n<!--            <\/div>-->\n<!---->\n<!--        <\/div>-->\n\n        <!-- Interactive Google Maps -->\n        <div id=\"sm-map\"><\/div>\n\n        <!-- Chart selector toolbar -->\n        <!-- <div id=\"sm-chart-toolbar\" class=\"sm-chart-toolbar\"><\/div> -->\n\n        <div id=\"sm-chart-header\"><\/div>\n\n        <!-- UNIQUE chart container -->\n        <div id=\"sm-chart-container\">\n            <div class=\"sm-chart-placeholder\"><\/div>\n        <\/div>\n\n    <\/div>\n\n    <script>\n\n        document.addEventListener('DOMContentLoaded', () => {\n\n            jQuery('#sm-weather-station-select').select2({\n                placeholder: \"Choose a station\",\n                allowClear: false,\n                width: '100%'\n            });\n\n            \/\/ Flag: skip handler when dropdown is updated programmatically from the search\n            window.smLoadingFromSearch = false;\n\n            jQuery('#sm-weather-station-select').on('change', function () {\n                if (window.smLoadingFromSearch) return;\n                const stid = this.value;\n                if (!stid) return;\n                const selectedText = jQuery(this).find('option:selected').text();\n                loadEnsemble(stid, selectedText, null);\n            });\n\n        });\n\n        \/\/ \u2500\u2500 Blue marker: searched location \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n        function smSetSearchMarker(lat, lng, title) {\n            if (!window._smMap) return;\n            if (window._smSearchMarker) window._smSearchMarker.setMap(null);\n            window._smSearchMarker = new google.maps.Marker({\n                position: { lat, lng },\n                map: window._smMap,\n                title: title,\n                icon: {\n                    path: google.maps.SymbolPath.CIRCLE,\n                    scale: 9,\n                    fillColor: '#4285F4',\n                    fillOpacity: 1,\n                    strokeColor: '#ffffff',\n                    strokeWeight: 2.5,\n                }\n            });\n        }\n\n        \/\/ \u2500\u2500 Orange marker: nearest weather station + dashed line \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n        function smSetStationMarker(lat, lng, stid, stationLabel, distanceKm) {\n            if (!window._smMap) return;\n\n            if (window._smStationMarker)    window._smStationMarker.setMap(null);\n            if (window._smLine)              window._smLine.setMap(null);\n            if (window._smStationInfo)       window._smStationInfo.close();\n\n            const pos = { lat: parseFloat(lat), lng: parseFloat(lng) };\n\n            window._smStationMarker = new google.maps.Marker({\n                position: pos,\n                map: window._smMap,\n                title: stationLabel,\n                icon: {\n                    path: google.maps.SymbolPath.CIRCLE,\n                    scale: 9,\n                    fillColor: '#FF6D00',\n                    fillOpacity: 1,\n                    strokeColor: '#ffffff',\n                    strokeWeight: 2.5,\n                }\n            });\n\n            const distStr = distanceKm ? `${parseFloat(distanceKm).toFixed(1)} km` : '';\n            window._smStationInfo = new google.maps.InfoWindow({\n                content: `<div style=\"font-size:13px\"><strong>${stationLabel}<\/strong>${distStr ? '<br><span style=\"color:#666\">' + distStr + '<\/span>' : ''}<\/div>`\n            });\n            window._smStationInfo.open(window._smMap, window._smStationMarker);\n\n            \/\/ Re-open info window on marker click\n            window._smStationMarker.addListener('click', () => {\n                window._smStationInfo.open(window._smMap, window._smStationMarker);\n            });\n\n            \/\/ Dashed line between search and station\n            if (window._smSearchMarker) {\n                window._smLine = new google.maps.Polyline({\n                    path: [window._smSearchMarker.getPosition(), pos],\n                    geodesic: true,\n                    strokeColor: '#FF6D00',\n                    strokeOpacity: 0,\n                    strokeWeight: 0,\n                    icons: [{\n                        icon: { path: 'M 0,-1 0,1', strokeOpacity: 0.8, strokeColor: '#FF6D00', scale: 3 },\n                        offset: '0',\n                        repeat: '12px'\n                    }],\n                    map: window._smMap\n                });\n\n                \/\/ Zoom to fit both markers\n                const bounds = new google.maps.LatLngBounds();\n                bounds.extend(window._smSearchMarker.getPosition());\n                bounds.extend(pos);\n                window._smMap.fitBounds(bounds, 80);\n            }\n        }\n\n        \/\/ \u2500\u2500 Find nearest station, update map + dropdown + charts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n        async function smFindNearestStation(lat, lng) {\n            const loading = document.getElementById('sm-weather-loading');\n            if (loading) loading.style.display = 'flex';\n            try {\n                const res = await fetch(`\/wp-json\/sm\/v1\/nearest-station?lat=${lat}&lng=${lng}`);\n                if (!res.ok) throw new Error('nearest-station API error');\n                const station = await res.json();\n                if (!station || !station.stid) return;\n\n                const stationName = jQuery('#sm-weather-station-select option[value=\"' + station.stid + '\"]').text();\n\n                smSetStationMarker(station.lat, station.lon, station.stid, stationName, station.distance_km ?? null);\n\n                \/\/ Sync Select2 visually without re-triggering loadEnsemble\n                window.smLoadingFromSearch = true;\n                jQuery('#sm-weather-station-select').val(station.stid).trigger('change');\n                window.smLoadingFromSearch = false;\n\n                loadEnsemble(station.stid, stationName, station.distance_km ?? null);\n\n            } catch (err) {\n                console.error('[SM] smFindNearestStation:', err);\n            } finally {\n                if (loading) loading.style.display = 'none';\n            }\n        }\n\n        \/\/ \u2500\u2500 Google Maps init (Places Autocomplete + Map) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n        function smInitAutocomplete() {\n            if (window._smGoogleMapsReady) return;\n            window._smGoogleMapsReady = true;\n\n            \/\/ Interactive map centred on Canada\n            const mapEl = document.getElementById('sm-map');\n            if (mapEl) {\n                window._smMap = new google.maps.Map(mapEl, {\n                    center: { lat: 56, lng: -96 },\n                    zoom: 4,\n                    mapTypeId: 'roadmap',\n                    gestureHandling: 'cooperative',\n                    mapTypeControl: false,\n                    fullscreenControl: false,\n                    streetViewControl: false,\n                });\n            }\n\n            \/\/ Places Autocomplete on the text input\n            const input = document.getElementById('city-autocomplete');\n            if (!input) return;\n            window._smAutocomplete = new google.maps.places.Autocomplete(input);\n            window._smAutocomplete.addListener('place_changed', function () {\n                const place = window._smAutocomplete.getPlace();\n                if (!place.geometry) return;\n                const lat = place.geometry.location.lat();\n                const lng = place.geometry.location.lng();\n                smSetSearchMarker(lat, lng, place.name || '');\n                smFindNearestStation(lat, lng);\n            });\n        }\n        window.smInitAutocomplete = smInitAutocomplete;\n\n        \/\/ Inject Google Maps API script once\n        (function () {\n            if (window.google && window.google.maps) { smInitAutocomplete(); return; }\n            if (document.getElementById('sm-google-maps-script')) return;\n            const key = \"AIzaSyDjW-1QzIxcw4W_kwzVPsz_fjlziOECYaU\";\n            if (!key) return;\n            const s = document.createElement('script');\n            s.id  = 'sm-google-maps-script';\n            s.src = 'https:\/\/maps.googleapis.com\/maps\/api\/js?key=' + key + '&libraries=places&callback=smInitAutocomplete&loading=async';\n            s.async = true;\n            s.defer = true;\n            document.head.appendChild(s);\n        })();\n\n    <\/script>\n\n    <\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":10,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-4654","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Forecasts - Solutions Mesonet<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Forecasts - Solutions Mesonet\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/\" \/>\n<meta property=\"og:site_name\" content=\"Solutions Mesonet\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/people\/Solutions-Mesonet\/100070470109727\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-17T17:49:55+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/\",\"url\":\"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/\",\"name\":\"Forecasts - Solutions Mesonet\",\"isPartOf\":{\"@id\":\"https:\/\/www.solutions-mesonet.org\/#website\"},\"datePublished\":\"2026-01-06T15:55:59+00:00\",\"dateModified\":\"2026-06-17T17:49:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.solutions-mesonet.org\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Forecasts\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.solutions-mesonet.org\/#website\",\"url\":\"https:\/\/www.solutions-mesonet.org\/\",\"name\":\"Solutions Mesonet\",\"description\":\"Solutions Mesonet collects, validates, and disseminates meteorological data using world-renowned technologies.\",\"publisher\":{\"@id\":\"https:\/\/www.solutions-mesonet.org\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.solutions-mesonet.org\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.solutions-mesonet.org\/#organization\",\"name\":\"Solutions Mesonet\",\"url\":\"https:\/\/www.solutions-mesonet.org\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.solutions-mesonet.org\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.solutions-mesonet.org\/wp-content\/uploads\/2023\/08\/logo-solutions-mesonet.png\",\"contentUrl\":\"https:\/\/www.solutions-mesonet.org\/wp-content\/uploads\/2023\/08\/logo-solutions-mesonet.png\",\"width\":512,\"height\":194,\"caption\":\"Solutions Mesonet\"},\"image\":{\"@id\":\"https:\/\/www.solutions-mesonet.org\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/people\/Solutions-Mesonet\/100070470109727\/\",\"https:\/\/www.linkedin.com\/company\/solutions-mesonet\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Forecasts - Solutions Mesonet","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Forecasts - Solutions Mesonet","og_url":"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/","og_site_name":"Solutions Mesonet","article_publisher":"https:\/\/www.facebook.com\/people\/Solutions-Mesonet\/100070470109727\/","article_modified_time":"2026-06-17T17:49:55+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/","url":"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/","name":"Forecasts - Solutions Mesonet","isPartOf":{"@id":"https:\/\/www.solutions-mesonet.org\/#website"},"datePublished":"2026-01-06T15:55:59+00:00","dateModified":"2026-06-17T17:49:55+00:00","breadcrumb":{"@id":"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.solutions-mesonet.org\/en\/forecasts\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.solutions-mesonet.org\/en\/forecasts\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.solutions-mesonet.org\/en\/"},{"@type":"ListItem","position":2,"name":"Forecasts"}]},{"@type":"WebSite","@id":"https:\/\/www.solutions-mesonet.org\/#website","url":"https:\/\/www.solutions-mesonet.org\/","name":"Solutions Mesonet","description":"Solutions Mesonet collects, validates, and disseminates meteorological data using world-renowned technologies.","publisher":{"@id":"https:\/\/www.solutions-mesonet.org\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.solutions-mesonet.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.solutions-mesonet.org\/#organization","name":"Solutions Mesonet","url":"https:\/\/www.solutions-mesonet.org\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.solutions-mesonet.org\/#\/schema\/logo\/image\/","url":"https:\/\/www.solutions-mesonet.org\/wp-content\/uploads\/2023\/08\/logo-solutions-mesonet.png","contentUrl":"https:\/\/www.solutions-mesonet.org\/wp-content\/uploads\/2023\/08\/logo-solutions-mesonet.png","width":512,"height":194,"caption":"Solutions Mesonet"},"image":{"@id":"https:\/\/www.solutions-mesonet.org\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/people\/Solutions-Mesonet\/100070470109727\/","https:\/\/www.linkedin.com\/company\/solutions-mesonet\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/pages\/4654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/comments?post=4654"}],"version-history":[{"count":4,"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/pages\/4654\/revisions"}],"predecessor-version":[{"id":4671,"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/pages\/4654\/revisions\/4671"}],"wp:attachment":[{"href":"https:\/\/www.solutions-mesonet.org\/en\/wp-json\/wp\/v2\/media?parent=4654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}