PageSourceSearch

https://www.weatherlink.com/map

html weatherlink.com collected 2026-09-24 08:53:08 UTC 46,271 bytes, 509 lines download raw bytes

1
2
3<!doctype html>
4<html>
5<head>
6    <link type="image/x-icon" href="/static/favicon.ico" rel="Shortcut Icon">
7<meta name="referrer" content="strict-origin-when-cross-origin">
8
9<meta http-equiv="Cache-Control" content="no-store, no-transform">
10<meta charset="utf-8"/>
11<meta http-equiv="X-UA-Compatible" content="IE=edge">
12<meta name="viewport" content="width=970, user-scalable=yes">
13<link rel="stylesheet" href="/css/10.0.7.4-c92a18e7/jquery-ui.css">
14<link rel="stylesheet"
15      href="https://cdnjs.cloudflare.com/ajax/libs/jquery.perfect-scrollbar/0.6.12/css/perfect-scrollbar.min.css">
16<meta name="defaultLanguage" content="en">
17<meta name="availableLanguages" content="en, pt, pl, it, fr, fr-fr, fr-FR, ru, es, de, cn, ja">
18<link rel="localization" href="/static/local/{locale}.json">
19
20<script>
21    GAid = "UA-3010397-9";
22    GTMid = "GTM-5ZM8NQT";
23    if (location.host === "www.weatherlink.com") {
24        GAid = "UA-3010397-2";
25        GTMid = "GTM-NLLVC3L";
26    }
27</script>
27
28
29<!-- Google Tag Manager -->
30<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
31        new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
32        j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
33        'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
34})(window,document,'script','dataLayer', GTMid);</script>
34
35<!-- End Google Tag Manager —>
36
37<!-- Global site tag (gtag.js) - Google Analytics -->
38<script>
39    (function() {
40        var f = document.getElementsByTagName('script')[0], j = document.createElement('script');
41        j.async = true;
42        j.src = "https://www.googletagmanager.com/gtag/js?id=" + GAid;
43        f.parentNode.insertBefore(j,f);
44    })();
45</script>
45
46<script>
47    window.dataLayer = window.dataLayer || [];
48    function gtag(){dataLayer.push(arguments);}
49    gtag('js', new Date());
50    gtag('config', GAid);
51</script>
51
52
53<script type="text/javascript" src="//script.crazyegg.com/pages/scripts/0114/8715.js" async="async" ></script>
53
54
55<link rel="stylesheet" href="/css/10.0.7.4-c92a18e7/map.css">
56<link rel="stylesheet" href="/css/10.0.7.4-c92a18e7/payment.css">
57<title>WeatherLink Air Quality & Temperature Map</title>
58
59
60<!-- potential fix for LI Sharing, Bug # 2751 -->
61<meta property="description" content="WeatherLink gives you real-time weather & air quality data from the largest 
62network of sensors in the world." />
63
64<!-- Facebook sharing -->
65<meta property="og:description" content="WeatherLink gives you real-time weather & air quality data from the largest 
66network of sensors in the world." />
67<meta property="og:image" content="https://www.weatherlink.com/static/images/socialMediaShare/facebook.png"/>
68<meta property="og:image:type" content="image/png"/>
69
70<!-- meta tags for twitter sharing -->
71<meta property="twitter:card" content="summary_large_image"/>
72<meta property="twitter:image" content="https://www.weatherlink.com/static/images/socialMediaShare/twitter.png"/>
73<meta property="twitter:title" content="WeatherLink gives you real-time weather & air quality data from the largest 
74network of sensors in the world." />
75</head>
76<body>
77    <!-- Google Tag Manager (noscript) -->
vendor: 73 bytes, lines 77-78
77
78    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
78GTM-NLLVC3L
vendor: 111 bytes, lines 78-80
78"
79                      height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
80    
80<!-- End Google Tag Manager (noscript) -->
81<div class="navbar navbar-default navbar-fixed-top--disabled" role="navigation">
82
83    <div class="nav-main container-fluid">
84        <div class="navbar-left" id="demo-nav-left">
85            <a href="/" class="navbar-brand">
86                <img src="/static/weatherlink-logo.png">
87            </a>
88
89        </div>
90
91        <div class="navbar-left">
92
93                <ul id="bs-example-navbar-collapse-1" class="nav navbar-nav">
94
95                        <li><a href="/bulletin/9722cfc3-a4ef-47b9-befb-72f52592d6ed"><span class=""
96                                                                                                 data-l10n-id="bulletin"></span></a>
97                        </li>
98                        
99                            <li><a href="/stripchart/plot/9722cfc3-a4ef-47b9-befb-72f52592d6ed"><span class=""
100                                                                                                   data-l10n-id="chart"></span></a>
101                            </li>
102                        <li><a href="/browse/9722cfc3-a4ef-47b9-befb-72f52592d6ed"><span class=""
103                                                                                               data-l10n-id="data"></span></a>
104                        </li>
105                    <li><a href="/map"><span class="" data-l10n-id="map"></span></a></li>
106                        <li><a href="/mobilize"><span class="" data-l10n-id="mobilize"></span></a></li>
107                </ul>
108        </div>
109        
110
111        <div class="navbar-right">
112            <div class="pull-left navbar-search-box">
113                <input type="search" class="form-control" data-l10n-id="search_input" autocomplete="new-address" name="address" id="address">
114            </div>
115	        	<div class="pull-left signup-option">
116	        	<a class="btn button navbar-signup" href="/usr/registration">
117	        			Sign Up
118	        	</a>
119	        	<a class="navbar-login" href="/login">Log in</a>
120	        	</div>
121            
122        </div>
123    </div>
124</div>
125<div id="page-contents">
126
127<div id="main-body-container" class="container-fluid">
128    <div id="left-panel" style="position: relative">
129        <div class="nav-secondary">
130            <div class="station-options">
131            </div>
132        </div>
133        <div class="left-panel-options clearfix">
134            <div class="pull-left">
135                <div class="flex-items">
136                    <div class="control-bar overlay-option">
137                        <div class="option dropdown">
138                            <a href="javascript:void(0);" data-bs-toggle="dropdown" class="dropdown-toggle disabled">
139                            <span class="option-icon">
140                                <strong data-l10n-id="overlay"></strong>
141                            </span>
142                                <span class="overlay-value"></span>
143                                <i class="wl-icon icon-carretdown"></i>
144                            </a>
145                            <div class="dropdown-menu overlay-select" role="menu">
146                                <div class="menu-item" data-val="temp" data-l10n-id="temperature"></div>
147                                <div class="menu-item" data-val="aqs" data-l10n-id="air_quality"></div>
148                            </div>
149                        </div>
150                    </div>
151
152                    <div class="control-bar aqi-index-option">
153                    </div>
154
155                    <div class="option dropdown map-option wood-smoke-option">
156                        <div class="wl-checkbox">
157                            <label>
158                                <input type="checkbox">
159                                <span class="pseudo-checkbox"></span>
160                                <span data-l10n-id="wood_smoke_adjustment"></span>
161                            </label>
162                        </div>
163                    </div>
164                     <div class="control-bar option share-option">
165                        <span class="share-option-icon"><i class="wl-icon icon-shared"></i></span>
166                    </div>
167
168                </div>
169            </div>
170            <div class="option dropdown pull-right devices-dropdown" style="height: 40px">
171                    <a class="dropdown-toggle" data-bs-toggle="dropdown" href="javascript:void(0);">
172                            <span class="option-icon">
173                                <i class="wl-icon icon-deviceicon"></i>
174                            </span>
175                    Davis Instruments
176                        <i class="wl-icon icon-carretdown"></i>
177                    </a>
178                    <div class="dropdown-menu" role="menu"></div>
179            </div>
180        </div>
181
182        <div id="map-container" class="pull-center">
183        </div>
184        <div class="map-legend-container">
185            <div class="map-legend">
186                <div class="map-legend-gradient"></div>
187                <div class="map-legend-value"></div>
188            </div>
189            <span class="map-arr left"> < </span>
190            <span class="map-arr right"> > </span>
191        </div>
192        <div class="aqs-scale-container" style="display: none">
193            <div class="aqs-scale">
194                <div class="aqs-scale-gradient"></div>
195                <div class="aqs-scale-value"></div>
196            </div>
197        </div>
198        <div class="shop-davis-products-img">
199    		<img class="product-img" src="../static/images/map/AirLinkShop.png">
200    	</div>
201        <div class="shop-davis-products">
202        	<a id="shop-davis-products-url" target="_blank" href="https://www.davisinstruments.com/collections/air-quality-1?utm_source=weatherlink-website&utm_medium=map-banner">
203        	    <span class="product-label" data-l10n-id="shop_davis_products"></span>
204            </a>
205        </div>
206        <div>
207            <ul id="debug-output"></ul>
208            <div id="remove-on-ready"></div>
209            <div class="aqs-scale-popover"></div>
210            <div id="portal-container"></div>
211        </div>
212        <div id="page-header" class="pull-left" style="padding:15px 0px">
213            <span class="js-timestamp-output" style="font-size:16px"></span>
214        </div>
215
216    </div>
217    <div id="right-panel"></div>
218</div>
219<div id="modal-config" class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false">
220    <div class="modal-dialog">
221        <div class="modal-content">
222            <div class="modal-header">header</div>
223            <div class="modal-body">body</div>
224            <div class="modal-footer">footer</div>
225        </div>
226    </div>
227</div>
228</div>
229
230<script type="text/javascript">
231    var wl = wl || {};
232    wl.data = wl.data || {};
233    wl.__bootstrap_user_account_settings = {"userId":0,"lastViewedSystemId":0,"lastPublicViewedSystemId":0,"formatDecimalType":"Low","localTimezoneOffset":0,"ianaTimeZone":"GMT","airQualitySchemeId":1,"unitsWaterDepthTypeId":1,"localTimezoneOffsetSeconds":0,"unitsBarTypeId":1,"unitsWindTypeId":1,"formatDateMDY":true,"formatDecimalTypeId":1,"unitsWeightTypeId":1,"unitsSoilDepthTypeId":1,"unitsSoilMoistureTypeId":3,"unitsRainEtTypeId":1,"timespanTypeId":5,"formatTime12hrs":true,"formatDateTypeId":1,"formatTimeTypeId":1,"formatNumberTypeId":1,"unitsFlowTypeId":1,"unitsPressureTypeId":1,"unitsFlowRateTypeId":1,"unitsTempTypeId":1,"unitsElevTypeId":1,"lang":"en"};
234    wl.data.identifier = "9722cfc3-a4ef-47b9-befb-72f52592d6ed";
235    wl.data.systemId = 2;
236    wl.data.dLat = 37.637;
237    wl.data.dLng = -122.126;
238    wl.data.userAccountSetting = wl.__bootstrap_user_account_settings;
239    wl.tempUnits = wl.__bootstrap_user_account_settings.unitsTempTypeId;
240    wl.showAQSOverlay = true;
241    wl.mapOverlayToUse = "AIR_QUALITY";
242    wl.availableSchemes = [{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":1,"isortOrder":1,"saqLongName":"United States EPA","slongDescriptiveText":"<p>The United States Environmental Protection Agency (EPA) has developed an Air Quality Index (AQI) that is used to report air quality. This AQI is divided into six categories indicating increasing levels of health concern: Good, Moderate, Unhealthy for Sensitive Groups (USG), Unhealthy, Very Unhealthy, and Hazardous.</p>\n<p>The EPA has established National Ambient Air Quality Standards (NAAQS) in order to protect public health. An AQI value of 100 generally corresponds to the level of the NAAQS for the pollutant. The Clean Air Act (USA) (1990) requires the EPA to review its National Ambient Air Quality Standards every five years to reflect evolving health effects information. The Air Quality Index is adjusted periodically to reflect these changes.</p><p>Real-time monitoring data are typically available as 1-hour averages. However, computation of the AQI for some pollutants requires averaging over multiple hours of data. (For example, calculation of the PM 2.5 AQI requires a 24-hour average.) To accurately reflect the current air quality, the multi-hour average used for the AQI computation should be centered on the current time, but as concentrations of future hours are unknown and are difficult to estimate accurately, the EPA uses surrogate concentrations to estimate these multi-hour averages. This surrogate concentration is called the NowCast. Nowcast is a particular type of exponentially weighted moving average that provides more weight to the most recent air quality data when air pollution levels are changing. The Air Quality Index itself is a piecewise linear function of the input pollutant concentration.</p>","saqShortName":"USA"},{"aqiLabel":"3 Hr AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":2,"inumberOfLowPrecisionFractionalDigits":1,"iaqSchemeId":8,"isortOrder":2,"saqLongName":"Canada Health","slongDescriptiveText":"<p>Canada's Air Quality Health Index (AQHI) is a federal program jointly coordinated by Health Canada and Environment Canada. The AQHI provides a 10 point scale to indicate the level of health risk associated with local air quality. Occasionally, when the amount of air pollution is abnormally high, the number may exceed 10. The index describes the level of health risk associated with this number as Low, Moderate, High, or Very High.</p><p>Air quality in Canada has historically been reported by the US EPA AQI in various provinces, but the US AQI was designed around achieving lower pollutant emission rates rather than human health. The Canada AQHI was created to report on the specific health risks posed by air pollution. The AQHI is aimed towards two populations: 1. The “general” population and 2. The “at-risk” populations. The latter consists of children, the elderly and people with existing respiratory or cardiovascular conditions, such as those with asthma, and people suffering from diabetes, heart disease or lung disease. The AQHI does not measure the effects of odor, pollen, dust, heat, or humidity.</p><p>The index is based on a 3 hour average PM 2.5 concentration. The formula 
242is exponential and is designed so that the most frequently observed concentrations result in a value of 3 to 4 on the scale, and less than 10% of the highest observed concentrations result in a value of 7 or higher on a 10-point scale.</p>","saqShortName":"Canada"},{"aqiLabel":"1 Hr AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":2,"isortOrder":3,"saqLongName":"EU EEA Common","slongDescriptiveText":"<p>The European Union (EU)'s European Environment Agency (EEA) developed the Common Air Quality Index (CAQI). The CAQI is a number on a scale from 1 to 100, where a low value means good air quality and a high value means bad air quality. The index is subdivided into five CAQI ranges and verbal descriptions: Very Low, Low, Medium, High, and Very High.</p><p>The CAQI is based upon a large set of pollutant data that can be easily transformed into an index that is easy to communicate to the general public. The main aim of the CAQI was to have an index that would encourage wide comparison across the EU and to attract public attention to urban air pollution and help decrease exposure.</p><p>The index is based on a one hour average PM 2.5 concentration.</p>","saqShortName":"EU Common"},{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":10,"isortOrder":4,"saqLongName":"EU European","slongDescriptiveText":"<p>In November 2017, the European Union (EU)\\'s European Environment Agency (EEA) announced the European Air Quality Index (EAQI) and encouraged its widespread use. The EAQI does not employ an index scale, but simply assigns the pollutant concentration a \"rating\" with verbal descriptions: Good, Fair, Moderate, Poor, Very Poor, and Extremely Poor.</p><p>The PM 2.5 concentration is typically averaged over a 24 hour period, but Davis Instruments also provides the US EPA NowCast averaged concentration.</p>","saqShortName":"EU European"},{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":2,"inumberOfLowPrecisionFractionalDigits":1,"iaqSchemeId":3,"isortOrder":5,"saqLongName":"UK COMEAP Daily","slongDescriptiveText":"<p>The most commonly used air quality index in the UK is the Daily Air Quality Index (AQI) recommended by the Committee on Medical Effects of Air Pollutants (COMEAP). This index has a ten point scale, which is further grouped into four bands: Low, Moderate, High, and Very High.</p><p>COMEAP designed an index based upon the requirements of the general public, in particular, those more at risk (those with lung or heart conditions, the elderly, and children) of adverse health effects from air pollution. The AQI was designed to be used to draw attention to the day-by-day, month-by-month variations in air pollutant concentrations and so contribute to education and awareness of air quality issues amongst the public and policy-makers.</p><p>The PM 2.5 concentration is typically averaged over a 24 hour period, but Davis Instruments also provides the AQI based on the US EPA NowCast averaged concentration. \"Triggers\" or breakpoints were derived to provide information to the public to warn of exposure as it is taking place at Moderate, High or Very High levels. The Air Quality Index itself is a piecewise linear function of the input pollutant concentration.</p>","saqShortName":"United Kingdom"},{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":7,"isortOrder":6,"saqLongName":"Australia NEPM","slongDescriptiveText":"<p>Across Australia, each of the states and territories, the National Environmental Protection Measure (NEPM) is used to determine the standards and objectives around the air pollution monitoring. The Air Quality Index (AQI) is broken into six categories.</p><p>The AQI is designed to set standards that consist of quantifiable characteristics of the air against which ambient air quality can be assessed. The desired environmental outcome of this Measure is ambient air quality that allows for the adequate protection of human health and well-being.</p><p>The PM 2.5 concentration is typically averaged over a 24 hour period, but Davis Instruments also provides the AQI based on the US EPA NowCast averaged concentration. A consistent approach is taken with air quality indices, using a simple linear scale where 100 represents the concentration standard for each pollutant. The daily concentration standard for PM 2.5 in Australia is 25 ug/m^3. As such, the index is calculated to be exactly four times the concentration.</p>","saqShortName":"Australia"},{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":4,"isortOrder":7,"saqLongName":"India CPCB National","slongDescriptiveText":"<p>The National Air Quality Index (AQI) was launched in India in 2014. The Central Pollution Control Board along with State Pollution Control Boards (SPCB) have been operating the National Air Monitoring Program (NAMP). There are six AQI categories: Good, Satisfactory, Moderately Polluted, Poor, Very Poor, and Severe.</p><p>An expert group comprising medical professionals, air quality experts, academia, advocacy groups, and SPCB's was constituted and a technical study was awarded to the Indian Institute of Technology (IIT) Kanpur. IIT Kanpur and the Expert Group recommended the AQI sc
242heme that is in use today.</p><p>Based on the measured ambient concentrations, corresponding standards and likely health impact, an index is calculated. The PM 2.5 concentration is typically averaged over a 24 hour period, but Davis Instruments also provides the AQI based on the US EPA NowCast averaged concentration. The Air Quality Index itself is a piecewise linear function of the input pollutant concentration.</p>","saqShortName":"India"},{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":5,"isortOrder":8,"saqLongName":"China MEP","slongDescriptiveText":"<p>China's Ministry of Ecology and Environment, formerly the Ministry of Environmental Protection (MEP) is responsible for measuring the level of air pollution in China. There are six Air Quality Index (AQI) categories: Excellent, Good, Lightly Polluted, Moderately Polluted, Heavily Polluted, and Severely Polluted.</p><p>The AQI \"score\" is non-linear. Thus an AQI of 300 does not mean twice the pollution of AQI at 150, nor does it mean the air is twice as harmful. While an AQI of 50 from day 1 to 182 and AQI of 100 from day 183 to 365 does provide an annual average of 75, it does not mean the pollution is acceptable even if the benchmark of 100 is deemed safe. Because the benchmark is a 24-hour target, and the annual average must match the annual target, it is entirely possible to have safe air every day of the year but still fail the annual pollution benchmark.</p><p>The AQI value can be calculated either per hour or per 24 hours. Davis Instruments also provides the AQI based on the US EPA NowCast averaged concentration. The IAQI of each pollutant is calculated according to a formula published by the MEP, which is a piecewise linear function of the input pollutant concentration.</p>","saqShortName":"China"},{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":9,"isortOrder":9,"saqLongName":"Mexico IMECA","slongDescriptiveText":"<p>The Índice Metropolitano de la Calidad del Aire or IMECA, in English meaning the Metropolitan Index of Air Quality, is the reference value system for the levels of air pollution in the Mexico City Metropolitan Area, within the Valley of Mexico. To report the quality of the air, the IMECA uses 5 index categories, which in English roughly translate to these category names: Good, Moderate, Poor, Very Poor, and Extremely Poor.</p><p>IMECA was established for the inhabitants of Mexico City and the Greater Mexico City area to know the real-time levels of air pollution in their urban environment. IMECA values establish limits to protect the health of the population.</p><p>The IMECA is published every hour for the population of the Metropolitan Zone of the Valley of Mexico, which covers the entire Federal District and the metropolitan area of the State of Mexico. Davis Instruments also provides the IMECA based on the US EPA NowCast averaged concentration. The index in IMECA is calculated based upon a different linear algorithms for each of the 5 index categories, each of which has a progressively shallower slope from the the Good to Very Poor category. The Poor category is set to the value of the Official Mexican Air Quality Standard concentration value for PM 2.5.</p>","saqShortName":"Mexico"},{"aqiLabel":"1 Hr AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":11,"isortOrder":10,"saqLongName":"Japan MOE","slongDescriptiveText":"<p>The Ministry of Environment (MOE) of the Government of Japan uses the an Air-quality Index (AQI) to describe the ambient air quality based on the health risks of air pollution. The MOE does not employ an index scale, but simply assigns the pollutant concentration to a risk level color band. The color bands are divided into six categories.</p><p>The MOE doesn't provide names for each risk level color band. Davis Instruments uses a slight modification of the AIRKOREA naming scheme to provide useful names. The standards employed in South Korea generally follow the same standards set in Japan. There is no public documentation that confirms the averaging period used in the air quality concentration measurements, but it is considered likely that these are based on on a one hour average PM 2.5 concentration given the air quality standard thresholds set by other industrialized countries.</p>","saqShortName":"Japan"},{"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":6,"isortOrder":11,"s
242aqLongName":"AIRKOREA MOE Common","slongDescriptiveText":"<p>The Ministry of Environment (MOE) of South Korea uses the Comprehensive Air-quality Index (CAI) to describe the ambient air quality based on the health risks of air pollution. The index aims to help the public easily understand the air quality and protect people's health. The CAI which is divided into six categories. The higher the CAI value, the greater the level of air pollution.</p><p>The increasing public interest in air pollution and a clean and safe environment has led to raising the need for air quality information across the country. A website, named AIRKOREA, was launched in 2005 to provide air pollution information to the public.</p><p>Davis Instruments provides the AQI based on the US EPA NowCast averaged concentration. The CAI is on a scale from 0 to 500 and is a piecewise linear function of the input pollutant concentration for each main category. Any concentration value above the Good category exceeds the daily concentration standard.</p>","saqShortName":"South Korea"},{"aqiLabel":"1 Hr AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":12,"isortOrder":12,"saqLongName":"Singapore PSI","slongDescriptiveText":"<p>The National Environment Agency (NEA) is the leading public organisation responsible for ensuring a clean and sustainable environment for Singapore. It computes an Air Quality Index that it calls the Pollutants Standards Index (PSI), which is a number used to indicate the level of pollutants in air. The PSI is reported as a number on a scale of 0 to 500. The index figures enable the public to determine whether the air pollution levels in a particular location are good, unhealthy, hazardous or worse.</p>","saqShortName":"Singapore"},{"aqiLabel":"1 Hr AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":13,"isortOrder":13,"saqLongName":"Colombia MADS","slongDescriptiveText":"<p>The Air Quality Index (ICA) allows comparing the levels of air pollution of the monitoring stations that make up an Air Quality Surveillance System. The Air Quality Index has been adopted based on the technical recommendations contained in the Technical Assistance Document for the Reporting of Daily Air Quality. This ICA is divided into six categories indicating increasing levels of health concern: Good, Moderate, Unhealthy for Sensitive Groups, Unhealthy, Very Unhealthy, and Hazardous.</p>","saqShortName":"Colombia"}];
243    wl.selectedScheme = {"aqiLabel":"NowCast AQI","aqiLabelShort":null,"inumberOfHighPrecisionFractionalDigits":1,"inumberOfLowPrecisionFractionalDigits":0,"iaqSchemeId":1,"isortOrder":1,"saqLongName":"United States EPA","slongDescriptiveText":"<p>The United States Environmental Protection Agency (EPA) has developed an Air Quality Index (AQI) that is used to report air quality. This AQI is divided into six categories indicating increasing levels of health concern: Good, Moderate, Unhealthy for Sensitive Groups (USG), Unhealthy, Very Unhealthy, and Hazardous.</p>\n<p>The EPA has established National Ambient Air Quality Standards (NAAQS) in order to protect public health. An AQI value of 100 generally corresponds to the level of the NAAQS for the pollutant. The Clean Air Act (USA) (1990) requires the EPA to review its National Ambient Air Quality Standards every five years to reflect evolving health effects information. The Air Quality Index is adjusted periodically to reflect these changes.</p><p>Real-time monitoring data are typically available as 1-hour averages. However, computation of the AQI for some pollutants requires averaging over multiple hours of data. (For example, calculation of the PM 2.5 AQI requires a 24-hour average.) To accurately reflect the current air quality, the multi-hour average used for the AQI computation should be centered on the current time, but as concentrations of future hours are unknown and are difficult to estimate accurately, the EPA uses surrogate concentrations to estimate these multi-hour averages. This surrogate concentration is called the NowCast. Nowcast is a particular type of exponentially weighted moving average that provides more weight to the most recent air quality data when air pollution levels are changing. The Air Quality Index itself is a piecewise linear function of the input pollutant concentration.</p>","saqShortName":"USA"};
244    wl.applyWoodSmokeFilter = false;
245    wl.focusOnStation = false;
246    wl.googleMapId = "754bd07f2844e377";
247    
248    wl.currentStationUnmapped = false;
249    wl.showUnmappedStation = false;
250    
251    wl.__bootstrap_system_info = {
252        userId: 60000,
253        gatewayTypeAbbrev: "MAIA"
254    };
255    wl.__bootstrap_user_info = {
256        sUsername: "DavisGuest",
257        iUserId: 60017
258    };
259</script>
259
260<script type="text/javascript" src="https://js.stripe.com/v3/"></script>
260
261<script src="/js/10.0.7.4-c92a18e7/vendor/l20n/polyfills/browser.js"></script>
261
262<script src="/js/10.0.7.4-c92a18e7/vendor/l20n/polyfills/Template.js"></script>
262
263<script src="/js/10.0.7.4-c92a18e7/vendor/l20n/l20n.js"></script>
263
264
265<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"
266        integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="
267        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
267
268
269<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script>
269
270
271<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"
272        integrity="sha512-57oZ/vW8ANMjR/KQ6Be9v/+/h6bq9/l3f0Oc7vn6qMqyhvPd1cvKBRWWpzu0QoneImqr2SkmO4MSqU+RpHom3Q=="
273        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
273
274
275<script src="/js/10.0.7.4-c92a18e7/vendor/jquery/jquery.ui.touch-punch.js"></script>
275
276<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
276
277<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-cuYeSxntonz0PPNlHhBs68uyIAVpIIOZZ5JqeqvYYIcEL727kskC66kF92t6Xl2V" crossorigin="anonymous"></script>
277
278<script src="https://cdnjs.cloudflare.com/ajax/libs/packery/2.1.1/packery.pkgd.min.js"></script>
278
279<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>
279
280<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.5/jquery.validate.min.js"></script>
280
281<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.5/additional-methods.js"></script>
281
282<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js"></script>
282
283<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.wreqr/1.3.3/backbone.wreqr.min.js"></script>
283
284<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.babysitter/0.1.8/backbone.babysitter.min.js"></script>
284
285<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.marionette/2.4.1/backbone.marionette.min.js"></script>
285
286<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/marionette/marionette-polyfills.js"></script>
286
287
288<script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.6/highcharts.js"></script>
288
289<script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.6/highcharts-more.js"></script>
289
290<script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.6/js/modules/solid-gauge.js"></script>
290
291<script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/6.0.6/js/modules/boost.js"></script>
291
292<script src="/js/10.0.7.4-c92a18e7/vendor/highcharts/highchartsDrawLegendSymbol.js"></script>
292
293
294<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"
295        integrity="sha256-vvT7Ok9u6GbfnBPXnbM6FVDEO8E1kTdgHOFZOAXrktA="
296        crossorigin="anonymous"></script>
296
297
298<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.34/moment-timezone-with-data.min.js"
299        integrity="sha256-vfoPHEia3DQCyR1jROWW/OKWQTIrEZXdRuiTIN68h4k=" crossorigin="anonymous"></script>
299
300
301<script src="https://cdnjs.cloudflare.com/ajax/libs/accounting.js/0.4.1/accounting.min.js"></script>
301
302<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.perfect-scrollbar/0.6.12/js/perfect-scrollbar.jquery.min.js"></script>
302
303<script src="/js/10.0.7.4-c92a18e7/vendor/davis/logging.js"></script>
303
304<script src="/js/10.0.7.4-c92a18e7/vendor/davis/navbar.js"></script>
304
305<script src="/js/10.0.7.4-c92a18e7/vendor/davis/ajax-handler.js"></script>
305
306<script type="text/javascript"
307        src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBkpKx8mNMFQ4p5N9GnFqH9IbGX7NYM73o&libraries=places,geometry"></script>
307
308<script src="/js/10.0.7.4-c92a18e7/vendor/davis/utils.js"></script>
308
309<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/map/constants.js"></script>
309
310<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/templates-shared-compiled.js"></script>
310
311<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/views/migrateDevice.js"></script>
311
312<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/views/mergeAccounts.js"></script>
312
313<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/views/comparePlans.js"></script>
313
314
315<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/dayjs.min.js" integrity="sha512-KTFpdbCb05CY4l242bLjyaPhoL9vAy4erP1Wkn7Rji0AG6jx6zzGtKkdHc7jUOYOVSmbMbTg728u260CA/Qugg=="
316        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 316
316
317<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/plugin/timezone.min.js" integrity="sha512-5B0kN+0UECcx7IszahbNmyocfPwR5MNpyggUEgq9nb6Sl5apxs8yl5Q2847Gsa3xXZtsFRVUj7TskUyT+TxXqw=="
318        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 318
318
319<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/plugin/utc.min.js" integrity="sha512-TU4ndEYOqql+pMXn14M8RDWsjjD+VPUA2RoWSuuFd+blPJW4oLrL1w1zAGdlrk4jsE2FEBH5CU3+fmogVYEqIQ=="
320        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 320
320
321<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/plugin/advancedFormat.min.js" integrity="sha512-MGC6Za7V8BU0nL3GVjgssHGIZkIMM6A+tcnxqwkdDASdOnyHwmCwyoVfxSYDxiznl4DDYeZP0Jn0p5MW+r4Rnw=="
322        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 322
322
323<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/plugin/localizedFormat.min.js" integrity="sha512-webaelc41/yR5a3vWQMwU1o6nqNPlwiiF9T4UfUJjGb/+jTHvpd7Xbj1d4IkHTxrjOnrl04W2D6ytruI9NNWhw=="
324        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 324
324
325<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/plugin/customParseFormat.min.js" integrity="sha512-nbPJ/ANJ1DCwUWGyfS+PY7RMysy5UnFyOzPTjzcphOuVbUqrukQAZ9kkNvTkPmItJRuuL5IqNufQTHPyxxpmig=="
326        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 326
326
327<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.1/plugin/duration.min.js" integrity="sha512-QxVJ3lAILV0RSq3wPNV5CFNyyywxd5QfA9jfGfzVViwpL/eWSi5dR1nZMc02c+QE4xz2L1eQvx/fn18RrUq9lw=="
328        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
328
329
330<script type="text/javascript">
331  dayjs.locale('en');
332  dayjs.extend(dayjs_plugin_utc);
333  dayjs.extend(dayjs_plugin_timezone);
334  dayjs.extend(dayjs_plugin_advancedFormat);
335  dayjs.extend(dayjs_plugin_localizedFormat);
336  dayjs.extend(dayjs_plugin_customParseFormat);
337  dayjs.extend(dayjs_plugin_duration);
338</script>
338
339<script type="text/javascript">
340    moment.locale('en');
341    wl.__bootstrap_is_guest = true;
342</script>
342
343    
343<script>
344        wl.__bootstrap_device_subscription_tier = 1;
345        $('.chartAnchor').on('click', function (event) {
346            event.stopPropagation();
347            window.location.href = '/chart/plot/9722cfc3-a4ef-47b9-befb-72f52592d6ed';
348        });
349        $('.reportsAnchor').on('click', function (event) {
350            event.stopPropagation();
351            window.location.href = '/report/noaa/month/9722cfc3-a4ef-47b9-befb-72f52592d6ed';
352        });
353
354        wl.__bootstrap_user_thumb_image = "https://s3.amazonaws.com/usercontent.wl2-live/profile/e1dfc8176d914635aba8b99617128801.th.png?ver=1790191473";
355        wl.__bootstrap_user_first_name = "Guest";
356        wl.__bootstrap_user_last_name = " ";
357        wl.__bootstrap_user_username = "DavisGuest";
358        wl.__bootstrap_user_userId = 60017;
359        wl.__bootstrap_user_subscriptionCancelled = 0;
360
361        wl.__deviceSidebar = [];
362        wl.__featureFlags = {"EMBEDDABLE_PAGE":true,"COMPANY_DEVICE_MGR":true,"MONTHLY_SUMMARY":true,"AIRLINK":true,"CHARGE_SALES_TAX":true,"WL_DATA_IMPORT":true,"FARMBEATS":true,"VC_EM_IMPORT":true,"V2_API_KEY":true,"GENERATE_KEY":true,"MERGE_USER":true,"USER_MESSAGING":true,"STRIP_CHARTS":true,"MIGRATE_DEVICE":false,"COMPANY_USER_MGR":true,"EMBEDDABLE_SUMMARY":true,"CONTRAIL":true};
363        wl.__showRightPanelForGuest = false;
364        
365        wl.__stationLocation = {};
366            wl.__bootstrap_user_maxHistoryInMonths = 0;
367            wl.__canAccessExtraSensors = 0;
368            wl.__bootstrap_user_subscriptionTermId = 1;
369            wl.__bootstrap_user_subscriptionTypeId = 2;
370            wl.__bootstrap_user_trialSubscription = 1;
371            wl.__bootstrap_user_subscriptionExpiration = "February 01, 2224";
372            wl.__bootstrap_user_subscriptionNumUpgradesToRenew = "0";
373        
374            wl.__bootstrap_user_subscriptionType = "Pro"
375            wl.__boostrap_user_subscription_daysRemaining = -1;
376
377        wl.__canAccessWebChart = 1;
378        wl.__canAccessWebData = 1;
379        wl.__canAccessPublic = 0;
380        wl.__canAccessDeviceConfig =false;
381        wl.__isDavisDefaultStation = 1;
382        wl.__isPublicStation = true;
383        wl.__isEMVC = true;
384        wl.__isShared = false;
385        wl.__isAqs = false;
386        wl.__isAqsWoodSmokeEnabled = false;
387        wl.__javaScriptKey = "AIzaSyBkpKx8mNMFQ4p5N9GnFqH9IbGX7NYM73o";
388        wl.__googleMapId = "754bd07f2844e377";
389        wl.__firebaseConfig = {"apiKey":"AIzaSyCMze3A9yjUnUZyFcbJZgyFTFbTkteqU2U","authDomain":"enviromonitorprod.firebaseapp.com","databaseURL":"https://enviromonitorprod.firebaseio.com","projectId":"enviromonitorprod","storageBucket":"enviromonitorprod.appspot.com","messagingSenderId":"2977731221","appId":"1:2977731221:web:b60a555fb88a48baf2019c"};
390    </script>
390
391    
391<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script>
391
392    
392<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/utils.js"></script>
392
393	
393<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/templates-shared-compiled.js"></script>
393
394    
394<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/map/templates-compiled.js"></script>
394
395    
395<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/accountSubscription/templates-compiled.js"></script>
395
396	
396<script src="/js/10.0.7.4-c92a18e7/vendor/markerClusterer/markerclusterer_davis.js"></script>
396
397	
397<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/map/infobox.js"></script>
397
398	
398<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/views/right-panel-view.js"></script>
398
399	
399<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/views/account-list-view.js"></script>
399
400    
400<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/views/user-info-view.js"></script>
400
401	
401<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/map/app.js"></script>
401
402	
402<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/modules/shareCalls.js"></script>
402
403	
403<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/modules/myDevicesList.js"></script>
403
404	
404<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/modules/shareOptions.js"></script>
404
405    
405<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/map/search-dropdown.js"></script>
405
406    
406<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/map/aqiSchemeSelector.js"></script>
406
407	
407<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/map/map.js"></script>
407
408    
408<script src="/js/10.0.7.4-c92a18e7/vendor/davis/modules/modal.js"></script>
408
409    
409<script src="/js/10.0.7.4-c92a18e7/vendor/davis/validation/formValidator.js"></script>
409
410    
410<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/jquery/jquery.combobox.js"></script>
410
411    
411<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/device/deviceValidators.js"></script>
411
412    
412<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/accountSubscription/addressValidation.js"></script>
412
413    
413<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/accountSubscription/makePayment.js"></script>
413
414    
414<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/device/modules/addDevice.js"></script>
414
415    
415<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/device/modules/addVcFlow.js"></script>
415
416    
416<script type="text/javascript" src="/js/10.0.7.4-c92a18e7/vendor/davis/modules/whatsNewCarousel.js"></script>
416
417	
417<script>
418		// The user has provided an address in the URL.  use that, if possible.
419			wl.mapConstants.oMapOptionsDefault.center = new google.maps.LatLng(37.63662 , -122.12629);
420			wl.mapConstants.oMapOptionsDefault.zoom = 8;
421        var lastViewedPageUrl = "/map";
422	</script>
422
423<div class="search-dropdown">
424</div>
425    
425<script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-app.js"></script>
425
426    
426<script src="https://www.gstatic.com/firebasejs/8.2.1/firebase-database.js"></script>
426
427    
427<script>
428        var myUnreadCount = 0;
429        var globalTotal = 0;
430        var userTotal = 0;
431        var userRead = 0;
432        // Initialize Firebase
433        if (wl.__firebaseConfig != null) {
434            firebase.initializeApp(wl.__firebaseConfig);
435            firebase.database().ref("urgentMsg").on('value', function (snapshot) {
436                Navbar && Navbar.setUrgentMessage(snapshot.val());
437            }, function (error) {
438                console.error(error);
439            });
440			
441			if(!wl.__bootstrap_is_guest){
442			
443	            firebase.database().ref("userMessages").on('value', function (snapshot) {
444	                Navbar && Navbar.setUrgentMessage(snapshot.val());
445	            }, function (error) {
446	                console.error(error);
447	            });
448	
449	
450	            firebase.database().ref("userMessages/globalTotal").on('value', function (snapshot) {
451	                var globalTotalValue = snapshot.val();
452	                globalTotal = globalTotalValue;
453	                console.log("global total count is " + globalTotal);
454	                wl.app.vent.trigger("userUnreadCount", countUserUnread());
455	            }, function (error) {
456	                console.error(error);
457	            });
458	
459	            //user total 
460	            firebase.database().ref("userMessages/userTotal").on('value', function (snapshot) {
461	                //reset this user's total message count as the count might be 0 in which case
462	                // we won't find user's key in the userTotalValueMap
463	                userTotal = 0;
464	                var userTotalValuesMap = snapshot.val();
465	                if (userTotalValuesMap && userTotalValuesMap[wl.__bootstrap_user_userId]) {
466	                    userTotal = userTotalValuesMap[wl.__bootstrap_user_userId];
467	                }
468	                console.log("user total count is " + userTotal);
469	                wl.app.vent.trigger("userUnreadCount", countUserUnread());
470	            }, function (error) {
471	                console.error(error);
472	            });
473	
474	            //user Read
475	            firebase.database().ref("userMessages/userRead").on('value', function (snapshot) {
476	                //reset this user's read message count as the count might be 0 in which case
477	                // we won't find user's key in the userReadValueMap
478	                userRead = 0;
479	                var userReadValuesMap = snapshot.val();
480	                if (userReadValuesMap && userReadValuesMap[wl.__bootstrap_user_userId]) {
481	                    userRead = userReadValuesMap[wl.__bootstrap_user_userId];
482	                }
483	                console.log("user read count is " + userRead);
484	                wl.app.vent.trigger("userUnreadCount", countUserUnread());
485	            }, function (error) {
486	                console.error(error);
487	            });
488
489			}//!isGuest()
490			
491            function countUserUnread() {
492              return globalTotal + userTotal - userRead;
493            }
494        }
495    </script>
495
496</body>
497<!-- centralized hook for REST Unauthorized access to protected resources -->
498<script>
499    //remove existing error handlers if any and control the error case for all pages that use this
500    // as base ftl
501    $(document).off('ajaxError');
502    $(document).ajaxComplete(function(event,xhr,settings){
503        if(xhr.status == 401){
504            //some views may override the redirect i.e.  mobile payment flow
505            window.location.href = "/";
506        }
507    });
508</script>
508
509</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.