Filter symbols by text input

Filter symbols by icon name by typing in a text input.

NPM module setup


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

config.apiKey = 'YOUR_MAPTILER_API_KEY_HERE';
const places = {
    'type': 'FeatureCollection',
    'features': [
        {
            'type': 'Feature',
            'properties': {
                'icon': 'theatre'
            },
            'geometry': {
                'type': 'Point',
                'coordinates': [-77.038659, 38.931567]
            }
        },
        {
            'type': 'Feature',
            'properties': {
                'icon': 'theatre'
            },
            'geometry': {
                'type': 'Point',
                'coordinates': [-77.003168, 38.894651]
            }
        },
        {
            'type': 'Feature',
            'properties': {
                'icon': 'bar'
            },
            'geometry': {
                'type': 'Point',
                'coordinates': [-77.090372, 38.881189]
            }
        },
        {
            'type': 'Feature',
            'properties': {
                'icon': 'bicycle'
            },
            'geometry': {
                'type': 'Point',
                'coordinates': [-77.052477, 38.943951]
            }
        },
        {
            'type': 'Feature',
            'properties': {
                'icon': 'music'
            },
            'geometry': {
                'type': 'Point',
                'coordinates': [-77.031706, 38.914581]
            }
        },
        {
            'type': 'Feature',
            'properties': {
                'icon': 'music'
            },
            'geometry': {
                'type': 'Point',
                'coordinates': [-77.020945, 38.878241]
            }
        },
        {
            'type': 'Feature',
            'properties': {
                'icon': 'music'
            },
            'geometry': {
                'type': 'Point',
                'coordinates': [-77.007481, 38.876516]
            }
        }
    ]
};

const layerIDs = []; // Will contain a list used to filter against.
const filterInput = document.getElementById('filter-input');
const map = new Map({
    container: 'map',
    style: MapStyle.STREETS, 
    center: [-77.04, 38.907],
    zoom: 11.15
});

map.on('load', function () {
    // Add a GeoJSON source containing place coordinates and information.
    map.addSource('places', {
        'type': 'geojson',
        'data': places
    });

    places.features.forEach(function (feature) {
        const symbol = feature.properties['icon'];
        const layerID = 'poi-' + symbol;

        // Add a layer for this symbol type if it hasn't been added already.
        if (!map.getLayer(layerID)) {
            map.addLayer({
                'id': layerID,
                'type': 'symbol',
                'source': 'places',
                'layout': {
                    'icon-image': symbol,
                    'icon-overlap': 'always',
                    'text-field': symbol,
                    'text-font': [
                        'Open Sans Bold',
                        'Arial Unicode MS Bold'
                    ],
                    'text-size': 11,
                    'text-transform': 'uppercase',
                    'text-letter-spacing': 0.05,
                    'text-offset': [0, 1.5]
                },
                'paint': {
                    'text-color': '#202',
                    'text-halo-color': '#fff',
                    'text-halo-width': 2
                },
                'filter': ['==', 'icon', symbol]
            });

            layerIDs.push(layerID);
        }
    });

    filterInput.addEventListener('keyup', function (e) {
        // If the input value matches a layerID set
        // it's visibility to 'visible' or else hide it.
        const value = e.target.value.trim().toLowerCase();
        layerIDs.forEach(function (layerID) {
            map.setLayoutProperty(
                layerID,
                'visibility',
                layerID.indexOf(value) > -1 ? 'visible' : 'none'
            );
        });
    });
});
Filter symbols by toggling a list

Filter symbols by toggling a list

Examples

Filter symbols based on property values in the dataset.

Point filtering by property

Point filtering by property

Examples

Filter features in real time by property.

Geocoding search for POIs near the user's location

Geocoding search for POIs near the user's location

Examples

Filter geocoding search results by specific place types.

How to use and filter data for MapTiler Countries

Countries filter

Tutorials

Filter MapTiler Countries data to create choropleth maps.

Was this helpful?