Revision control
++ // Copyright (C) 2025 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
++
++ #include <QtCore/qhash.h>
++ #include <QtCore/qlist.h>
++ #include <QtCore/qmetaobject.h>
++ #include <QtCore/qstringlist.h>
++ #include <QtCore/qstring.h>
++ #include <qpoicategoryohosmapkit.h>
++
++ namespace OhosPoiInternal {
++
++ Q_NAMESPACE
++
++ enum CategoryId {
++ INVALID,
++ AUTOMOTIVE,
++ AUTOMOTIVE_DEALER,
++ ATV_SNOWMOBILE_DEALER,
++ BOAT_DEALER,
++ BUS_DEALER,
++ CAR_DEALER,
++ MOTORCYCLE_DEALER,
++ RECREATIONAL_VEHICLE_DEALER,
++ TRUCK_DEALER,
++ USED_CAR_DEALER,
++ VAN_DEALER,
++ AUTOMOTIVE_REPAIR_SHOP,
++ AUTOMOBILE_ACCESSORIES_SHOP,
++ AUTOMOTIVE_GLASS_REPLACEMENT_SHOP,
++ BODYSHOP,
++ GENERAL_AUTO_REPAIR_SERVICE_CENTER,
++ MOTORCYCLE_REPAIR_SHOP,
++ REPAIR_SHOP,
++ ROAD_ASSISTANCE,
++ TIRE_REPAIR_SHOP,
++ TRUCK_REPAIR_SHOP,
++ VAN_REPAIR,
++ CAR_RENTAL_COMPANY,
++ CAR_RENTAL,
++ PICKUP_AND_RETURNS_POINT,
++ CAR_WASH,
++ CAR_WASH_LEVEL_3,
++ TRUCK_WASH,
++ ELECTRIC_VEHICLE_CHARGING_STATION,
++ EMISSION_TESTING,
++ HYDROGEN_FUELING_STATION,
++ MOTORING_ORGANIZATION_OFFICE,
++ PARKING_LOT,
++ BICYCLE_PARKING_PLACE,
++ BICYCLE_SHARING_LOCATION,
++ COACH_PARKING_AREA,
++ PARK_RIDE,
++ PARKING_GARAGE,
++ PARKING_LOT_LEVEL_3,
++ TRAILHEAD,
++ TRUCK_PARKING_AREA,
++ PETROL_STATION,
++ TRUCK_STOP,
++ WEIGH_STATION,
++ WEIGH_SCALES,
++ WEIGH_STATION_LEVEL_3,
++ BUSINESS,
++ AGRICULTURAL_BUSINESS,
++ FARM,
++ HORTICULTURE_COMPANY,
++ PRODUCE_COMPANY,
++ ATM,
++ BANK,
++ BUSINESS_PARK,
++ COMMERCIAL_BUILDING,
++ COMPANY,
++ ADVERTISING_AND_MARKETING_COMPANY,
++ AGRICULTURAL_TECHNOLOGY_COMPANY,
++ AIRLINE,
++ ANIMAL_SHELTER,
++ AUTOMOBILE_COMPANY,
++ AUTOMOBILE_MANUFACTURER,
++ BICYCLE_SERVICE_AND_MAINTENANCE,
++ BILL_PAYMENT_SERVICE,
++ BODY_PIERCING_AND_TATTOOS,
++ BRIDGE_TUNNEL_ENGINEERING_COMPANY,
++ BUS_CHARTER_RENTAL_COMPANY,
++ BUS_COMPANY,
++ BUSINESS_SERVICES_COMPANY,
++ CABLE_TELEPHONE_COMPANY,
++ CATERERS,
++ CHEMICAL_COMPANY,
++ CLEANING_SERVICE_COMPANY,
++ COMPUTER_AND_DATA_SERVICES_CORPORATION,
++ COMPUTER_SOFTWARE_COMPANY,
++ CONSTRUCTION_COMPANY,
++ CUSTOMER_SERVICE_CENTER,
++ DIVERSIFIED_FINANCIAL_SERVICE_COMPANY,
++ ELECTRONICS_COMPANY,
++ ENGINEERING_AND_SCIENTIFIC_SERVICES,
++ EQUIPMENT_RENTAL_COMPANY,
++ FOOD_PRODUCTION,
++ FUNERAL_SERVICES,
++ HOME_APPLIANCE_REPAIR_COMPANY,
++ HUMAN_RESOURCES_AND_RECRUITING_SERVICES,
++ IMPORT_AND_EXPORT_COMPANY,
++ INSURANCE_COMPANY,
++ INTERIOR_AND_EXTERIOR_DESIGN,
++ INVESTIGATION_SERVICES,
++ INVESTMENT_CONSULTING_FIRM,
++ IT_AND_OFFICE_EQUIPMENT_SERVICES,
++ KINDERGARTEN_AND_CHILDCARE,
++ LANDSCAPING_SERVICES,
++ LEGAL_SERVICES,
++ LOCKSMITHS_AND_SECURITY_SYSTEM_SERVICES,
++ MAID_SERVICES,
++ MAIL_PACKAGE_FREIGHT_DELIVERY_COMPANY,
++ MANAGEMENT_AND_CONSULTING_SERVICES,
++ MANUFACTURING_COMPANY,
++ MARRIAGE_AND_MATCHMAKING_SERVICES,
++ MECHANICAL_ENGINEERING_COMPANY,
++ MINERAL_COMPANY,
++ MODELING_AGENCIES,
++ MOVING_STORAGE_COMPANY,
++ OEM,
++ OIL_NATURAL_GAS_COMPANY,
++ PHARMACEUTICAL_COMPANY,
++ PHOTOGRAPHY,
++ PLUMBING,
++ POLICE_SERVICES_SECURITY,
++ PROPERTY_MANAGEMENT,
++ PUBLIC_HEALTH_TECHNOLOGY_COMPANY,
++ PUBLISHING_TECHNOLOGY_COMPANY,
++ REAL_ESTATE_AGENCY_COMPANY,
++ SAVINGS_INSTITUTION,
++ SCHOOL_BUS_SERVICE_COMPANY,
++ SERVICE_COMPANY,
++ SOCIAL_SERVICES,
++ SPECIALTY_TRADE_CONTRACTORS,
++ TANNING_SALON,
++ TAX_SERVICES,
++ TAXI_LIMOUSINE_SHUTTLE_SERVICE_COMPANY,
++ TELECOMMUNICATIONS_COMPANY,
++ TOWING_SERVICE,
++ TRANSLATION_AND_INTERPRETATION_SERVICES,
++ TRANSPORTATION_COMPANY,
++ UTILITIES,
++ WASTE_AND_SANITARY,
++ WEDDING_SERVICES,
++ WELLNESS_CENTER_AND_SERVICES,
++ COURIER_DROP_BOX,
++ EMERGENCY_MEDICAL_SERVICE_CENTER,
++ EXCHANGE,
++ CURRENCY_EXCHANGE,
++ GOLD_EXCHANGE,
++ MONEY_TRANSFERRING_SERVICE,
++ STOCK_EXCHANGE,
++ EXHIBITION_CONVENTION_CENTER,
++ INDUSTRIAL_BUILDING,
++ MANUFACTURING_FACTORY,
++ MEDIA_COMPANY,
++ COMMUNICATION_MEDIA,
++ RESEARCH_INSTITUTE,
++ EATING_DRINKING,
++ PUB_CAFE,
++ CAFE,
++ COFFEE_TEA,
++ INTERNET_CAFE,
++ MICROBREWERY_BEER_GARDEN,
++ PUB,
++ TEA_HOUSE,
++ RESTAURANT,
++ AFGHAN_RESTAURANT,
++ AFRICAN_RESTAURANT,
++ ALGERIAN_RESTAURANT,
++ AMERICAN_RESTAURANT,
++ CALIFORNIAN_RESTAURANT,
++ CREOLE_CAJUN_RESTAURANT,
++ NATIVE_AMERICAN,
++ SOUL_FOOD_RESTAURANT,
++ SOUTHERN,
++ SOUTHWESTERN,
++ ARABIAN_RESTAURANT,
++ ARGENTINEAN_RESTAURANT,
++ ARMENIAN_RESTAURANT,
++ ASIAN_RESTAURANT,
++ AUSTRALIAN_RESTAURANT,
++ AUSTRIAN_RESTAURANT,
++ AZERBAIJANI_RESTAURANT,
++ BALKAN_RESTAURANT,
++ BALTIC_RESTAURANT,
++ BANQUET_HALL,
++ BARBECUE_RESTAURANT,
++ BELARUSIAN_RESTAURANT,
++ BELGIAN_RESTAURANT,
++ BISTRO,
++ BOHEMIAN_RESTAURANT,
++ BOLIVIAN_RESTAURANT,
++ BOSNIAN_RESTAURANT,
++ BAIANA_RESTAURANT,
++ BAKERY_RESTAURANT,
++ CAPIXABA_RESTAURANT,
++ MINEIRA_RESTAURANT,
++ BRAZILIAN_RESTAURANT,
++ BREAKFAST,
++ BREWPUB,
++ BRITISH_RESTAURANT,
++ BRUNCH,
++ BRUNEIAN_RESTAURANT,
++ BUFFET_RESTAURANT,
++ BULGARIAN_RESTAURANT,
++ BURGER_RESTAURANT,
++ BURMESE_RESTAURANT,
++ CAFETERIA,
++ CAMBODIAN_RESTAURANT,
++ CANADIAN_RESTAURANT,
++ CARIBBEAN_RESTAURANT,
++ CASUAL_DINING,
++ CAUCASIAN_RESTAURANT,
++ CHICKEN_RESTAURANT,
++ CHILEAN_RESTAURANT,
++ CHINESE_RESTAURANT,
++ BEIJING_RESTAURANT,
++ CANTONESE_RESTAURANT,
++ CONGEE_RESTAURANT,
++ GUANGXI_RESTAURANT,
++ HOT_POT_RESTAURANT,
++ HUBEI_RESTAURANT,
++ HUNAN_RESTAURANT,
++ INNER_MONGOLIAN_RESTAURANT,
++ ISLAMIC_RESTAURANT,
++ JIANGSU_ZHEJIANG_RESTAURANT,
++ JIANGXI_RESTAURANT,
++ NORTHEASTERN_RESTAURANT,
++ SHANDONG_RESTAURANT,
++ SHANGHAI_RESTAURANT,
++ SZECHUAN_RESTAURANT,
++ TAIWANESE_RESTAURANT,
++ TIBETAN_RESTAURANT,
++ YUNNAN_GUIZHOU_RESTAURANT,
++ COLOMBIAN_RESTAURANT,
++ CREPERIE,
++ CUBAN_RESTAURANT,
++ CYPRIOT_RESTAURANT,
++ CZECH_RESTAURANT,
++ DANISH_RESTAURANT,
++ DINNER,
++ DOMINICAN_RESTAURANT,
++ DOUGHNUT_SHOP,
++ DUTCH_RESTAURANT,
++ EASTERN_EUROPEAN_RESTAURANT,
++ EGYPTIAN_RESTAURANT,
++ ENGLISH_RESTAURANT,
++ EROTIC_RESTAURANT,
++ ETHIOPIAN_RESTAURANT,
++ EUROPEAN_RESTAURANT,
++ EXOTIC_RESTAURANT,
++ FAST_FOOD_RESTAURANT,
++ FILIPINO_RESTAURANT,
++ FINE_DINING,
++ FINNISH_RESTAURANT,
++ FONDUE_RESTAURANT,
++ FOOD_MARKET_STALL,
++ FRENCH_RESTAURANT,
++ ALSATIAN_RESTAURANT,
++ AUVERGNATE_RESTAURANT,
++ BASQUE_RESTAURANT,
++ CORSICAN_RESTAURANT,
++ LYONNAISE_RESTAURANT,
++ PROVENCAL_RESTAURANT,
++ SUD_OUEST_RESTAURANT,
++ FUSION_RESTAURANT,
++ GASTROPUB,
++ GERMAN_RESTAURANT,
++ GREEK_RESTAURANT,
++ GRILL,
++ HALAL,
++ HOT_DOGS,
++ HUNGARIAN_RESTAURANT,
++ ICE_CREAM_PARLOR,
++ INDIAN_RESTAURANT,
++ BENGALI_RESTAURANT,
++ GOAN_RESTAURANT,
++ GUJARATI_RESTAURANT,
++ HYDERABADI_RESTAURANT,
++ JAIN_RESTAURANT,
++ KONKANI_RESTAURANT,
++ MAHARASHTRIAN_RESTAURANT,
++ MALVANI_RESTAURANT,
++ MUGHLAI_RESTAURANT,
++ NORTH_INDIAN_RESTAURANT,
++ PARSI_RESTAURANT,
++ PUNJABI_RESTAURANT,
++ RAJASTHANI_RESTAURANT,
++ SOUTH_INDIAN_RESTAURANT,
++ TANDOORI_RESTAURANT,
++ INDONESIAN_RESTAURANT,
++ INTERNATIONAL_HOTEL,
++ IRANIAN_RESTAURANT,
++ IRISH_RESTAURANT,
++ ISRAELI_RESTAURANT,
++ ITALIAN_RESTAURANT,
++ JAMAICAN_RESTAURANT,
++ JAPANESE_RESTAURANT,
++ SUSHI_RESTAURANT,
++ JUICE_BAR,
++ KOREAN_RESTAURANT,
++ KOSHER_RESTAURANT,
++ LATIN_AMERICAN_RESTAURANT,
++ LEBANESE_RESTAURANT,
++ LUNCH,
++ LUXEMBOURGIAN_RESTAURANT,
++ MACROBIOTIC_RESTAURANT,
++ MAGHRIB_RESTAURANT,
++ MALAYSIAN_RESTAURANT,
++ MALTESE_RESTAURANT,
++ MAURITIAN_RESTAURANT,
++ MEDITERRANEAN_RESTAURANT,
++ MEXICAN_RESTAURANT,
++ OAXAQUENA_RESTAURANT,
++ POBLANA_RESTAURANT,
++ VERACRUZANA_RESTAURANT,
++ YUCATECA_RESTAURANT,
++ MIDDLE_EASTERN_RESTAURANT,
++ MONGOLIAN_RESTAURANT,
++ MOROCCAN_RESTAURANT,
++ MUSSEL_RESTAURANT,
++ NATURAL_HEALTHY,
++ NEPALESE_RESTAURANT,
++ NOODLES,
++ NORTH_AFRICAN_RESTAURANT,
++ NORTH_AMERICAN_RESTAURANT,
++ NORWEGIAN_RESTAURANT,
++ OCEANIC_RESTAURANT,
++ ORGANIC_RESTAURANT,
++ ORIENTAL_RESTAURANT,
++ PAKISTANI_RESTAURANT,
++ PASTRIES,
++ PERUVIAN_RESTAURANT,
++ PIZZA_RESTAURANT,
++ POLISH_RESTAURANT,
++ POLYNESIAN_RESTAURANT,
++ PORTUGUESE_RESTAURANT,
++ ROADSIDE_RESTAURANT,
++ ROMANIAN_RESTAURANT,
++ RUSSIAN_RESTAURANT,
++ SALAD_BAR,
++ SANDWICH_RESTAURANT,
++ SAVOYAN_RESTAURANT,
++ SCANDINAVIAN_RESTAURANT,
++ SCOTTISH_RESTAURANT,
++ SEAFOOD_RESTAURANT,
++ SEYCHELLOIS_RESTAURANT,
++ SICILIAN_RESTAURANT,
++ SINGAPOREAN_RESTAURANT,
++ SLAVIC_RESTAURANT,
++ SLOVAK_RESTAURANT,
++ SNACKS_BEVERAGES,
++ SOUP_RESTAURANT,
++ SOUTH_AFRICAN_RESTAURANT,
++ SOUTH_AMERICAN_RESTAURANT,
++ SOUTHEAST_ASIAN_RESTAURANT,
++ SPANISH_RESTAURANT,
++ TAPAS_RESTAURANT,
++ SRI_LANKAN_RESTAURANT,
++ STEAK_HOUSE,
++ SUDANESE_RESTAURANT,
++ SURINAMESE_RESTAURANT,
++ SWEDISH_RESTAURANT,
++ SWISS_RESTAURANT,
++ SYRIAN_RESTAURANT,
++ TAKEAWAY_RESTAURANT,
++ TEPPANYAKI_RESTAURANT,
++ THAI_RESTAURANT,
++ TUNISIAN_RESTAURANT,
++ TURKISH_RESTAURANT,
++ UKRAINIAN_RESTAURANT,
++ URUGUAYAN_RESTAURANT,
++ VEGETARIAN_RESTAURANT,
++ VENEZUELAN_RESTAURANT,
++ VIETNAMESE_RESTAURANT,
++ WELSH_RESTAURANT,
++ WESTERN_RESTAURANT,
++ YEMENI_RESTAURANT,
++ RESTAURANT_AREA,
++ GOVERNMENT_PUBLIC_SERVICE,
++ CITY_CENTER,
++ COURTHOUSE,
++ EDUCATIONAL_INSTITUTION,
++ ART_SCHOOL,
++ CHILD_CARE_FACILITY,
++ COACHING_INSTITUTE,
++ COLLEGE_UNIVERSITY,
++ CULINARY_SCHOOL,
++ DANCE_STUDIO_SCHOOL,
++ DRIVING_SCHOOL,
++ EDUCATIONAL_FACILITY,
++ HIGH_SCHOOL,
++ JUNIOR_COLLEGE_COMMUNITY_COLLEGE,
++ LANGUAGE_SCHOOL,
++ MIDDLE_SCHOOL,
++ PRESCHOOL,
++ PRIMARY_SCHOOL,
++ SCHOOL,
++ SENIOR_HIGH_SCHOOL,
++ SPECIAL_SCHOOL,
++ SPORTS_SCHOOL,
++ TECHNICAL_SCHOOL,
++ TRAINING_AND_DEVELOPMENT,
++ VOCATIONAL_TRAINING_SCHOOL,
++ EMBASSY,
++ EMERGENCY_ASSEMBLY_POINT,
++ EARTHQUAKE_ASSEMBLY_POINT,
++ FIRE_ASSEMBLY_POINT,
++ FLOOD_ASSEMBLY_POINT,
++ TSUNAMI_ASSEMBLY_POINT,
++ VOLCANIC_ERUPTION_ASSEMBLY_POINT,
++ FIRE_STATION,
++ GOVERNMENT_OFFICE,
++ CITY_HALL,
++ CIVIC_COMMUNITY_CENTER,
++ COUNTY_COUNCIL,
++ INTERNATIONAL_ORGANIZATION,
++ NATIONAL_ORGANIZATION,
++ TOWN_GOVERNMENT,
++ INDIAN_RESERVATION,
++ MILITARY_BASE,
++ ORGANIZATION,
++ NON_GOVERNMENTAL_ORGANIZATION,
++ WELFARE_ORGANIZATION,
++ POLICE_STATION,
++ POST_OFFICE,
++ GENERAL_POST_OFFICE,
++ LOCAL_POST_OFFICE,
++ PRISON,
++ PUBLIC_AMENITY,
++ GOVERNMENT_OR_COMMUNITY_FACILITY,
++ PASSENGER_TRANSPORT_TICKET_OFFICE,
++ PEDESTRIAN_SUBWAY,
++ PUBLIC_CALL_BOX,
++ PUBLIC_RESTROOM,
++ REGISTRATION_OFFICE,
++ ROAD_RESCUE_POINT,
++ STREET_OR_SQUARE,
++ TOILET,
++ TRAFFIC_CONTROL_DEPARTMENT,
++ TRAFFIC_MANAGEMENT_BUREAU,
++ HEALTH_CARE,
++ DENTAL_CLINIC,
++ EMERGENCY_ROOM,
++ HEALTHCARE_SERVICE_CENTER,
++ AMBULANCE_UNIT,
++ BLOOD_BANK,
++ GENERAL_PRACTICE,
++ NURSING_HOME,
++ OPTICAL,
++ PERSONAL_CARE_INSTITUTION,
++ PERSONAL_SERVICE_CENTER,
++ PSYCHIATRIC_INSTITUTE,
++ THERAPIST,
++ HOSPITAL_CLINIC,
++ CHINESE_MEDICINE_HOSPITAL,
++ GENERAL_HOSPITAL,
++ HOSPITAL_FOR_WOMEN_AND_CHILDREN,
++ SPECIALIZED_HOSPITAL,
++ MEDICAL_CLINIC,
++ GENERAL_CLINIC,
++ PHYSIOTHERAPY_CLINIC,
++ SPECIALIST_CLINIC,
++ PHARMACY,
++ VETERINARY_CLINIC,
++ LEISURE,
++ AMUSEMENT_PARK,
++ AMUSEMENT_ARCADE,
++ AMUSEMENT_CENTER,
++ CINEMA,
++ CINEMA_LEVEL_3,
++ DRIVE_IN_CINEMA,
++ CLUB_ASSOCIATION,
++ BEACH_CLUB,
++ CAR_CLUB,
++ HOCKEY_CLUB,
++ COMMUNITY_CENTER,
++ COLLECTIVE_COMMUNITY,
++ ENTERTAINMENT_PLAZA,
++ GAMBLING_LOTTERY_BETTING,
++ LEISURE_CENTER,
++ FLYING_CLUB,
++ POOL_HALL,
++ SAUNA_SOLARIUM_MASSAGE_CENTER,
++ SPA,
++ LIBRARY,
++ MARINA,
++ MARINA_LEVEL_3,
++ YACHT_BASIN,
++ MUSEUM,
++ ART_MUSEUM,
++ CHILDRENS_MUSEUM,
++ HISTORY_MUSEUM,
++ SCIENCE_MUSEUM,
++ NIGHTLIFE,
++ ADULT_ENTERTAINMENT,
++ BAR,
++ COCKTAIL_BAR,
++ WINE_BAR,
++ LIVE_ENTERTAINMENT_CABARET,
++ DANCING_CLUB,
++ DISCOTHEQUE,
++ VIDEO_ARCADE_GAMING_ROOM,
++ NIGHT_CLUB,
++ COMEDY_CLUB,
++ JAZZ_CLUB,
++ KARAOKE_CLUB,
++ PRIVATE_CLUB,
++ PARK_RECREATION_AREA,
++ AVENUE_BOULEVARD,
++ BATTLEFIELD_SITE,
++ BOAT_LAUNCHING_RAMP,
++ CEMETERY,
++ FAIRGROUND,
++ FISHING_HUNTING_AREA,
++ FOREST_AREA,
++ HISTORIC_SITE,
++ HISTORICAL_PARK,
++ LAKESIDE,
++ MEMORIAL,
++ NATURAL_ATTRACTION_PARK,
++ PARK,
++ PICNIC_AREA,
++ PRESERVED_AREA,
++ PROTECTED_AREA,
++ RECREATIONAL_AREA,
++ SCENIC_RIVER_AREA,
++ SEASHORE,
++ SKI_RESORT,
++ INDOOR_SKI_SLOPE,
++ WATER_PARK,
++ WILDERNESS_AREA,
++ WINTER_SPORT_AREA,
++ THEATER_MUSIC_CULTURE,
++ AMPHITHEATER,
++ CONCERT_HALL,
++ CULTURAL_CENTER,
++ DINNER_THEATER,
++ GALLERY,
++ MUSIC_VENUE,
++ OPERA,
++ PERFORMING_ARTS,
++ THEATER,
++ TRAIL_SYSTEM,
++ ADVENTURE_VEHICLE_TRAIL,
++ HIKING_TRAIL,
++ HORSE_RIDING_TRAIL,
++ MOUNTAIN_BIKE_TRAIL,
++ OFF_ROAD_TRAILHEAD,
++ OUTDOOR_SERVICE,
++ RANGER_STATION,
++ ROCK_CLIMBING_TRAIL,
++ SKI_LIFT,
++ WINERY,
++ ZOO_BOTANICAL_GARDEN,
++ AQUATIC_ZOO_MARINE_PARK,
++ ARBORETA_BOTANICAL_GARDEN,
++ WILDLIFE_PARK,
++ ZOO,
++ ACCOMMODATION,
++ CAMPING_GROUND,
++ CARAVAN_SITE,
++ RECREATIONAL_SITE,
++ HOTEL_MOTEL,
++ BED_BREAKFAST_GUEST_HOUSE,
++ CABIN_LODGE,
++ HOSTEL,
++ HOTEL,
++ MOTEL,
++ RESORT,
++ REST_CAMPS,
++ RESIDENTIAL_ACCOMMODATION,
++ APARTMENT_COMPLEX,
++ CONDOMINIUM_COMPLEX,
++ HOLIDAY_PARK,
++ RESIDENTIAL_ESTATE,
++ RETIREMENT_COMMUNITY,
++ TOWNHOUSE_COMPLEX,
++ VACATION_RENTAL,
++ APARTMENT,
++ BUNGALOW,
++ CHALET,
++ COTTAGE,
++ VILLA,
++ MISCELLANEOUS,
++ ADMIN_FEATURE,
++ CAPITAL,
++ CAPITAL_CITY,
++ CONTINENT,
++ COUNTRY,
++ COUNTY,
++ GENERAL_CITY,
++ HAMLET,
++ NEIGHBORHOOD,
++ POSTAL_CODE,
++ STREET,
++ STREET_ADDRESS,
++ TOWN,
++ GEOGRAPHIC_FEATURE,
++ BAY,
++ BODY_OF_WATER,
++ CANAL,
++ CAPE,
++ CAVE,
++ COVE,
++ DRY_LAKE,
++ DUNE,
++ HARBOR,
++ HILL,
++ ISLAND,
++ LAGOON,
++ LAKE,
++ MARSH_SWAMP_VLEI,
++ MINERAL_HOT_SPRINGS,
++ MOUNTAIN_PEAK,
++ OASIS,
++ PLAIN_FLATLAND,
++ PLATEAU,
++ QUARRY,
++ RAPIDS,
++ REEF,
++ RESERVOIR,
++ RIDGE,
++ RIVER_CROSSING,
++ ROCKS,
++ UNDERSEA_FEATURE,
++ VALLEY,
++ WATERFALL,
++ WELL,
++ SHOPPING,
++ CONVENIENCE_STORE,
++ GROCERY,
++ GREENGROCERY,
++ DEPARTMENT_STORE,
++ MARKET,
++ FARMERS_MARKET,
++ SHOP,
++ FOOD_MARKET,
++ INFORMAL_MARKET,
++ PUBLIC_MARKET,
++ SUPERMARKET,
++ ADULT_SHOP,
++ AGRICULTURAL_SUPPLIES,
++ ART_AND_ANTIQUES_STORE,
++ ARTS_AND_CRAFTS_SUPPLIES,
++ BAGS_LEATHERWEAR_SHOP,
++ BEAUTY_SALON,
++ BICYCLE_AND_BICYCLE_ACCESSORIES_SHOP,
++ BMX_SHOP,
++ BOATING_EQUIPMENT_STORE,
++ BOOKSTORE,
++ CAMPING_HIKING_SUPPLIES,
++ CANOE_KAYAK_STORE,
++ CD_DVD_GAME_VIDEO_STORE,
++ GAME_VIDEO_RENTALS,
++ CLOTHING_ACCESSORIES_STORE,
++ MENS_APPAREL,
++ WOMENS_APPAREL,
++ CHILDRENS_APPAREL,
++ SHOE_STORE,
++ SPECIALTY_CLOTHING_STORE,
++ CONSTRUCTION_MATERIALS_EQUIPMENT_STORE,
++ DISCOUNT_STORE,
++ DRIVE_THROUGH_BOTTLE_SHOP,
++ DRY_CLEANERS,
++ ELECTRONICS_STORE,
++ PHOTOGRAPHIC_EQUIPMENT_STORE,
++ CONSUMER_ELECTRONICS_STORE,
++ COMPUTER_STORE,
++ OFFICE_EQUIPMENT_STORE,
++ MOBILE_SERVICE_CENTER,
++ MARINE_ELECTRONIC_EQUIPMENT_STORE,
++ MOBILE_PHONE_STORE,
++ FLORIST,
++ FOOD_DRINK_SHOP,
++ BAKERY,
++ BUTCHERY,
++ FISH_STORE,
++ WINE_SPIRITS_STORE,
++ DELICATESSEN,
++ SPECIALTY_FOOD_STORE,
++ SWEET_SHOP,
++ DAIRY_GOODS,
++ GENERAL_STORE,
++ GIFT_STORE,
++ GLASSWARE_CERAMIC_SHOP,
++ HAIR_SALON_BARBERSHOP,
++ HARDWARE_STORE,
++ HOBBY_SHOP,
++ HOLIDAY_STORE,
++ HOUSE_GARDEN,
++ CARPET_STORE,
++ CURTAIN_TEXTILE_STORE,
++ DIY_CENTER,
++ FURNITURE_AND_ACCESSORIES_STORE,
++ GARDENING_SERVICES,
++ KITCHEN_AND_SANITATION_STORE,
++ LIGHTING_STORE,
++ PAINTING_DECORATING_STORE,
++ GLASS_WINDOW_STORE,
++ FURNITURE_STORE,
++ POWER_EQUIPMENT_DEALER,
++ HOME_SPECIALTY_STORE,
++ LUMBER,
++ HUNTING_FISHING_SHOP,
++ JEWELRY_WATCH_STORE,
++ LAUNDRY,
++ LOCAL_SPECIALTY_STORE,
++ LOTTERY_SHOP,
++ MAKEUP_AND_COSMETICS_STORE,
++ MEDICAL_SUPPLIES_EQUIPMENT_STORE,
++ MUSICAL_INSTRUMENT_STORE,
++ NAIL_SALON,
++ NEWSAGENTS_TOBACCONISTS,
++ NON_STORE_RETAILERS,
++ OFFICE_SUPPLIES_SERVICES,
++ OPTICIANS,
++ OUTLET,
++ FACTORY_OUTLETS,
++ RETAIL_OUTLETS,
++ PAWN_SHOP,
++ PET_STORE,
++ ANIMAL_SERVICES,
++ PET_SUPPLY_STORE,
++ PHOTOCOPY_SHOP,
++ PHOTOGRAPHY_STUDIO,
++ REAL_ESTATE_AGENCY,
++ RUNNING_WALKING_EQUIPMENT_STORE,
++ SECOND_HAND_STORE,
++ SECURITY_SUPPLIES_STORE,
++ SHOPPING_SERVICE_CENTER,
++ SKATE_SHOP,
++ SKI_SHOP,
++ SNOWBOARD_SHOP,
++ SPECIALTY_STORE,
++ SPORTS_STORE,
++ STAMP_SHOP,
++ SURF_SHOP,
++ TACK_SHOP,
++ TAILORS,
++ TOY_STORE,
++ TRAVEL_AGENCY,
++ WAREHOUSE_SUPERMARKET,
++ SHOPPING_CENTER,
++ SPORT_FITNESS,
++ GOLF_COURSE,
++ GOLF_DRIVING_RANGE,
++ ICE_SKATING_RINK,
++ SPORTS_CENTER,
++ BOWLING_ALLEY,
++ FITNESS_CLUB_CENTER,
++ HORSE_RIDING_STABLE,
++ INDOOR_SPORTS,
++ SHOOTING_RANGE,
++ SPORTS_CENTER_LEVEL_3,
++ SQUASH_COURT,
++ THEMED_SPORTS_HALL,
++ STADIUM,
++ ATHLETICS_FIELD,
++ BADMINTON_COURT,
++ BASEBALL_FIELD,
++ BASKETBALL_COURT,
++ CRICKET_GROUND,
++ FOOTBALL_FIELD,
++ HOCKEY_FIELD,
++ HORSE_RACING_TRACK,
++ ICE_HOCKEY_RINK,
++ MOTORSPORT_VENUE,
++ MULTIPURPOSE_STADIUM,
++ NETBALL_COURT,
++ RACE_TRACK,
++ RUGBY_GROUND,
++ SOCCER_FIELD,
++ TABLE_TENNIS_HALL,
++ SWIMMING_POOL,
++ TENNIS_COURT,
++ WATER_SPORTS_CENTER,
++ DIVING_CENTER,
++ TOURISM,
++ ADVENTURE_SPORTS_VENUE,
++ BEACH,
++ PRIVATE_BEACH,
++ PUBLIC_BEACH,
++ OBSERVATION_DECK,
++ PLACE_OF_WORSHIP,
++ ASHRAM,
++ BUDDHIST_TEMPLE,
++ CHURCH,
++ DHARMA_TEMPLE,
++ GURDWARA,
++ HINDU_TEMPLE,
++ JAIN_TEMPLE,
++ MORMON_CHURCH,
++ MOSQUE,
++ PAGODA,
++ SHINTO_SHRINE,
++ SYNAGOGUE,
++ TEMPLE,
++ TOURIST_ATTRACTION,
++ ARCH,
++ BREWERY,
++ BRIDGE,
++ BUILDING,
++ DAM,
++ LANDMARK,
++ MAUSOLEUM_GRAVE,
++ MONUMENT,
++ NAMED_INTERSECTION_CHOWK,
++ NATURAL_ATTRACTION,
++ OBSERVATORY,
++ PLANETARIUM,
++ STATUE,
++ TOWER,
++ TUNNEL,
++ WATER_HOLE,
++ WINERY_LEVEL_3,
++ TOURIST_INFORMATION_OFFICE,
++ TRANSPORT,
++ ACCESS_GATEWAY,
++ AIRLINE_ACCESS,
++ CHECKPOINT,
++ DELIVERY_ENTRANCE,
++ ENTRANCE_EXIT,
++ HIGHWAY_ENTRANCE,
++ HIGHWAY_EXIT,
++ SECURITY_GATE,
++ STATION_ACCESS,
++ AIRPORT,
++ AIRFIELD,
++ AIRPORT_TERMINAL,
++ MILITARY_AUTHORITY,
++ PRIVATE_AUTHORITY,
++ PUBLIC_AUTHORITY,
++ PUBLIC_SPORTS_AIRPORT,
++ BORDER_POST,
++ FERRY_TERMINAL,
++ DOCK,
++ FERRY,
++ TRAIN_FERRY,
++ WATER_TRANSIT,
++ HELIPAD,
++ INTERSECTION,
++ MOUNTAIN_PASS,
++ PORT_WAREHOUSE,
++ PUBLIC_TRANSPORT_STOP,
++ AERIAL_LIFT,
++ AERIAL_TRAMWAY,
++ BUS_RAPID_TRANSIT,
++ BUS_STATION,
++ CABLE_TRAM,
++ COACH_STATION,
++ FUNICULAR,
++ LOCAL_TRANSIT,
++ PUBLIC_TRANSIT_ACCESS,
++ TAXI_STAND,
++ TOLL_GATE,
++ TRAM_STOP,
++ TRANSPORTATION_SERVICE,
++ RAILWAY_STATION,
++ GENERIC_NODE,
++ INCLINED_RAIL,
++ INTERCITY_RAILWAY_STATION,
++ INTERNATIONAL_RAILWAY_STATION,
++ LIGHT_RAIL,
++ MONORAIL,
++ NATIONAL_RAILWAY_STATION,
++ RAILWAY_SIDING,
++ SUBWAY,
++ REST_AREA,
++ COMPLETE_REST_AREA,
++ MOTORWAY_SERVICE_REST_AREA,
++ REST_AREA_PARKING_AND_RESTROOM_ONLY,
++ REST_AREA_PARKING_ONLY,
++ SCENIC_OVERLOOK_REST_AREA,
++ TRAFFIC,
++ TRAFFIC_SIGNAL,
++ TRAFFIC_LIGHT,
++ TRAFFIC_SIGN,
++ TRANSPORT_CENTER,
++ CARGO_CENTER,
++ AIRPORT_CARGO,
++ CARGO_TRANSPORTATION,
++ COURIERS,
++ LOADING_DOCK,
++ LOADING_ZONE,
++ RAIL_YARD,
++ OTHERS,
++ ADDRESS,
++ ADMINISTRATIVE_AREA_LEVEL_1,
++ ADMINISTRATIVE_AREA_LEVEL_2,
++ ADMINISTRATIVE_AREA_LEVEL_3,
++ ADMINISTRATIVE_AREA_LEVEL_4,
++ ADMINISTRATIVE_AREA_LEVEL_5,
++ CITIES,
++ COMMERCIAL_DISTRICT,
++ ESTABLISHMENT,
++ GEOCODE,
++ MAP_CONNECT,
++ REGIONS,
++ };
++ Q_ENUM_NS(CategoryId)
++
++ inline uint qHash(OhosPoiInternal::CategoryId key, uint seed = 0) noexcept
++ {
++ return ::qHash(static_cast<int>(key), seed);
++ }
++
++ const QHash<CategoryId, CategoryId> automotiveHierarchy = {
++ {CategoryId::AUTOMOTIVE, CategoryId::INVALID},
++ {CategoryId::AUTOMOTIVE_DEALER, CategoryId::AUTOMOTIVE},
++ {CategoryId::ATV_SNOWMOBILE_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::BOAT_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::BUS_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::CAR_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::MOTORCYCLE_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::RECREATIONAL_VEHICLE_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::TRUCK_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::USED_CAR_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::VAN_DEALER, CategoryId::AUTOMOTIVE_DEALER},
++ {CategoryId::AUTOMOTIVE_REPAIR_SHOP, CategoryId::AUTOMOTIVE},
++ {CategoryId::AUTOMOBILE_ACCESSORIES_SHOP, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::AUTOMOTIVE_GLASS_REPLACEMENT_SHOP, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::BODYSHOP, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::GENERAL_AUTO_REPAIR_SERVICE_CENTER, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::MOTORCYCLE_REPAIR_SHOP, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::REPAIR_SHOP, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::ROAD_ASSISTANCE, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::TIRE_REPAIR_SHOP, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::TRUCK_REPAIR_SHOP, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::VAN_REPAIR, CategoryId::AUTOMOTIVE_REPAIR_SHOP},
++ {CategoryId::CAR_RENTAL_COMPANY, CategoryId::AUTOMOTIVE},
++ {CategoryId::CAR_RENTAL, CategoryId::CAR_RENTAL_COMPANY},
++ {CategoryId::PICKUP_AND_RETURNS_POINT, CategoryId::CAR_RENTAL_COMPANY},
++ {CategoryId::CAR_WASH, CategoryId::AUTOMOTIVE},
++ {CategoryId::CAR_WASH_LEVEL_3, CategoryId::CAR_WASH},
++ {CategoryId::TRUCK_WASH, CategoryId::CAR_WASH},
++ {CategoryId::ELECTRIC_VEHICLE_CHARGING_STATION, CategoryId::AUTOMOTIVE},
++ {CategoryId::EMISSION_TESTING, CategoryId::AUTOMOTIVE},
++ {CategoryId::HYDROGEN_FUELING_STATION, CategoryId::AUTOMOTIVE},
++ {CategoryId::MOTORING_ORGANIZATION_OFFICE, CategoryId::AUTOMOTIVE},
++ {CategoryId::PARKING_LOT, CategoryId::AUTOMOTIVE},
++ {CategoryId::BICYCLE_PARKING_PLACE, CategoryId::PARKING_LOT},
++ {CategoryId::BICYCLE_SHARING_LOCATION, CategoryId::PARKING_LOT},
++ {CategoryId::COACH_PARKING_AREA, CategoryId::PARKING_LOT},
++ {CategoryId::PARK_RIDE, CategoryId::PARKING_LOT},
++ {CategoryId::PARKING_GARAGE, CategoryId::PARKING_LOT},
++ {CategoryId::PARKING_LOT_LEVEL_3, CategoryId::PARKING_LOT},
++ {CategoryId::TRAILHEAD, CategoryId::PARKING_LOT},
++ {CategoryId::TRUCK_PARKING_AREA, CategoryId::PARKING_LOT},
++ {CategoryId::PETROL_STATION, CategoryId::AUTOMOTIVE},
++ {CategoryId::TRUCK_STOP, CategoryId::AUTOMOTIVE},
++ {CategoryId::WEIGH_STATION, CategoryId::AUTOMOTIVE},
++ {CategoryId::WEIGH_SCALES, CategoryId::WEIGH_STATION},
++ {CategoryId::WEIGH_STATION_LEVEL_3, CategoryId::WEIGH_STATION},
++ };
++
++ const QHash<CategoryId, CategoryId> businessHierarchy = {
++ {CategoryId::BUSINESS, CategoryId::INVALID},
++ {CategoryId::AGRICULTURAL_BUSINESS, CategoryId::BUSINESS},
++ {CategoryId::FARM, CategoryId::AGRICULTURAL_BUSINESS},
++ {CategoryId::HORTICULTURE_COMPANY, CategoryId::AGRICULTURAL_BUSINESS},
++ {CategoryId::PRODUCE_COMPANY, CategoryId::AGRICULTURAL_BUSINESS},
++ {CategoryId::ATM, CategoryId::BUSINESS},
++ {CategoryId::BANK, CategoryId::BUSINESS},
++ {CategoryId::BUSINESS_PARK, CategoryId::BUSINESS},
++ {CategoryId::COMMERCIAL_BUILDING, CategoryId::BUSINESS},
++ {CategoryId::COMPANY, CategoryId::BUSINESS},
++ {CategoryId::ADVERTISING_AND_MARKETING_COMPANY, CategoryId::COMPANY},
++ {CategoryId::AGRICULTURAL_TECHNOLOGY_COMPANY, CategoryId::COMPANY},
++ {CategoryId::AIRLINE, CategoryId::COMPANY},
++ {CategoryId::ANIMAL_SHELTER, CategoryId::COMPANY},
++ {CategoryId::AUTOMOBILE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::AUTOMOBILE_MANUFACTURER, CategoryId::COMPANY},
++ {CategoryId::BICYCLE_SERVICE_AND_MAINTENANCE, CategoryId::COMPANY},
++ {CategoryId::BILL_PAYMENT_SERVICE, CategoryId::COMPANY},
++ {CategoryId::BODY_PIERCING_AND_TATTOOS, CategoryId::COMPANY},
++ {CategoryId::BRIDGE_TUNNEL_ENGINEERING_COMPANY, CategoryId::COMPANY},
++ {CategoryId::BUS_CHARTER_RENTAL_COMPANY, CategoryId::COMPANY},
++ {CategoryId::BUS_COMPANY, CategoryId::COMPANY},
++ {CategoryId::BUSINESS_SERVICES_COMPANY, CategoryId::COMPANY},
++ {CategoryId::CABLE_TELEPHONE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::CATERERS, CategoryId::COMPANY},
++ {CategoryId::CHEMICAL_COMPANY, CategoryId::COMPANY},
++ {CategoryId::CLEANING_SERVICE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::COMPUTER_AND_DATA_SERVICES_CORPORATION, CategoryId::COMPANY},
++ {CategoryId::COMPUTER_SOFTWARE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::CONSTRUCTION_COMPANY, CategoryId::COMPANY},
++ {CategoryId::CUSTOMER_SERVICE_CENTER, CategoryId::COMPANY},
++ {CategoryId::DIVERSIFIED_FINANCIAL_SERVICE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::ELECTRONICS_COMPANY, CategoryId::COMPANY},
++ {CategoryId::ENGINEERING_AND_SCIENTIFIC_SERVICES, CategoryId::COMPANY},
++ {CategoryId::EQUIPMENT_RENTAL_COMPANY, CategoryId::COMPANY},
++ {CategoryId::FOOD_PRODUCTION, CategoryId::COMPANY},
++ {CategoryId::FUNERAL_SERVICES, CategoryId::COMPANY},
++ {CategoryId::HOME_APPLIANCE_REPAIR_COMPANY, CategoryId::COMPANY},
++ {CategoryId::HUMAN_RESOURCES_AND_RECRUITING_SERVICES, CategoryId::COMPANY},
++ {CategoryId::IMPORT_AND_EXPORT_COMPANY, CategoryId::COMPANY},
++ {CategoryId::INSURANCE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::INTERIOR_AND_EXTERIOR_DESIGN, CategoryId::COMPANY},
++ {CategoryId::INVESTIGATION_SERVICES, CategoryId::COMPANY},
++ {CategoryId::INVESTMENT_CONSULTING_FIRM, CategoryId::COMPANY},
++ {CategoryId::IT_AND_OFFICE_EQUIPMENT_SERVICES, CategoryId::COMPANY},
++ {CategoryId::KINDERGARTEN_AND_CHILDCARE, CategoryId::COMPANY},
++ {CategoryId::LANDSCAPING_SERVICES, CategoryId::COMPANY},
++ {CategoryId::LEGAL_SERVICES, CategoryId::COMPANY},
++ {CategoryId::LOCKSMITHS_AND_SECURITY_SYSTEM_SERVICES, CategoryId::COMPANY},
++ {CategoryId::MAID_SERVICES, CategoryId::COMPANY},
++ {CategoryId::MAIL_PACKAGE_FREIGHT_DELIVERY_COMPANY, CategoryId::COMPANY},
++ {CategoryId::MANAGEMENT_AND_CONSULTING_SERVICES, CategoryId::COMPANY},
++ {CategoryId::MANUFACTURING_COMPANY, CategoryId::COMPANY},
++ {CategoryId::MARRIAGE_AND_MATCHMAKING_SERVICES, CategoryId::COMPANY},
++ {CategoryId::MECHANICAL_ENGINEERING_COMPANY, CategoryId::COMPANY},
++ {CategoryId::MINERAL_COMPANY, CategoryId::COMPANY},
++ {CategoryId::MODELING_AGENCIES, CategoryId::COMPANY},
++ {CategoryId::MOVING_STORAGE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::OEM, CategoryId::COMPANY},
++ {CategoryId::OIL_NATURAL_GAS_COMPANY, CategoryId::COMPANY},
++ {CategoryId::PHARMACEUTICAL_COMPANY, CategoryId::COMPANY},
++ {CategoryId::PHOTOGRAPHY, CategoryId::COMPANY},
++ {CategoryId::PLUMBING, CategoryId::COMPANY},
++ {CategoryId::POLICE_SERVICES_SECURITY, CategoryId::COMPANY},
++ {CategoryId::PROPERTY_MANAGEMENT, CategoryId::COMPANY},
++ {CategoryId::PUBLIC_HEALTH_TECHNOLOGY_COMPANY, CategoryId::COMPANY},
++ {CategoryId::PUBLISHING_TECHNOLOGY_COMPANY, CategoryId::COMPANY},
++ {CategoryId::REAL_ESTATE_AGENCY_COMPANY, CategoryId::COMPANY},
++ {CategoryId::SAVINGS_INSTITUTION, CategoryId::COMPANY},
++ {CategoryId::SCHOOL_BUS_SERVICE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::SERVICE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::SOCIAL_SERVICES, CategoryId::COMPANY},
++ {CategoryId::SPECIALTY_TRADE_CONTRACTORS, CategoryId::COMPANY},
++ {CategoryId::TANNING_SALON, CategoryId::COMPANY},
++ {CategoryId::TAX_SERVICES, CategoryId::COMPANY},
++ {CategoryId::TAXI_LIMOUSINE_SHUTTLE_SERVICE_COMPANY, CategoryId::COMPANY},
++ {CategoryId::TELECOMMUNICATIONS_COMPANY, CategoryId::COMPANY},
++ {CategoryId::TOWING_SERVICE, CategoryId::COMPANY},
++ {CategoryId::TRANSLATION_AND_INTERPRETATION_SERVICES, CategoryId::COMPANY},
++ {CategoryId::TRANSPORTATION_COMPANY, CategoryId::COMPANY},
++ {CategoryId::UTILITIES, CategoryId::COMPANY},
++ {CategoryId::WASTE_AND_SANITARY, CategoryId::COMPANY},
++ {CategoryId::WEDDING_SERVICES, CategoryId::COMPANY},
++ {CategoryId::WELLNESS_CENTER_AND_SERVICES, CategoryId::COMPANY},
++ {CategoryId::COURIER_DROP_BOX, CategoryId::BUSINESS},
++ {CategoryId::EMERGENCY_MEDICAL_SERVICE_CENTER, CategoryId::BUSINESS},
++ {CategoryId::EXCHANGE, CategoryId::BUSINESS},
++ {CategoryId::CURRENCY_EXCHANGE, CategoryId::EXCHANGE},
++ {CategoryId::GOLD_EXCHANGE, CategoryId::EXCHANGE},
++ {CategoryId::MONEY_TRANSFERRING_SERVICE, CategoryId::EXCHANGE},
++ {CategoryId::STOCK_EXCHANGE, CategoryId::EXCHANGE},
++ {CategoryId::EXHIBITION_CONVENTION_CENTER, CategoryId::BUSINESS},
++ {CategoryId::INDUSTRIAL_BUILDING, CategoryId::BUSINESS},
++ {CategoryId::MANUFACTURING_FACTORY, CategoryId::BUSINESS},
++ {CategoryId::MEDIA_COMPANY, CategoryId::BUSINESS},
++ {CategoryId::COMMUNICATION_MEDIA, CategoryId::MEDIA_COMPANY},
++ {CategoryId::RESEARCH_INSTITUTE, CategoryId::BUSINESS},
++ };
++
++ const QHash<CategoryId, CategoryId> eatingDrinkingHierarchy = {
++ {CategoryId::EATING_DRINKING, CategoryId::INVALID},
++ {CategoryId::PUB_CAFE, CategoryId::EATING_DRINKING},
++ {CategoryId::CAFE, CategoryId::PUB_CAFE},
++ {CategoryId::COFFEE_TEA, CategoryId::PUB_CAFE},
++ {CategoryId::INTERNET_CAFE, CategoryId::PUB_CAFE},
++ {CategoryId::MICROBREWERY_BEER_GARDEN, CategoryId::PUB_CAFE},
++ {CategoryId::PUB, CategoryId::PUB_CAFE},
++ {CategoryId::TEA_HOUSE, CategoryId::PUB_CAFE},
++ {CategoryId::RESTAURANT, CategoryId::EATING_DRINKING},
++ {CategoryId::AFGHAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::AFRICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ALGERIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::AMERICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CALIFORNIAN_RESTAURANT, CategoryId::AMERICAN_RESTAURANT},
++ {CategoryId::CREOLE_CAJUN_RESTAURANT, CategoryId::AMERICAN_RESTAURANT},
++ {CategoryId::NATIVE_AMERICAN, CategoryId::AMERICAN_RESTAURANT},
++ {CategoryId::SOUL_FOOD_RESTAURANT, CategoryId::AMERICAN_RESTAURANT},
++ {CategoryId::SOUTHERN, CategoryId::AMERICAN_RESTAURANT},
++ {CategoryId::SOUTHWESTERN, CategoryId::AMERICAN_RESTAURANT},
++ {CategoryId::ARABIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ARGENTINEAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ARMENIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ASIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::AUSTRALIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::AUSTRIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::AZERBAIJANI_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BALKAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BALTIC_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BANQUET_HALL, CategoryId::RESTAURANT},
++ {CategoryId::BARBECUE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BELARUSIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BELGIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BISTRO, CategoryId::RESTAURANT},
++ {CategoryId::BOHEMIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BOLIVIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BOSNIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BAIANA_RESTAURANT, CategoryId::BOSNIAN_RESTAURANT},
++ {CategoryId::BAKERY_RESTAURANT, CategoryId::BOSNIAN_RESTAURANT},
++ {CategoryId::CAPIXABA_RESTAURANT, CategoryId::BOSNIAN_RESTAURANT},
++ {CategoryId::MINEIRA_RESTAURANT, CategoryId::BOSNIAN_RESTAURANT},
++ {CategoryId::BRAZILIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BREAKFAST, CategoryId::RESTAURANT},
++ {CategoryId::BREWPUB, CategoryId::RESTAURANT},
++ {CategoryId::BRITISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BRUNCH, CategoryId::RESTAURANT},
++ {CategoryId::BRUNEIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BUFFET_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BULGARIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BURGER_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BURMESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CAFETERIA, CategoryId::RESTAURANT},
++ {CategoryId::CAMBODIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CANADIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CARIBBEAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CASUAL_DINING, CategoryId::RESTAURANT},
++ {CategoryId::CAUCASIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CHICKEN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CHILEAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CHINESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BEIJING_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::CANTONESE_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::CONGEE_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::GUANGXI_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::HOT_POT_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::HUBEI_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::HUNAN_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::INNER_MONGOLIAN_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::ISLAMIC_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::JIANGSU_ZHEJIANG_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::JIANGXI_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::NORTHEASTERN_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::SHANDONG_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::SHANGHAI_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::SZECHUAN_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::TAIWANESE_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::TIBETAN_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::YUNNAN_GUIZHOU_RESTAURANT, CategoryId::CHINESE_RESTAURANT},
++ {CategoryId::COLOMBIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CREPERIE, CategoryId::RESTAURANT},
++ {CategoryId::CUBAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CYPRIOT_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::CZECH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::DANISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::DINNER, CategoryId::RESTAURANT},
++ {CategoryId::DOMINICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::DOUGHNUT_SHOP, CategoryId::RESTAURANT},
++ {CategoryId::DUTCH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::EASTERN_EUROPEAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::EGYPTIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ENGLISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::EROTIC_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ETHIOPIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::EUROPEAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::EXOTIC_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::FAST_FOOD_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::FILIPINO_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::FINE_DINING, CategoryId::RESTAURANT},
++ {CategoryId::FINNISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::FONDUE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::FOOD_MARKET_STALL, CategoryId::RESTAURANT},
++ {CategoryId::FRENCH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ALSATIAN_RESTAURANT, CategoryId::FRENCH_RESTAURANT},
++ {CategoryId::AUVERGNATE_RESTAURANT, CategoryId::FRENCH_RESTAURANT},
++ {CategoryId::BASQUE_RESTAURANT, CategoryId::FRENCH_RESTAURANT},
++ {CategoryId::CORSICAN_RESTAURANT, CategoryId::FRENCH_RESTAURANT},
++ {CategoryId::LYONNAISE_RESTAURANT, CategoryId::FRENCH_RESTAURANT},
++ {CategoryId::PROVENCAL_RESTAURANT, CategoryId::FRENCH_RESTAURANT},
++ {CategoryId::SUD_OUEST_RESTAURANT, CategoryId::FRENCH_RESTAURANT},
++ {CategoryId::FUSION_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::GASTROPUB, CategoryId::RESTAURANT},
++ {CategoryId::GERMAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::GREEK_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::GRILL, CategoryId::RESTAURANT},
++ {CategoryId::HALAL, CategoryId::RESTAURANT},
++ {CategoryId::HOT_DOGS, CategoryId::RESTAURANT},
++ {CategoryId::HUNGARIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ICE_CREAM_PARLOR, CategoryId::RESTAURANT},
++ {CategoryId::INDIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::BENGALI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::GOAN_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::GUJARATI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::HYDERABADI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::JAIN_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::KONKANI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::MAHARASHTRIAN_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::MALVANI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::MUGHLAI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::NORTH_INDIAN_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::PARSI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::PUNJABI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::RAJASTHANI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::SOUTH_INDIAN_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::TANDOORI_RESTAURANT, CategoryId::INDIAN_RESTAURANT},
++ {CategoryId::INDONESIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::INTERNATIONAL_HOTEL, CategoryId::RESTAURANT},
++ {CategoryId::IRANIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::IRISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ISRAELI_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ITALIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::JAMAICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::JAPANESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SUSHI_RESTAURANT, CategoryId::JAPANESE_RESTAURANT},
++ {CategoryId::JUICE_BAR, CategoryId::RESTAURANT},
++ {CategoryId::KOREAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::KOSHER_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::LATIN_AMERICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::LEBANESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::LUNCH, CategoryId::RESTAURANT},
++ {CategoryId::LUXEMBOURGIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MACROBIOTIC_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MAGHRIB_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MALAYSIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MALTESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MAURITIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MEDITERRANEAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MEXICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::OAXAQUENA_RESTAURANT, CategoryId::MEXICAN_RESTAURANT},
++ {CategoryId::POBLANA_RESTAURANT, CategoryId::MEXICAN_RESTAURANT},
++ {CategoryId::VERACRUZANA_RESTAURANT, CategoryId::MEXICAN_RESTAURANT},
++ {CategoryId::YUCATECA_RESTAURANT, CategoryId::MEXICAN_RESTAURANT},
++ {CategoryId::MIDDLE_EASTERN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MONGOLIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MOROCCAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::MUSSEL_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::NATURAL_HEALTHY, CategoryId::RESTAURANT},
++ {CategoryId::NEPALESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::NOODLES, CategoryId::RESTAURANT},
++ {CategoryId::NORTH_AFRICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::NORTH_AMERICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::NORWEGIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::OCEANIC_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ORGANIC_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ORIENTAL_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::PAKISTANI_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::PASTRIES, CategoryId::RESTAURANT},
++ {CategoryId::PERUVIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::PIZZA_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::POLISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::POLYNESIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::PORTUGUESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ROADSIDE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::ROMANIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::RUSSIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SALAD_BAR, CategoryId::RESTAURANT},
++ {CategoryId::SANDWICH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SAVOYAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SCANDINAVIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SCOTTISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SEAFOOD_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SEYCHELLOIS_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SICILIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SINGAPOREAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SLAVIC_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SLOVAK_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SNACKS_BEVERAGES, CategoryId::RESTAURANT},
++ {CategoryId::SOUP_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SOUTH_AFRICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SOUTH_AMERICAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SOUTHEAST_ASIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SPANISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::TAPAS_RESTAURANT, CategoryId::SPANISH_RESTAURANT},
++ {CategoryId::SRI_LANKAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::STEAK_HOUSE, CategoryId::RESTAURANT},
++ {CategoryId::SUDANESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SURINAMESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SWEDISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SWISS_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::SYRIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::TAKEAWAY_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::TEPPANYAKI_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::THAI_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::TUNISIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::TURKISH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::UKRAINIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::URUGUAYAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::VEGETARIAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::VENEZUELAN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::VIETNAMESE_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::WELSH_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::WESTERN_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::YEMENI_RESTAURANT, CategoryId::RESTAURANT},
++ {CategoryId::RESTAURANT_AREA, CategoryId::RESTAURANT},
++ };
++
++ const QHash<CategoryId, CategoryId> governmentPublicServiceHierarchy = {
++ {CategoryId::GOVERNMENT_PUBLIC_SERVICE, CategoryId::INVALID},
++ {CategoryId::CITY_CENTER, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::COURTHOUSE, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::EDUCATIONAL_INSTITUTION, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::ART_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::CHILD_CARE_FACILITY, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::COACHING_INSTITUTE, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::COLLEGE_UNIVERSITY, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::CULINARY_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::DANCE_STUDIO_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::DRIVING_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::EDUCATIONAL_FACILITY, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::HIGH_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::JUNIOR_COLLEGE_COMMUNITY_COLLEGE, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::LANGUAGE_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::MIDDLE_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::PRESCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::PRIMARY_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::SENIOR_HIGH_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::SPECIAL_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::SPORTS_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::TECHNICAL_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::TRAINING_AND_DEVELOPMENT, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::VOCATIONAL_TRAINING_SCHOOL, CategoryId::EDUCATIONAL_INSTITUTION},
++ {CategoryId::EMBASSY, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::EMERGENCY_ASSEMBLY_POINT, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::EARTHQUAKE_ASSEMBLY_POINT, CategoryId::EMERGENCY_ASSEMBLY_POINT},
++ {CategoryId::FIRE_ASSEMBLY_POINT, CategoryId::EMERGENCY_ASSEMBLY_POINT},
++ {CategoryId::FLOOD_ASSEMBLY_POINT, CategoryId::EMERGENCY_ASSEMBLY_POINT},
++ {CategoryId::TSUNAMI_ASSEMBLY_POINT, CategoryId::EMERGENCY_ASSEMBLY_POINT},
++ {CategoryId::VOLCANIC_ERUPTION_ASSEMBLY_POINT, CategoryId::EMERGENCY_ASSEMBLY_POINT},
++ {CategoryId::FIRE_STATION, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::GOVERNMENT_OFFICE, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::CITY_HALL, CategoryId::GOVERNMENT_OFFICE},
++ {CategoryId::CIVIC_COMMUNITY_CENTER, CategoryId::GOVERNMENT_OFFICE},
++ {CategoryId::COUNTY_COUNCIL, CategoryId::GOVERNMENT_OFFICE},
++ {CategoryId::INTERNATIONAL_ORGANIZATION, CategoryId::GOVERNMENT_OFFICE},
++ {CategoryId::NATIONAL_ORGANIZATION, CategoryId::GOVERNMENT_OFFICE},
++ {CategoryId::TOWN_GOVERNMENT, CategoryId::GOVERNMENT_OFFICE},
++ {CategoryId::INDIAN_RESERVATION, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::MILITARY_BASE, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::ORGANIZATION, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::NON_GOVERNMENTAL_ORGANIZATION, CategoryId::ORGANIZATION},
++ {CategoryId::WELFARE_ORGANIZATION, CategoryId::ORGANIZATION},
++ {CategoryId::POLICE_STATION, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::POST_OFFICE, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::GENERAL_POST_OFFICE, CategoryId::POST_OFFICE},
++ {CategoryId::LOCAL_POST_OFFICE, CategoryId::POST_OFFICE},
++ {CategoryId::PRISON, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::PUBLIC_AMENITY, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::GOVERNMENT_OR_COMMUNITY_FACILITY, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::PASSENGER_TRANSPORT_TICKET_OFFICE, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::PEDESTRIAN_SUBWAY, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::PUBLIC_CALL_BOX, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::PUBLIC_RESTROOM, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::REGISTRATION_OFFICE, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::ROAD_RESCUE_POINT, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::STREET_OR_SQUARE, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::TOILET, CategoryId::PUBLIC_AMENITY},
++ {CategoryId::TRAFFIC_CONTROL_DEPARTMENT, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ {CategoryId::TRAFFIC_MANAGEMENT_BUREAU, CategoryId::GOVERNMENT_PUBLIC_SERVICE},
++ };
++
++ const QHash<CategoryId, CategoryId> healthCareHierarchy = {
++ {CategoryId::HEALTH_CARE, CategoryId::INVALID},
++ {CategoryId::DENTAL_CLINIC, CategoryId::HEALTH_CARE},
++ {CategoryId::EMERGENCY_ROOM, CategoryId::HEALTH_CARE},
++ {CategoryId::HEALTHCARE_SERVICE_CENTER, CategoryId::HEALTH_CARE},
++ {CategoryId::AMBULANCE_UNIT, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::BLOOD_BANK, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::GENERAL_PRACTICE, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::NURSING_HOME, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::OPTICAL, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::PERSONAL_CARE_INSTITUTION, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::PERSONAL_SERVICE_CENTER, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::PSYCHIATRIC_INSTITUTE, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::THERAPIST, CategoryId::HEALTHCARE_SERVICE_CENTER},
++ {CategoryId::HOSPITAL_CLINIC, CategoryId::HEALTH_CARE},
++ {CategoryId::CHINESE_MEDICINE_HOSPITAL, CategoryId::HOSPITAL_CLINIC},
++ {CategoryId::GENERAL_HOSPITAL, CategoryId::HOSPITAL_CLINIC},
++ {CategoryId::HOSPITAL_FOR_WOMEN_AND_CHILDREN, CategoryId::HOSPITAL_CLINIC},
++ {CategoryId::SPECIALIZED_HOSPITAL, CategoryId::HOSPITAL_CLINIC},
++ {CategoryId::MEDICAL_CLINIC, CategoryId::HEALTH_CARE},
++ {CategoryId::GENERAL_CLINIC, CategoryId::MEDICAL_CLINIC},
++ {CategoryId::PHYSIOTHERAPY_CLINIC, CategoryId::MEDICAL_CLINIC},
++ {CategoryId::SPECIALIST_CLINIC, CategoryId::MEDICAL_CLINIC},
++ {CategoryId::PHARMACY, CategoryId::HEALTH_CARE},
++ {CategoryId::VETERINARY_CLINIC, CategoryId::HEALTH_CARE},
++ };
++
++ const QHash<CategoryId, CategoryId> leisureHierarchy = {
++ {CategoryId::LEISURE, CategoryId::INVALID},
++ {CategoryId::AMUSEMENT_PARK, CategoryId::LEISURE},
++ {CategoryId::AMUSEMENT_ARCADE, CategoryId::AMUSEMENT_PARK},
++ {CategoryId::AMUSEMENT_CENTER, CategoryId::AMUSEMENT_PARK},
++ {CategoryId::CINEMA, CategoryId::LEISURE},
++ {CategoryId::CINEMA_LEVEL_3, CategoryId::CINEMA},
++ {CategoryId::DRIVE_IN_CINEMA, CategoryId::CINEMA},
++ {CategoryId::CLUB_ASSOCIATION, CategoryId::LEISURE},
++ {CategoryId::BEACH_CLUB, CategoryId::CLUB_ASSOCIATION},
++ {CategoryId::CAR_CLUB, CategoryId::CLUB_ASSOCIATION},
++ {CategoryId::HOCKEY_CLUB, CategoryId::CLUB_ASSOCIATION},
++ {CategoryId::COMMUNITY_CENTER, CategoryId::LEISURE},
++ {CategoryId::COLLECTIVE_COMMUNITY, CategoryId::COMMUNITY_CENTER},
++ {CategoryId::ENTERTAINMENT_PLAZA, CategoryId::LEISURE},
++ {CategoryId::GAMBLING_LOTTERY_BETTING, CategoryId::LEISURE},
++ {CategoryId::LEISURE_CENTER, CategoryId::LEISURE},
++ {CategoryId::FLYING_CLUB, CategoryId::LEISURE_CENTER},
++ {CategoryId::POOL_HALL, CategoryId::LEISURE_CENTER},
++ {CategoryId::SAUNA_SOLARIUM_MASSAGE_CENTER, CategoryId::LEISURE_CENTER},
++ {CategoryId::SPA, CategoryId::LEISURE_CENTER},
++ {CategoryId::LIBRARY, CategoryId::LEISURE},
++ {CategoryId::MARINA, CategoryId::LEISURE},
++ {CategoryId::MARINA_LEVEL_3, CategoryId::MARINA},
++ {CategoryId::YACHT_BASIN, CategoryId::MARINA},
++ {CategoryId::MUSEUM, CategoryId::LEISURE},
++ {CategoryId::ART_MUSEUM, CategoryId::MUSEUM},
++ {CategoryId::CHILDRENS_MUSEUM, CategoryId::MUSEUM},
++ {CategoryId::HISTORY_MUSEUM, CategoryId::MUSEUM},
++ {CategoryId::SCIENCE_MUSEUM, CategoryId::MUSEUM},
++ {CategoryId::NIGHTLIFE, CategoryId::LEISURE},
++ {CategoryId::ADULT_ENTERTAINMENT, CategoryId::NIGHTLIFE},
++ {CategoryId::BAR, CategoryId::NIGHTLIFE},
++ {CategoryId::COCKTAIL_BAR, CategoryId::BAR},
++ {CategoryId::WINE_BAR, CategoryId::BAR},
++ {CategoryId::LIVE_ENTERTAINMENT_CABARET, CategoryId::NIGHTLIFE},
++ {CategoryId::DANCING_CLUB, CategoryId::LIVE_ENTERTAINMENT_CABARET},
++ {CategoryId::DISCOTHEQUE, CategoryId::LIVE_ENTERTAINMENT_CABARET},
++ {CategoryId::VIDEO_ARCADE_GAMING_ROOM, CategoryId::LIVE_ENTERTAINMENT_CABARET},
++ {CategoryId::NIGHT_CLUB, CategoryId::NIGHTLIFE},
++ {CategoryId::COMEDY_CLUB, CategoryId::NIGHT_CLUB},
++ {CategoryId::JAZZ_CLUB, CategoryId::NIGHT_CLUB},
++ {CategoryId::KARAOKE_CLUB, CategoryId::NIGHT_CLUB},
++ {CategoryId::PRIVATE_CLUB, CategoryId::NIGHT_CLUB},
++ {CategoryId::PARK_RECREATION_AREA, CategoryId::LEISURE},
++ {CategoryId::AVENUE_BOULEVARD, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::BATTLEFIELD_SITE, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::BOAT_LAUNCHING_RAMP, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::CEMETERY, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::FAIRGROUND, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::FISHING_HUNTING_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::FOREST_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::HISTORIC_SITE, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::HISTORICAL_PARK, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::LAKESIDE, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::MEMORIAL, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::NATURAL_ATTRACTION_PARK, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::PARK, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::PICNIC_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::PRESERVED_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::PROTECTED_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::RECREATIONAL_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::SCENIC_RIVER_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::SEASHORE, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::SKI_RESORT, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::INDOOR_SKI_SLOPE, CategoryId::SKI_RESORT},
++ {CategoryId::WATER_PARK, CategoryId::SKI_RESORT},
++ {CategoryId::WILDERNESS_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::WINTER_SPORT_AREA, CategoryId::PARK_RECREATION_AREA},
++ {CategoryId::THEATER_MUSIC_CULTURE, CategoryId::LEISURE},
++ {CategoryId::AMPHITHEATER, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::CONCERT_HALL, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::CULTURAL_CENTER, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::DINNER_THEATER, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::GALLERY, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::MUSIC_VENUE, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::OPERA, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::PERFORMING_ARTS, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::THEATER, CategoryId::THEATER_MUSIC_CULTURE},
++ {CategoryId::TRAIL_SYSTEM, CategoryId::LEISURE},
++ {CategoryId::ADVENTURE_VEHICLE_TRAIL, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::HIKING_TRAIL, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::HORSE_RIDING_TRAIL, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::MOUNTAIN_BIKE_TRAIL, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::OFF_ROAD_TRAILHEAD, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::OUTDOOR_SERVICE, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::RANGER_STATION, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::ROCK_CLIMBING_TRAIL, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::SKI_LIFT, CategoryId::TRAIL_SYSTEM},
++ {CategoryId::WINERY, CategoryId::LEISURE},
++ {CategoryId::WINERY_LEVEL_3, CategoryId::WINERY},
++ {CategoryId::ZOO_BOTANICAL_GARDEN, CategoryId::LEISURE},
++ {CategoryId::AQUATIC_ZOO_MARINE_PARK, CategoryId::ZOO_BOTANICAL_GARDEN},
++ {CategoryId::ARBORETA_BOTANICAL_GARDEN, CategoryId::ZOO_BOTANICAL_GARDEN},
++ {CategoryId::WILDLIFE_PARK, CategoryId::ZOO_BOTANICAL_GARDEN},
++ {CategoryId::ZOO, CategoryId::ZOO_BOTANICAL_GARDEN},
++ };
++
++ const QHash<CategoryId, CategoryId> accommodationHierarchy = {
++ {CategoryId::ACCOMMODATION, CategoryId::INVALID},
++ {CategoryId::CAMPING_GROUND, CategoryId::ACCOMMODATION},
++ {CategoryId::CARAVAN_SITE, CategoryId::CAMPING_GROUND},
++ {CategoryId::RECREATIONAL_SITE, CategoryId::CAMPING_GROUND},
++ {CategoryId::HOTEL_MOTEL, CategoryId::ACCOMMODATION},
++ {CategoryId::BED_BREAKFAST_GUEST_HOUSE, CategoryId::HOTEL_MOTEL},
++ {CategoryId::CABIN_LODGE, CategoryId::HOTEL_MOTEL},
++ {CategoryId::HOSTEL, CategoryId::HOTEL_MOTEL},
++ {CategoryId::HOTEL, CategoryId::HOTEL_MOTEL},
++ {CategoryId::MOTEL, CategoryId::HOTEL_MOTEL},
++ {CategoryId::RESORT, CategoryId::HOTEL_MOTEL},
++ {CategoryId::REST_CAMPS, CategoryId::HOTEL_MOTEL},
++ {CategoryId::RESIDENTIAL_ACCOMMODATION, CategoryId::ACCOMMODATION},
++ {CategoryId::APARTMENT_COMPLEX, CategoryId::RESIDENTIAL_ACCOMMODATION},
++ {CategoryId::CONDOMINIUM_COMPLEX, CategoryId::RESIDENTIAL_ACCOMMODATION},
++ {CategoryId::HOLIDAY_PARK, CategoryId::RESIDENTIAL_ACCOMMODATION},
++ {CategoryId::RESIDENTIAL_ESTATE, CategoryId::RESIDENTIAL_ACCOMMODATION},
++ {CategoryId::RETIREMENT_COMMUNITY, CategoryId::RESIDENTIAL_ACCOMMODATION},
++ {CategoryId::TOWNHOUSE_COMPLEX, CategoryId::RESIDENTIAL_ACCOMMODATION},
++ {CategoryId::VACATION_RENTAL, CategoryId::ACCOMMODATION},
++ {CategoryId::APARTMENT, CategoryId::VACATION_RENTAL},
++ {CategoryId::BUNGALOW, CategoryId::VACATION_RENTAL},
++ {CategoryId::CHALET, CategoryId::VACATION_RENTAL},
++ {CategoryId::COTTAGE, CategoryId::VACATION_RENTAL},
++ {CategoryId::VILLA, CategoryId::VACATION_RENTAL},
++ };
++
++ const QHash<CategoryId, CategoryId> miscellaneousHierarchy = {
++ {CategoryId::MISCELLANEOUS, CategoryId::INVALID},
++ {CategoryId::ADMIN_FEATURE, CategoryId::MISCELLANEOUS},
++ {CategoryId::CAPITAL, CategoryId::ADMIN_FEATURE},
++ {CategoryId::CAPITAL_CITY, CategoryId::ADMIN_FEATURE},
++ {CategoryId::CONTINENT, CategoryId::ADMIN_FEATURE},
++ {CategoryId::COUNTRY, CategoryId::ADMIN_FEATURE},
++ {CategoryId::COUNTY, CategoryId::ADMIN_FEATURE},
++ {CategoryId::GENERAL_CITY, CategoryId::ADMIN_FEATURE},
++ {CategoryId::HAMLET, CategoryId::ADMIN_FEATURE},
++ {CategoryId::NEIGHBORHOOD, CategoryId::ADMIN_FEATURE},
++ {CategoryId::POSTAL_CODE, CategoryId::ADMIN_FEATURE},
++ {CategoryId::STREET, CategoryId::ADMIN_FEATURE},
++ {CategoryId::STREET_ADDRESS, CategoryId::ADMIN_FEATURE},
++ {CategoryId::TOWN, CategoryId::ADMIN_FEATURE},
++ {CategoryId::GEOGRAPHIC_FEATURE, CategoryId::MISCELLANEOUS},
++ {CategoryId::BAY, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::BODY_OF_WATER, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::CANAL, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::CAPE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::CAVE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::COVE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::DRY_LAKE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::DUNE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::HARBOR, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::HILL, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::ISLAND, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::LAGOON, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::LAKE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::MARSH_SWAMP_VLEI, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::MINERAL_HOT_SPRINGS, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::MOUNTAIN_PEAK, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::OASIS, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::PLAIN_FLATLAND, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::PLATEAU, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::QUARRY, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::RAPIDS, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::REEF, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::RESERVOIR, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::RIDGE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::RIVER_CROSSING, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::ROCKS, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::UNDERSEA_FEATURE, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::VALLEY, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::WATERFALL, CategoryId::GEOGRAPHIC_FEATURE},
++ {CategoryId::WELL, CategoryId::GEOGRAPHIC_FEATURE},
++ };
++
++ const QHash<CategoryId, CategoryId> shoppingHierarchy = {
++ {CategoryId::SHOPPING, CategoryId::INVALID},
++ {CategoryId::CONVENIENCE_STORE, CategoryId::SHOPPING},
++ {CategoryId::GROCERY, CategoryId::CONVENIENCE_STORE},
++ {CategoryId::GREENGROCERY, CategoryId::GROCERY},
++ {CategoryId::DEPARTMENT_STORE, CategoryId::SHOPPING},
++ {CategoryId::MARKET, CategoryId::SHOPPING},
++ {CategoryId::FARMERS_MARKET, CategoryId::MARKET},
++ {CategoryId::SHOP, CategoryId::SHOPPING},
++ {CategoryId::FOOD_MARKET, CategoryId::SHOP},
++ {CategoryId::INFORMAL_MARKET, CategoryId::SHOP},
++ {CategoryId::PUBLIC_MARKET, CategoryId::SHOP},
++ {CategoryId::SUPERMARKET, CategoryId::SHOP},
++ {CategoryId::ADULT_SHOP, CategoryId::SHOP},
++ {CategoryId::AGRICULTURAL_SUPPLIES, CategoryId::SHOP},
++ {CategoryId::ART_AND_ANTIQUES_STORE, CategoryId::SHOP},
++ {CategoryId::ARTS_AND_CRAFTS_SUPPLIES, CategoryId::SHOP},
++ {CategoryId::BAGS_LEATHERWEAR_SHOP, CategoryId::SHOP},
++ {CategoryId::BEAUTY_SALON, CategoryId::SHOP},
++ {CategoryId::BICYCLE_AND_BICYCLE_ACCESSORIES_SHOP, CategoryId::SHOP},
++ {CategoryId::BMX_SHOP, CategoryId::SHOP},
++ {CategoryId::BOATING_EQUIPMENT_STORE, CategoryId::SHOP},
++ {CategoryId::BOOKSTORE, CategoryId::SHOP},
++ {CategoryId::CAMPING_HIKING_SUPPLIES, CategoryId::SHOP},
++ {CategoryId::CANOE_KAYAK_STORE, CategoryId::SHOP},
++ {CategoryId::CD_DVD_GAME_VIDEO_STORE, CategoryId::SHOP},
++ {CategoryId::GAME_VIDEO_RENTALS, CategoryId::CD_DVD_GAME_VIDEO_STORE},
++ {CategoryId::CLOTHING_ACCESSORIES_STORE, CategoryId::SHOP},
++ {CategoryId::MENS_APPAREL, CategoryId::CLOTHING_ACCESSORIES_STORE},
++ {CategoryId::WOMENS_APPAREL, CategoryId::CLOTHING_ACCESSORIES_STORE},
++ {CategoryId::CHILDRENS_APPAREL, CategoryId::CLOTHING_ACCESSORIES_STORE},
++ {CategoryId::SHOE_STORE, CategoryId::CLOTHING_ACCESSORIES_STORE},
++ {CategoryId::SPECIALTY_CLOTHING_STORE, CategoryId::CLOTHING_ACCESSORIES_STORE},
++ {CategoryId::CONSTRUCTION_MATERIALS_EQUIPMENT_STORE, CategoryId::SHOP},
++ {CategoryId::DISCOUNT_STORE, CategoryId::SHOP},
++ {CategoryId::DRIVE_THROUGH_BOTTLE_SHOP, CategoryId::SHOP},
++ {CategoryId::DRY_CLEANERS, CategoryId::SHOP},
++ {CategoryId::ELECTRONICS_STORE, CategoryId::SHOP},
++ {CategoryId::PHOTOGRAPHIC_EQUIPMENT_STORE, CategoryId::ELECTRONICS_STORE},
++ {CategoryId::CONSUMER_ELECTRONICS_STORE, CategoryId::ELECTRONICS_STORE},
++ {CategoryId::COMPUTER_STORE, CategoryId::ELECTRONICS_STORE},
++ {CategoryId::OFFICE_EQUIPMENT_STORE, CategoryId::ELECTRONICS_STORE},
++ {CategoryId::MOBILE_SERVICE_CENTER, CategoryId::ELECTRONICS_STORE},
++ {CategoryId::MARINE_ELECTRONIC_EQUIPMENT_STORE, CategoryId::ELECTRONICS_STORE},
++ {CategoryId::MOBILE_PHONE_STORE, CategoryId::ELECTRONICS_STORE},
++ {CategoryId::FLORIST, CategoryId::SHOP},
++ {CategoryId::FOOD_DRINK_SHOP, CategoryId::SHOP},
++ {CategoryId::BAKERY, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::BUTCHERY, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::FISH_STORE, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::WINE_SPIRITS_STORE, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::DELICATESSEN, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::SPECIALTY_FOOD_STORE, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::SWEET_SHOP, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::DAIRY_GOODS, CategoryId::FOOD_DRINK_SHOP},
++ {CategoryId::GENERAL_STORE, CategoryId::SHOP},
++ {CategoryId::GIFT_STORE, CategoryId::SHOP},
++ {CategoryId::GLASSWARE_CERAMIC_SHOP, CategoryId::SHOP},
++ {CategoryId::HAIR_SALON_BARBERSHOP, CategoryId::SHOP},
++ {CategoryId::HARDWARE_STORE, CategoryId::SHOP},
++ {CategoryId::HOBBY_SHOP, CategoryId::SHOP},
++ {CategoryId::HOLIDAY_STORE, CategoryId::SHOP},
++ {CategoryId::HOUSE_GARDEN, CategoryId::SHOP},
++ {CategoryId::CARPET_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::CURTAIN_TEXTILE_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::DIY_CENTER, CategoryId::HOUSE_GARDEN},
++ {CategoryId::FURNITURE_AND_ACCESSORIES_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::GARDENING_SERVICES, CategoryId::HOUSE_GARDEN},
++ {CategoryId::KITCHEN_AND_SANITATION_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::LIGHTING_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::PAINTING_DECORATING_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::GLASS_WINDOW_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::FURNITURE_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::POWER_EQUIPMENT_DEALER, CategoryId::HOUSE_GARDEN},
++ {CategoryId::HOME_SPECIALTY_STORE, CategoryId::HOUSE_GARDEN},
++ {CategoryId::LUMBER, CategoryId::HOUSE_GARDEN},
++ {CategoryId::HUNTING_FISHING_SHOP, CategoryId::SHOP},
++ {CategoryId::JEWELRY_WATCH_STORE, CategoryId::SHOP},
++ {CategoryId::LAUNDRY, CategoryId::SHOP},
++ {CategoryId::LOCAL_SPECIALTY_STORE, CategoryId::SHOP},
++ {CategoryId::LOTTERY_SHOP, CategoryId::SHOP},
++ {CategoryId::MAKEUP_AND_COSMETICS_STORE, CategoryId::SHOP},
++ {CategoryId::MEDICAL_SUPPLIES_EQUIPMENT_STORE, CategoryId::SHOP},
++ {CategoryId::MUSICAL_INSTRUMENT_STORE, CategoryId::SHOP},
++ {CategoryId::NAIL_SALON, CategoryId::SHOP},
++ {CategoryId::NEWSAGENTS_TOBACCONISTS, CategoryId::SHOP},
++ {CategoryId::NON_STORE_RETAILERS, CategoryId::SHOP},
++ {CategoryId::OFFICE_SUPPLIES_SERVICES, CategoryId::SHOP},
++ {CategoryId::OPTICIANS, CategoryId::SHOP},
++ {CategoryId::OUTLET, CategoryId::SHOP},
++ {CategoryId::FACTORY_OUTLETS, CategoryId::OUTLET},
++ {CategoryId::RETAIL_OUTLETS, CategoryId::OUTLET},
++ {CategoryId::PAWN_SHOP, CategoryId::SHOP},
++ {CategoryId::PET_STORE, CategoryId::SHOP},
++ {CategoryId::ANIMAL_SERVICES, CategoryId::PET_STORE},
++ {CategoryId::PET_SUPPLY_STORE, CategoryId::PET_STORE},
++ {CategoryId::PHOTOCOPY_SHOP, CategoryId::SHOP},
++ {CategoryId::PHOTOGRAPHY_STUDIO, CategoryId::SHOP},
++ {CategoryId::REAL_ESTATE_AGENCY, CategoryId::SHOP},
++ {CategoryId::RUNNING_WALKING_EQUIPMENT_STORE, CategoryId::SHOP},
++ {CategoryId::SECOND_HAND_STORE, CategoryId::SHOP},
++ {CategoryId::SECURITY_SUPPLIES_STORE, CategoryId::SHOP},
++ {CategoryId::SHOPPING_SERVICE_CENTER, CategoryId::SHOP},
++ {CategoryId::SKATE_SHOP, CategoryId::SHOP},
++ {CategoryId::SKI_SHOP, CategoryId::SHOP},
++ {CategoryId::SNOWBOARD_SHOP, CategoryId::SHOP},
++ {CategoryId::SPECIALTY_STORE, CategoryId::SHOP},
++ {CategoryId::SPORTS_STORE, CategoryId::SHOP},
++ {CategoryId::STAMP_SHOP, CategoryId::SHOP},
++ {CategoryId::SURF_SHOP, CategoryId::SHOP},
++ {CategoryId::TACK_SHOP, CategoryId::SHOP},
++ {CategoryId::TAILORS, CategoryId::SHOP},
++ {CategoryId::TOY_STORE, CategoryId::SHOP},
++ {CategoryId::TRAVEL_AGENCY, CategoryId::SHOP},
++ {CategoryId::WAREHOUSE_SUPERMARKET, CategoryId::SHOP},
++ {CategoryId::SHOPPING_CENTER, CategoryId::SHOPPING},
++ };
++
++ const QHash<CategoryId, CategoryId> sportFitnessHierarchy = {
++ {CategoryId::SPORT_FITNESS, CategoryId::INVALID},
++ {CategoryId::GOLF_COURSE, CategoryId::SPORT_FITNESS},
++ {CategoryId::GOLF_DRIVING_RANGE, CategoryId::GOLF_COURSE},
++ {CategoryId::ICE_SKATING_RINK, CategoryId::SPORT_FITNESS},
++ {CategoryId::SPORTS_CENTER, CategoryId::SPORT_FITNESS},
++ {CategoryId::BOWLING_ALLEY, CategoryId::SPORTS_CENTER},
++ {CategoryId::FITNESS_CLUB_CENTER, CategoryId::SPORTS_CENTER},
++ {CategoryId::HORSE_RIDING_STABLE, CategoryId::SPORTS_CENTER},
++ {CategoryId::INDOOR_SPORTS, CategoryId::SPORTS_CENTER},
++ {CategoryId::SHOOTING_RANGE, CategoryId::SPORTS_CENTER},
++ {CategoryId::SPORTS_CENTER_LEVEL_3, CategoryId::SPORTS_CENTER},
++ {CategoryId::SQUASH_COURT, CategoryId::SPORTS_CENTER},
++ {CategoryId::THEMED_SPORTS_HALL, CategoryId::SPORTS_CENTER},
++ {CategoryId::STADIUM, CategoryId::SPORT_FITNESS},
++ {CategoryId::ATHLETICS_FIELD, CategoryId::STADIUM},
++ {CategoryId::BADMINTON_COURT, CategoryId::STADIUM},
++ {CategoryId::BASEBALL_FIELD, CategoryId::STADIUM},
++ {CategoryId::BASKETBALL_COURT, CategoryId::STADIUM},
++ {CategoryId::CRICKET_GROUND, CategoryId::STADIUM},
++ {CategoryId::FOOTBALL_FIELD, CategoryId::STADIUM},
++ {CategoryId::HOCKEY_FIELD, CategoryId::STADIUM},
++ {CategoryId::HORSE_RACING_TRACK, CategoryId::STADIUM},
++ {CategoryId::ICE_HOCKEY_RINK, CategoryId::STADIUM},
++ {CategoryId::MOTORSPORT_VENUE, CategoryId::STADIUM},
++ {CategoryId::MULTIPURPOSE_STADIUM, CategoryId::STADIUM},
++ {CategoryId::NETBALL_COURT, CategoryId::STADIUM},
++ {CategoryId::RACE_TRACK, CategoryId::STADIUM},
++ {CategoryId::RUGBY_GROUND, CategoryId::STADIUM},
++ {CategoryId::SOCCER_FIELD, CategoryId::STADIUM},
++ {CategoryId::TABLE_TENNIS_HALL, CategoryId::STADIUM},
++ {CategoryId::SWIMMING_POOL, CategoryId::SPORT_FITNESS},
++ {CategoryId::TENNIS_COURT, CategoryId::SPORT_FITNESS},
++ {CategoryId::WATER_SPORTS_CENTER, CategoryId::SPORT_FITNESS},
++ {CategoryId::DIVING_CENTER, CategoryId::WATER_SPORTS_CENTER},
++ };
++
++ const QHash<CategoryId, CategoryId> tourismHierarchy = {
++ {CategoryId::TOURISM, CategoryId::INVALID},
++ {CategoryId::ADVENTURE_SPORTS_VENUE, CategoryId::TOURISM},
++ {CategoryId::BEACH, CategoryId::TOURISM},
++ {CategoryId::PRIVATE_BEACH, CategoryId::BEACH},
++ {CategoryId::PUBLIC_BEACH, CategoryId::BEACH},
++ {CategoryId::OBSERVATION_DECK, CategoryId::TOURISM},
++ {CategoryId::PLACE_OF_WORSHIP, CategoryId::TOURISM},
++ {CategoryId::ASHRAM, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::BUDDHIST_TEMPLE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::CHURCH, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::DHARMA_TEMPLE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::GURDWARA, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::HINDU_TEMPLE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::JAIN_TEMPLE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::MORMON_CHURCH, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::MOSQUE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::PAGODA, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::SHINTO_SHRINE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::SYNAGOGUE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::TEMPLE, CategoryId::PLACE_OF_WORSHIP},
++ {CategoryId::TOURIST_ATTRACTION, CategoryId::TOURISM},
++ {CategoryId::ARCH, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::BREWERY, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::BRIDGE, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::BUILDING, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::DAM, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::LANDMARK, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::MAUSOLEUM_GRAVE, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::MONUMENT, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::NAMED_INTERSECTION_CHOWK, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::NATURAL_ATTRACTION, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::OBSERVATORY, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::PLANETARIUM, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::STATUE, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::TOWER, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::TUNNEL, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::WATER_HOLE, CategoryId::TOURIST_ATTRACTION},
++ {CategoryId::TOURIST_INFORMATION_OFFICE, CategoryId::TOURISM }
++ };
++
++ const QHash<CategoryId, CategoryId> transportHierarchy = {
++ {CategoryId::TRANSPORT, CategoryId::INVALID},
++ {CategoryId::ACCESS_GATEWAY, CategoryId::TRANSPORT},
++ {CategoryId::AIRLINE_ACCESS, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::CHECKPOINT, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::DELIVERY_ENTRANCE, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::ENTRANCE_EXIT, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::HIGHWAY_ENTRANCE, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::HIGHWAY_EXIT, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::SECURITY_GATE, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::STATION_ACCESS, CategoryId::ACCESS_GATEWAY},
++ {CategoryId::AIRPORT, CategoryId::TRANSPORT},
++ {CategoryId::AIRFIELD, CategoryId::AIRPORT},
++ {CategoryId::AIRPORT_TERMINAL, CategoryId::AIRPORT},
++ {CategoryId::MILITARY_AUTHORITY, CategoryId::AIRPORT},
++ {CategoryId::PRIVATE_AUTHORITY, CategoryId::AIRPORT},
++ {CategoryId::PUBLIC_AUTHORITY, CategoryId::AIRPORT},
++ {CategoryId::PUBLIC_SPORTS_AIRPORT, CategoryId::AIRPORT},
++ {CategoryId::BORDER_POST, CategoryId::TRANSPORT},
++ {CategoryId::FERRY_TERMINAL, CategoryId::TRANSPORT},
++ {CategoryId::DOCK, CategoryId::FERRY_TERMINAL},
++ {CategoryId::FERRY, CategoryId::FERRY_TERMINAL},
++ {CategoryId::TRAIN_FERRY, CategoryId::FERRY_TERMINAL},
++ {CategoryId::WATER_TRANSIT, CategoryId::FERRY_TERMINAL},
++ {CategoryId::HELIPAD, CategoryId::TRANSPORT},
++ {CategoryId::INTERSECTION, CategoryId::TRANSPORT},
++ {CategoryId::MOUNTAIN_PASS, CategoryId::TRANSPORT},
++ {CategoryId::PORT_WAREHOUSE, CategoryId::TRANSPORT},
++ {CategoryId::PUBLIC_TRANSPORT_STOP, CategoryId::TRANSPORT},
++ {CategoryId::AERIAL_LIFT, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::AERIAL_TRAMWAY, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::BUS_RAPID_TRANSIT, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::BUS_STATION, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::CABLE_TRAM, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::COACH_STATION, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::FUNICULAR, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::LOCAL_TRANSIT, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::PUBLIC_TRANSIT_ACCESS, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::TAXI_STAND, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::TOLL_GATE, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::TRAM_STOP, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::TRANSPORTATION_SERVICE, CategoryId::PUBLIC_TRANSPORT_STOP},
++ {CategoryId::RAILWAY_STATION, CategoryId::TRANSPORT},
++ {CategoryId::GENERIC_NODE, CategoryId::RAILWAY_STATION},
++ {CategoryId::INCLINED_RAIL, CategoryId::RAILWAY_STATION},
++ {CategoryId::INTERCITY_RAILWAY_STATION, CategoryId::RAILWAY_STATION},
++ {CategoryId::INTERNATIONAL_RAILWAY_STATION, CategoryId::RAILWAY_STATION},
++ {CategoryId::LIGHT_RAIL, CategoryId::RAILWAY_STATION},
++ {CategoryId::MONORAIL, CategoryId::RAILWAY_STATION},
++ {CategoryId::NATIONAL_RAILWAY_STATION, CategoryId::RAILWAY_STATION},
++ {CategoryId::RAILWAY_SIDING, CategoryId::RAILWAY_STATION},
++ {CategoryId::SUBWAY, CategoryId::RAILWAY_STATION},
++ {CategoryId::REST_AREA, CategoryId::TRANSPORT},
++ {CategoryId::COMPLETE_REST_AREA, CategoryId::REST_AREA},
++ {CategoryId::MOTORWAY_SERVICE_REST_AREA, CategoryId::REST_AREA},
++ {CategoryId::REST_AREA_PARKING_AND_RESTROOM_ONLY, CategoryId::REST_AREA},
++ {CategoryId::REST_AREA_PARKING_ONLY, CategoryId::REST_AREA},
++ {CategoryId::SCENIC_OVERLOOK_REST_AREA, CategoryId::REST_AREA},
++ {CategoryId::TRAFFIC, CategoryId::TRANSPORT},
++ {CategoryId::TRAFFIC_SIGNAL, CategoryId::TRAFFIC},
++ {CategoryId::TRAFFIC_LIGHT, CategoryId::TRAFFIC_SIGNAL},
++ {CategoryId::TRAFFIC_SIGN, CategoryId::TRAFFIC},
++ {CategoryId::TRANSPORT_CENTER, CategoryId::TRANSPORT},
++ {CategoryId::CARGO_CENTER, CategoryId::TRANSPORT_CENTER},
++ {CategoryId::AIRPORT_CARGO, CategoryId::CARGO_CENTER},
++ {CategoryId::CARGO_TRANSPORTATION, CategoryId::CARGO_CENTER},
++ {CategoryId::COURIERS, CategoryId::CARGO_CENTER},
++ {CategoryId::LOADING_DOCK, CategoryId::CARGO_CENTER},
++ {CategoryId::LOADING_ZONE, CategoryId::CARGO_CENTER},
++ {CategoryId::RAIL_YARD, CategoryId::CARGO_CENTER},
++ };
++
++ const QHash<CategoryId, CategoryId> othersHierarchy = {
++ {CategoryId::ADDRESS, CategoryId::INVALID},
++ {CategoryId::ADMINISTRATIVE_AREA_LEVEL_1, CategoryId::INVALID},
++ {CategoryId::ADMINISTRATIVE_AREA_LEVEL_2, CategoryId::INVALID},
++ {CategoryId::ADMINISTRATIVE_AREA_LEVEL_3, CategoryId::INVALID},
++ {CategoryId::ADMINISTRATIVE_AREA_LEVEL_4, CategoryId::INVALID},
++ {CategoryId::ADMINISTRATIVE_AREA_LEVEL_5, CategoryId::INVALID},
++ {CategoryId::CITIES, CategoryId::INVALID},
++ {CategoryId::COMMERCIAL_DISTRICT, CategoryId::INVALID},
++ {CategoryId::ESTABLISHMENT, CategoryId::INVALID},
++ {CategoryId::GEOCODE, CategoryId::INVALID},
++ {CategoryId::MAP_CONNECT, CategoryId::INVALID},
++ {CategoryId::REGIONS, CategoryId::INVALID},
++ };
++
++ const QList<QHash<CategoryId, CategoryId>> allParentChildHierarchies = {
++ automotiveHierarchy,
++ businessHierarchy,
++ eatingDrinkingHierarchy,
++ governmentPublicServiceHierarchy,
++ healthCareHierarchy,
++ leisureHierarchy,
++ accommodationHierarchy,
++ miscellaneousHierarchy,
++ shoppingHierarchy,
++ sportFitnessHierarchy,
++ tourismHierarchy,
++ transportHierarchy,
++ othersHierarchy
++ };
++
++ QString getCategoryIdName(CategoryId categoryId)
++ {
++ return QString::fromLatin1(QMetaEnum::fromType<CategoryId>().valueToKey(static_cast<int>(categoryId)));
++ }
++
++ CategoryId tryGetCategoryId(const QString &categoryName)
++ {
++ bool ok;
++ auto categoryId =
++ QMetaEnum::fromType<CategoryId>().keyToValue(
++ categoryName.toLatin1().constData(), &ok);
++ return ok ? static_cast<CategoryId>(categoryId) : CategoryId::INVALID;
++ }
++
++ }
++
++ namespace QPoiCategoryOhosMapKit {
++
++ QString tryGetParentCategoryIdOrEmpty(const QString &categoryId)
++ {
++ auto enumCategoryId = OhosPoiInternal::tryGetCategoryId(categoryId);
++ if (enumCategoryId == OhosPoiInternal::CategoryId::INVALID)
++ return QString();
++
++ OhosPoiInternal::CategoryId parentId = OhosPoiInternal::CategoryId::INVALID;
++
++ for (const auto &parentChildHierarchy : OhosPoiInternal::allParentChildHierarchies)
++ if (parentChildHierarchy.contains(enumCategoryId))
++ parentId = parentChildHierarchy.value(enumCategoryId);
++
++ return parentId != OhosPoiInternal::CategoryId::INVALID
++ ? OhosPoiInternal::getCategoryIdName(parentId)
++ : QString();
++ }
++
++ QStringList tryGetChildCategoryIdsOrEmpty(const QString &categoryId)
++ {
++ auto enumCategoryId = OhosPoiInternal::tryGetCategoryId(categoryId);
++ if (enumCategoryId == OhosPoiInternal::CategoryId::INVALID)
++ return QStringList();
++
++ QStringList childCategoryIds;
++
++ for (const auto &parentChildHierarchy : OhosPoiInternal::allParentChildHierarchies) {
++ if (parentChildHierarchy.contains(enumCategoryId)) {
++ for (auto it = parentChildHierarchy.begin(); it != parentChildHierarchy.end(); ++it)
++ if (it.value() == enumCategoryId)
++ childCategoryIds.push_back(OhosPoiInternal::getCategoryIdName(it.key()));
++ break;
++ }
++ }
++
++ return childCategoryIds;
++ }
++
++ }
++
++ #include "qpoicategoryohosmapkit.moc"