Maps SDK for JavaScript
Back to all examples
Map POI filters
Filter POI categories with show/hide modes
import { TomTomConfig } from '@tomtom-org/maps-sdk/core'; import { FilterablePOICategory, FilterShowMode, MapStylePOICategory, POICategoryGroup, POIsModule, TomTomMap, ValuesFilter, } from '@tomtom-org/maps-sdk/map'; import './style.css'; import { API_KEY } from './config'; // (Set your own API key when working in your own environment) TomTomConfig.instance.put({ apiKey: API_KEY, language: 'en-GB' }); (async () => { let poisModule: POIsModule; let modeSelector: HTMLSelectElement; const filterInputs: HTMLInputElement[] = []; const categories: Partial<Record<FilterablePOICategory, string>> = { FOOD_DRINKS_GROUP: 'Food & Drinks', TRANSPORTATION_GROUP: 'Transportation', HOLIDAY_TOURISM_GROUP: 'Holiday & Tourism', HEALTH_GROUP: 'Health', PARKING_GROUP: 'Parking', SHOPPING_GROUP: 'Shopping', ACCOMMODATION_GROUP: 'Accommodation', ENTERTAINMENT_GROUP: 'Entertainment', GOVERNMENT_GROUP: 'Government Organizations', EDUCATION_GROUP: 'Education', GAS_STATIONS_GROUP: 'Gas Stations', EV_CHARGING_STATIONS_GROUP: 'EV Charging Stations', }; let categoryFilter: ValuesFilter<FilterablePOICategory> = { show: 'all_except', values: [], }; const toggleCategoryFilter = (category: MapStylePOICategory | POICategoryGroup, isChecked: boolean) => { isChecked ? categoryFilter.values.push(category) : (categoryFilter.values = categoryFilter.values.filter((cat) => cat != category)); poisModule.filterCategories(categoryFilter); }; const changeFilterMode = (mode: FilterShowMode) => { categoryFilter.show = mode; poisModule.filterCategories(categoryFilter); }; const resetConfig = () => { categoryFilter = { show: 'all_except', values: [], }; poisModule.filterCategories(categoryFilter); filterInputs.forEach((input) => (input.checked = categoryFilter.values.includes(input.value))); modeSelector.selectedIndex = 0; }; const createFilterToggles = () => { const container = document.getElementById('sdk-example-filters-container'); for (const [key, value] of Object.entries(categories)) { const item = document.createElement('div'); item.className = 'sdk-example-item'; const input = document.createElement('input'); input.type = 'checkbox'; input.value = key; input.checked = categoryFilter.values.includes(input.value); input.id = key; const label = document.createElement('label'); label.htmlFor = key; label.innerText = value as string; item.appendChild(input); item.appendChild(label); filterInputs.push(input); container?.appendChild(item); } }; const listenToUserEvents = () => { const items = document.querySelectorAll('.sdk-example-item input'); items.forEach((item) => item.addEventListener('change', (e) => { const target = e.target as HTMLInputElement; toggleCategoryFilter(target.value, target.checked); }), ); modeSelector = document.getElementById('sdk-example-mode-selector') as HTMLSelectElement; modeSelector?.addEventListener('change', (e) => changeFilterMode((e.target as HTMLSelectElement).value as FilterShowMode), ); const resetBtn = document.getElementById('sdk-example-reset'); resetBtn?.addEventListener('click', resetConfig); }; const map = new TomTomMap({ mapLibre: { container: 'sdk-map', center: [4.89437, 52.36859], zoom: 16.5, }, }); poisModule = await POIsModule.get(map); createFilterToggles(); listenToUserEvents(); })();
Related examples
Interactive roads and numbers
Base Map with interactive roads and house numbers.
Base Map
Web
Playground
User Interaction Events
Mixed User Interaction Events
Handle various map events and user interactions
Playground
Base Map
User Interaction Events
Web
Language playground
Switch between different map languages dynamically
Playground
Base Map
Web