import { indexOf } from 'lodash'; import { Feature } from 'ol'; export const overlayDefinitions = { amenity: { bar: { hiking: { drinking: true } }, fast_food: { hiking: { eating: true } }, food_court: { hiking: { eating: true } }, pub: { hiking: { eating: true } }, restaurant: { hiking: { eating: true } }, cafe: { hiking: { drinking: true } }, atm: { hiking: { money: true, dayToDay: true } }, bank: { hiking: { money: true, dayToDay: true } }, doctors: { hiking: { health: true } }, hospital: { hiking: { health: true } }, pharmacy: { hiking: { health: true } }, police: { hiking: { security: true } }, fire_station: { hiking: { security: true } }, drinking_water: { hiking: { drinking: true } }, water_point: { hiking: { drinking: true } }, waste_basket: { hiking: { dayToDay: true } }, waste_disposal: { hiking: { dayToDay: true } }, vending_machine: { hiking: { dayToDay: true } }, }, shop: { bakery: { hiking: { eating: true } }, butcher: { hiking: { eating: true } }, cheese: { hiking: { eating: true } }, chocolate: { hiking: { eating: true } }, convenience: { hiking: { eating: true } }, dairy: { hiking: { eating: true } }, farm: { hiking: { eating: true } }, greengrocer: { hiking: { eating: true } }, health_food: { hiking: { eating: true } }, pasta: { hiking: { eating: true } }, pastry: { hiking: { eating: true } }, seafood: { hiking: { eating: true } }, water: { hiking: { drinking: true } }, department_store: { hiking: { dayToDay: true } }, general: { hiking: { dayToDay: true } }, mall: { hiking: { dayToDay: true } }, supermarket: { hiking: { eating: true } }, wholesale: { hiking: { eating: true } }, outdoor: { hiking: { material: true } }, laundry: { hiking: { dayToDay: true } }, }, tourism: { hotel: { hiking: { sleeping: true } }, alpine_hut: { hiking: { sleeping: true } }, apartment: { hiking: { sleeping: true } }, camp_site: { hiking: { sleeping: true } }, chalet: { hiking: { sleeping: true } }, guest_house: { hiking: { sleeping: true } }, hostel: { hiking: { sleeping: true } }, motel: { hiking: { sleeping: true } }, wilderness_hut: { hiking: { sleeping: true } }, viewpoint: { hiking: { naturalSites: true } }, }, waterway: { waterfall: { hiking: { naturalSites: true } } }, natural: { peak: { hiking: { naturalSites: true } }, cave_entrance: { hiking: { naturalSites: true } }, volcano: { hiking: { naturalSites: true } }, arch: { hiking: { naturalSites: true } }, arete: { hiking: { naturalSites: true } }, fumarole: { hiking: { naturalSites: true } }, rock: { hiking: { naturalSites: true } }, saddle: { hiking: { naturalSites: true } }, sinkhole: { hiking: { naturalSites: true } }, stone: { hiking: { naturalSites: true } }, glacier: { hiking: { naturalSites: true } }, spring: { hiking: { naturalSites: true } }, hot_spring: { hiking: { naturalSites: true } }, geyser: { hiking: { naturalSites: true } }, }, }; let _flat: any = []; Object.values(overlayDefinitions).forEach((category) => { Object.values(category).forEach((subCategory) => { _flat = [..._flat, subCategory]; }); }); type Categories = { string: Set }; export let overlayCategories: Categories = {}; _flat.forEach((obj: any) => { Object.keys(obj).forEach((catName: string) => { const catValue = obj[catName]; const previous = overlayCategories[catName] === undefined ? [] : overlayCategories[catName]; overlayCategories[catName] = new Set([ ...previous, ...Object.keys(catValue), ]); }); }); export const getVectorTileFeatureType = (feature: Feature) => { if ( ['hiking'].includes(feature.get('route')) || ['path', 'track', 'footway', 'steps'].includes(feature.get('highway')) ) { return 'way'; } if ( Object.keys(overlayDefinitions).some((tagName) => { const tagValue = feature.get(tagName); return Object.keys(overlayDefinitions[tagName]).includes(tagValue); }) ) { return 'poi'; } }; console.log({ caller: 'overlay-definitions', overlayDefinitions, _flat, overlayCategories, });