Create a time slider

Present seismic activities using a slider that spans a specific time range. Utilizing the Map#setFilter function and the D3.js library, construct a timeline slider to visually represent earthquakes that occurred in the year 2015 and had a magnitude greater than 5.9. Use the slider bar to filter earthquakes by month.

NPM module setup


npm install --save @maptiler/sdk d3
import { Map, MapStyle, config } from '@maptiler/sdk';
import '@maptiler/sdk/dist/maptiler-sdk.css';
import * as d3 from 'd3';

config.apiKey = 'YOUR_MAPTILER_API_KEY_HERE';
const map = new Map({
    container: 'map',
    style: MapStyle.STREETS, 
    center: [31.4606, 20.7927],
    zoom: 0.5
});

const months = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
];

function filterBy(month) {
    const filters = ['==', 'month', month];
    map.setFilter('earthquake-circles', filters);
    map.setFilter('earthquake-labels', filters);

    // Set the label to the month
    document.getElementById('month').textContent = months[month];
}

map.on('load', function () {
    // Data courtesy of http://earthquake.usgs.gov/
    // Query for significant earthquakes in 2015 URL request looked like this:
    // http://earthquake.usgs.gov/fdsnws/event/1/query
    //    ?format=geojson
    //    &starttime=2015-01-01
    //    &endtime=2015-12-31
    //    &minmagnitude=6'
    //
    // Here we're using d3 to help us make the ajax request but you can use
    // Any request method (library or otherwise) you wish.
    d3.json(
        'https://docs.maptiler.com/sdk-js/assets/significant-earthquakes-2015.geojson',
        function (err, data) {
            if (err) throw err;

            // Create a month property value based on time
            // used to filter against.
            data.features = data.features.map(function (d) {
                d.properties.month = new Date(d.properties.time).getMonth();
                return d;
            });

            map.addSource('earthquakes', {
                'type': 'geojson',
                data: data
            });

            map.addLayer({
                'id': 'earthquake-circles',
                'type': 'circle',
                'source': 'earthquakes',
                'paint': {
                    'circle-color': [
                        'interpolate',
                        ['linear'],
                        ['get', 'mag'],
                        6,
                        '#FCA107',
                        8,
                        '#7F3121'
                    ],
                    'circle-opacity': 0.75,
                    'circle-radius': [
                        'interpolate',
                        ['linear'],
                        ['get', 'mag'],
                        6,
                        20,
                        8,
                        40
                    ]
                }
            });

            map.addLayer({
                'id': 'earthquake-labels',
                'type': 'symbol',
                'source': 'earthquakes',
                'layout': {
                    'text-field': [
                        'concat',
                        ['to-string', ['get', 'mag']],
                        'm'
                    ],
                    'text-font': [
                        'Open Sans Bold',
                        'Arial Unicode MS Bold'
                    ],
                    'text-size': 12
                },
                'paint': {
                    'text-color': 'rgba(0,0,0,0.5)'
                }
            });

            // Set filter to first month of the year
            // 0 = January
            filterBy(0);

            document
                .getElementById('slider')
                .addEventListener('input', function (e) {
                    const month = parseInt(e.target.value, 10);
                    filterBy(month);
                });
        }
    );
});
Point filtering by property

Point filtering by property

Examples

Filter features in real time by property.

Change between light and dark mode based on the time of day

Change to dark mode at sunset

Examples

Toggle light and dark map modes based on time.

Point layer cluster (point helper)

Point layer cluster (point helper)

Examples

Add clustered point layer using MapTiler point helper.

Update a feature in realtime

Update a feature in realtime

Examples

Change an existing feature on your map in real-time by updating its data.

Was this helpful?