import { indexOf } from 'lodash'; import { Feature } from 'ol'; export const overlayDefinitions = { hiking: { amenity: { bar: { drinking: true }, fast_food: { eating: true }, food_court: { eating: true }, pub: { eating: true, drinking: true }, restaurant: { eating: true }, cafe: { drinking: true }, atm: { money: true, dayToDay: true }, bank: { money: true, dayToDay: true }, doctors: { health: true }, hospital: { health: true }, pharmacy: { health: true }, police: { security: true }, fire_station: { security: true }, drinking_water: { drinking: true }, water_point: { drinking: true }, waste_basket: { dayToDay: true }, waste_disposal: { dayToDay: true }, vending_machine: { dayToDay: true }, }, shop: { bakery: { eating: true }, butcher: { eating: true }, cheese: { eating: true }, chocolate: { eating: true }, convenience: { eating: true }, dairy: { eating: true }, farm: { eating: true }, greengrocer: { eating: true }, health_food: { eating: true }, pasta: { eating: true }, pastry: { eating: true }, seafood: { eating: true }, water: { drinking: true }, department_store: { dayToDay: true }, general: { dayToDay: true }, mall: { dayToDay: true }, supermarket: { eating: true }, wholesale: { eating: true }, outdoor: { eating: true }, laundry: { dayToDay: true }, }, tourism: { hotel: { sleeping: true }, alpine_hut: { sleeping: true }, apartment: { sleeping: true }, camp_site: { sleeping: true }, chalet: { sleeping: true }, guest_house: { sleeping: true }, hostel: { sleeping: true }, motel: { sleeping: true }, wilderness_hut: { sleeping: true }, viewpoint: { naturalSites: true }, }, waterway: { waterfall: { naturalSites: true } }, natural: { peak: { naturalSites: true }, cave_entrance: { naturalSites: true }, volcano: { naturalSites: true }, arch: { naturalSites: true }, arete: { naturalSites: true }, fumarole: { naturalSites: true }, rock: { naturalSites: true }, saddle: { naturalSites: true }, sinkhole: { naturalSites: true }, stone: { naturalSites: true }, glacier: { naturalSites: true }, spring: { naturalSites: true }, hot_spring: { naturalSites: true }, geyser: { naturalSites: true }, }, }, cycling: { amenity: { bar: { drinking: true }, fast_food: { eating: true }, food_court: { eating: true }, pub: { eating: true, drinking: true }, restaurant: { eating: true }, cafe: { drinking: true }, atm: { money: true, dayToDay: true }, bank: { money: true, dayToDay: true }, doctors: { health: true }, hospital: { health: true }, pharmacy: { health: true }, police: { security: true }, fire_station: { security: true }, drinking_water: { drinking: true }, water_point: { drinking: true }, waste_basket: { dayToDay: true }, waste_disposal: { dayToDay: true }, vending_machine: { dayToDay: true }, bicycle_parking: { parking: true }, }, shop: { bakery: { eating: true }, butcher: { eating: true }, cheese: { eating: true }, chocolate: { eating: true }, convenience: { eating: true }, dairy: { eating: true }, farm: { eating: true }, greengrocer: { eating: true }, health_food: { eating: true }, pasta: { eating: true }, pastry: { eating: true }, seafood: { eating: true }, water: { drinking: true }, department_store: { dayToDay: true }, general: { dayToDay: true }, mall: { dayToDay: true }, supermarket: { eating: true }, wholesale: { eating: true }, outdoor: { eating: true }, laundry: { dayToDay: true }, }, tourism: { hotel: { sleeping: true }, alpine_hut: { sleeping: true }, apartment: { sleeping: true }, camp_site: { sleeping: true }, chalet: { sleeping: true }, guest_house: { sleeping: true }, hostel: { sleeping: true }, motel: { sleeping: true }, wilderness_hut: { sleeping: true }, viewpoint: { naturalSites: true }, }, waterway: { waterfall: { naturalSites: true } }, natural: { peak: { naturalSites: true }, cave_entrance: { naturalSites: true }, volcano: { naturalSites: true }, arch: { naturalSites: true }, arete: { naturalSites: true }, fumarole: { naturalSites: true }, rock: { naturalSites: true }, saddle: { naturalSites: true }, sinkhole: { naturalSites: true }, stone: { naturalSites: true }, glacier: { naturalSites: true }, spring: { naturalSites: true }, hot_spring: { naturalSites: true }, geyser: { naturalSites: true }, }, }, vanlife: { amenity: { bar: { drinking: true }, fast_food: { eating: true }, food_court: { eating: true }, pub: { eating: true, drinking: true }, restaurant: { eating: true }, cafe: { drinking: true }, atm: { money: true, dayToDay: true }, bank: { money: true, dayToDay: true }, doctors: { health: true }, hospital: { health: true }, pharmacy: { health: true }, police: { security: true }, fire_station: { security: true }, drinking_water: { drinking: true }, water_point: { drinking: true }, waste_basket: { dayToDay: true }, waste_disposal: { dayToDay: true }, vending_machine: { dayToDay: true }, parking: { parking: true, sleeping: true }, }, shop: { bakery: { eating: true }, butcher: { eating: true }, cheese: { eating: true }, chocolate: { eating: true }, convenience: { eating: true }, dairy: { eating: true }, farm: { eating: true }, greengrocer: { eating: true }, health_food: { eating: true }, pasta: { eating: true }, pastry: { eating: true }, seafood: { eating: true }, water: { drinking: true }, department_store: { dayToDay: true }, general: { dayToDay: true }, mall: { dayToDay: true }, supermarket: { eating: true }, wholesale: { eating: true }, outdoor: { eating: true }, laundry: { dayToDay: true }, }, tourism: { camp_site: { sleeping: true }, viewpoint: { naturalSites: true }, }, waterway: { waterfall: { naturalSites: true } }, natural: { peak: { naturalSites: true }, cave_entrance: { naturalSites: true }, volcano: { naturalSites: true }, arch: { naturalSites: true }, arete: { naturalSites: true }, fumarole: { naturalSites: true }, rock: { naturalSites: true }, saddle: { naturalSites: true }, sinkhole: { naturalSites: true }, stone: { naturalSites: true }, glacier: { naturalSites: true }, spring: { naturalSites: true }, hot_spring: { naturalSites: true }, geyser: { naturalSites: true }, }, }, }; export const legacyOverlayDefinitions = { amenity: { bar: { hiking: { drinking: true }, cycling: { drinking: true }, vanlife: { drinking: true }, }, fast_food: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, food_court: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, pub: { hiking: { eating: true, drinking: true }, cycling: { eating: true, drinking: true }, vanlife: { eating: true, drinking: true }, }, restaurant: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, cafe: { hiking: { drinking: true }, cycling: { drinking: true }, vanlife: { drinking: true }, }, atm: { hiking: { money: true, dayToDay: true }, cycling: { money: true, dayToDay: true }, vanlife: { money: true, dayToDay: true }, }, bank: { hiking: { money: true, dayToDay: true }, cycling: { money: true, dayToDay: true }, vanlife: { money: true, dayToDay: true }, }, doctors: { hiking: { health: true }, cycling: { health: true }, vanlife: { health: true }, }, hospital: { hiking: { health: true }, cycling: { health: true }, vanlife: { health: true }, }, pharmacy: { hiking: { health: true }, cycling: { health: true }, vanlife: { health: true }, }, police: { hiking: { security: true }, cycling: { security: true }, vanlife: { security: true }, }, fire_station: { hiking: { security: true }, cycling: { security: true }, vanlife: { security: true }, }, drinking_water: { hiking: { drinking: true }, cycling: { drinking: true }, vanlife: { drinking: true }, }, water_point: { hiking: { drinking: true }, cycling: { drinking: true }, vanlife: { drinking: true }, }, waste_basket: { hiking: { dayToDay: true }, cycling: { dayToDay: true }, vanlife: { dayToDay: true }, }, waste_disposal: { hiking: { dayToDay: true }, cycling: { dayToDay: true }, vanlife: { dayToDay: true }, }, vending_machine: { hiking: { dayToDay: true }, cycling: { dayToDay: true }, vanlife: { dayToDay: true }, }, bicycle_parking: { cycling: { parking: true } }, parking: { vanlife: { parking: true, sleeping: true } }, }, shop: { bakery: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, butcher: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, cheese: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, chocolate: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, convenience: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, dairy: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, farm: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, greengrocer: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, health_food: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, pasta: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, pastry: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, seafood: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, water: { hiking: { drinking: true }, cycling: { drinking: true }, vanlife: { drinking: true }, }, department_store: { hiking: { dayToDay: true }, cycling: { dayToDay: true }, vanlife: { dayToDay: true }, }, general: { hiking: { dayToDay: true }, cycling: { dayToDay: true }, vanlife: { dayToDay: true }, }, mall: { hiking: { dayToDay: true }, cycling: { dayToDay: true }, vanlife: { dayToDay: true }, }, supermarket: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, wholesale: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, outdoor: { hiking: { eating: true }, cycling: { eating: true }, vanlife: { eating: true }, }, laundry: { hiking: { dayToDay: true }, cycling: { dayToDay: true }, vanlife: { dayToDay: true }, }, }, tourism: { hotel: { hiking: { sleeping: true }, cycling: { sleeping: true } }, alpine_hut: { hiking: { sleeping: true }, cycling: { sleeping: true } }, apartment: { hiking: { sleeping: true }, cycling: { sleeping: true } }, camp_site: { hiking: { sleeping: true }, cycling: { sleeping: true }, vanlife: { sleeping: true }, }, chalet: { hiking: { sleeping: true }, cycling: { sleeping: true } }, guest_house: { hiking: { sleeping: true }, cycling: { sleeping: true } }, hostel: { hiking: { sleeping: true }, cycling: { sleeping: true } }, motel: { hiking: { sleeping: true }, cycling: { sleeping: true } }, wilderness_hut: { hiking: { sleeping: true }, cycling: { sleeping: true } }, viewpoint: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, }, waterway: { waterfall: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, }, natural: { peak: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, cave_entrance: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, volcano: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, arch: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, arete: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, fumarole: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, rock: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, saddle: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, sinkhole: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, stone: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, glacier: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, spring: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, hot_spring: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, geyser: { hiking: { naturalSites: true }, cycling: { naturalSites: true }, vanlife: { naturalSites: true }, }, }, }; let _flat: any = []; Object.values(legacyOverlayDefinitions).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(legacyOverlayDefinitions).some((tagName) => { const tagValue = feature.get(tagName); return Object.keys(legacyOverlayDefinitions[tagName]).includes(tagValue); }) ) { return 'poi'; } }; console.log({ caller: 'overlay-definitions', legacyOverlayDefinitions, _flat, overlayCategories, });