Customizing alert styles

Customizing alert polygon styles

This example customizes the alert colors of the alerts weather layer by adjusting the color of the alert polygons based on the severity/type of each alert. This type of implementation can be useful when you want to highlight warnings vs watches vs advisories and statements.

alert-categories.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>MapsGL SDK - Customizing alert polygon styles</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
 
    <link href="https://api.mapbox.com/mapbox-gl-js/{% $versions.mapbox.current %}/mapbox-gl.css" rel="stylesheet" />
 
    <script defer src="https://api.mapbox.com/mapbox-gl-js/{% $versions.mapbox.current %}/mapbox-gl.js"></script>
    <script defer src="{% $paths.sdk %}"></script>
 
    <style>
        #map {
            height: 600px;
            margin: 30px auto;
            width: 1200px;
        }
    </style>
 
</head>
<body>
<div id="map"></div>
 
<script>
    window.addEventListener('load', () => {
 
        mapboxgl.accessToken = 'MAPBOX_TOKEN';
        const map = new mapboxgl.Map({
            container: document.getElementById('map'),
            style    : 'mapbox://styles/mapbox/dark-v9',
            center   : [-84.5, 30],
            zoom     : 5
        });
 
        const account = new aerisweather.mapsgl.Account('CLIENT_ID', 'CLIENT_SECRET');
        const controller = new aerisweather.mapsgl.MapboxMapController(map, {account});
 
        const determineAlertColor = (data) => {
            const title = data.ADVISORY;
 
            if (/warning|extreme/i.test(title)) return '#df1616';
            if (/watch|severe/i.test(title)) return '#ff9600';
            if (/advisory|moderate/i.test(title)) return '#009ac8';
            if (/statement|alert|minor/i.test(title)) return '#808080';
 
            return data.COLOR || '#000';
        };
 
        controller.on('load', () => {
            controller.addWeatherLayer('alerts', {
                paint: {
                    fill: {
                        color: (data) => {
                            return determineAlertColor(data);
                        },
                        opacity: 0.5
                    },
                    stroke: {
                        color: (data) => {
                            return determineAlertColor(data);
                        },
                        opacity: 1
                    }
                }
            });
        });
    });
</script>
 
</body>
</html>