dyomedea/src/components/overlays/overlay-definitions.ts

566 lines
16 KiB
TypeScript
Raw Normal View History

import { indexOf } from 'lodash';
2023-01-26 15:48:59 +00:00
import { Feature } from 'ol';
2023-06-09 09:05:07 +00:00
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 },
},
2023-05-16 19:46:00 +00:00
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: {
2023-05-16 19:46:00 +00:00
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: {
2023-05-16 19:46:00 +00:00
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 },
},
},
2023-06-06 13:15:10 +00:00
waterway: {
waterfall: {
hiking: { naturalSites: true },
cycling: { naturalSites: true },
vanlife: { naturalSites: true },
},
},
natural: {
2023-05-16 19:46:00 +00:00
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<string> };
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),
]);
});
});
2023-01-26 15:48:59 +00:00
export const getVectorTileFeatureType = (feature: Feature) => {
2023-01-28 18:05:39 +00:00
if (
['hiking'].includes(feature.get('route')) ||
['path', 'track', 'footway', 'steps'].includes(feature.get('highway'))
) {
2023-01-26 15:48:59 +00:00
return 'way';
}
if (
Object.keys(legacyOverlayDefinitions).some((tagName) => {
2023-01-26 15:48:59 +00:00
const tagValue = feature.get(tagName);
return Object.keys(legacyOverlayDefinitions[tagName]).includes(tagValue);
2023-01-26 15:48:59 +00:00
})
) {
return 'poi';
}
};
console.log({
caller: 'overlay-definitions',
legacyOverlayDefinitions,
_flat,
overlayCategories,
});