KOSMIndoorMap

osmelementinformationmodel_data.cpp
1 /*
2  SPDX-FileCopyrightText: 2020 Volker Krause <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include "osmelementinformationmodel.h"
8 #include "osmelementinformationmodel_p.h"
9 
10 #include <KLocalizedString>
11 
12 namespace KOSMIndoorMap {
13 
14 // TODO expand this, see:
15 // - https://taginfo.openstreetmap.org/keys/?key=amenity#values
16 // - https://taginfo.openstreetmap.org/keys/?key=shop#values
17 // - https://taginfo.openstreetmap.org/keys/?key=tourism#values
18 // - parts of https://taginfo.openstreetmap.org/keys/?key=office#values
19 // - parts of https://taginfo.openstreetmap.org/keys/?key=room#values
20 static constexpr const ValueMapEntry amenity_map[] = {
21  { "alcohol", I18N_NOOP2("OSM::amenity/shop", "Alcohol") },
22  { "atm", I18N_NOOP2("OSM::amenity/shop", "ATM") },
23  { "attraction", I18N_NOOP2("OSM::amenity/shop", "Attraction") },
24  { "bag", I18N_NOOP2("OSM::amenity/shop", "Bag") },
25  { "bakery", I18N_NOOP2("OSM::amenity/shop", "Bakery") },
26  { "bank", I18N_NOOP2("OSM::amenity/shop", "Bank") },
27  { "bar", I18N_NOOP2("OSM::amenity/shop", "Bar") },
28  { "beauty", I18N_NOOP2("OSM::amenity/shop", "Beauty") },
29  { "bed", I18N_NOOP2("OSM::amenity/shop", "Bed") },
30  { "beverages", I18N_NOOP2("OSM::amenity/shop", "Beverages") },
31  { "bicycle", I18N_NOOP2("OSM::amenity/shop", "Bicycle") },
32  { "bicycle_parking", I18N_NOOP2("OSM::amenity/shop", "Bicycle Parking") },
33  { "bicycle_rental", I18N_NOOP2("OSM::amenity/shop", "Bicycle Rental") },
34  { "books", I18N_NOOP2("OSM::amenity/shop", "Books") },
35  { "boutique", I18N_NOOP2("OSM::amenity/shop", "Boutique") },
36  { "bureau_de_change", I18N_NOOP2("OSM::amenity/shop", "Bureau de Change") },
37  { "butcher", I18N_NOOP2("OSM::amenity/shop", "Butcher") },
38  { "cafe", I18N_NOOP2("OSM::amenity/shop", "Cafe") },
39  { "car", I18N_NOOP2("OSM::amenity/shop", "Car") },
40  { "car_rental", I18N_NOOP2("OSM::amenity/shop", "Car Rental") },
41  { "car_sharing", I18N_NOOP2("OSM::amenity/shop", "Car Sharing") },
42  { "charging_station", I18N_NOOP2("OSM::amenity/shop", "Charging Station") },
43  { "chemist", I18N_NOOP2("OSM::amenity/shop", "Chemist") },
44  { "chocolate", I18N_NOOP2("OSM::amenity/shop", "Chocolate") },
45  { "cinema", I18N_NOOP2("OSM::amenity/shop", "Cinema") },
46  { "clothes", I18N_NOOP2("OSM::amenity/shop", "Clothes") },
47  { "coffee", I18N_NOOP2("OSM::amenity/shop", "Coffee") },
48  { "computer", I18N_NOOP2("OSM::amenity/shop", "Computer") },
49  { "confectionery", I18N_NOOP2("OSM::amenity/shop", "Confectionery") },
50  { "convenience", I18N_NOOP2("OSM::amenity/shop", "Convenience Store") },
51  { "copyshop", I18N_NOOP2("OSM::amenity/shop", "Copy Shop") },
52  { "cosmetics", I18N_NOOP2("OSM::amenity/shop", "Cosmetics") },
53  { "courthouse", I18N_NOOP2("OSM::amenity/shop", "Court House") },
54  { "deli", I18N_NOOP2("OSM::amenity/shop", "Deli") },
55  { "department_store", I18N_NOOP2("OSM::amenity/shop", "Department Store") },
56  { "doctors", I18N_NOOP2("OSM::amenity/shop", "Doctor") },
57  { "doityourself", I18N_NOOP2("OSM::amenity/shop", "Hardware Store") },
58  { "drinking_water", I18N_NOOP2("OSM::amenity/shop", "Drinking Water") },
59  { "dry_cleaning", I18N_NOOP2("OSM::amenity/shop", "Dry Cleaning") },
60  { "electronics", I18N_NOOP2("OSM::amenity/shop", "Electronics") },
61  { "fashion", I18N_NOOP2("OSM::amenity/shop", "Fashion") },
62  { "fast_food", I18N_NOOP2("OSM::amenity/shop", "Fast Food") },
63  { "ferry_terminal", I18N_NOOP2("OSM::amenity/shop", "Ferry Terminal") },
64  { "florist", I18N_NOOP2("OSM::amenity/shop", "Florist") },
65  { "food_court", I18N_NOOP2("OSM::amenity/shop", "Food Court") },
66  { "fountain", I18N_NOOP2("OSM::amenity/shop", "Fountain") },
67  { "furniture", I18N_NOOP2("OSM::amenity/shop", "Furniture") },
68  { "gallery", I18N_NOOP2("OSM::amenity/shop", "Gallery") },
69  { "garden_centre", I18N_NOOP2("OSM::amenity/shop", "Garden Center") },
70  { "gift", I18N_NOOP2("OSM::amenity/shop", "Gift Shop") },
71  { "greengrocer", I18N_NOOP2("OSM::amenity/shop", "Greengrocer") },
72  { "guest_house", I18N_NOOP2("OSM::amenity/shop", "Guest House") },
73  { "hairdresser", I18N_NOOP2("OSM::amenity/shop", "Hairdresser") },
74  { "hearing_aids", I18N_NOOP2("OSM::amenity/shop", "Hearing Aids") },
75  { "hospital", I18N_NOOP2("OSM::amenity/shop", "Hospital") },
76  { "hostel", I18N_NOOP2("OSM::amenity/shop", "Hostel") },
77  { "hotel", I18N_NOOP2("OSM::amenity/shop", "Hotel") },
78  { "houseware", I18N_NOOP2("OSM::amenity/shop", "Houseware") },
79  { "ice_cream", I18N_NOOP2("OSM::amenity/shop", "Ice Cream") },
80  { "information", I18N_NOOP2("OSM::amenity/shop", "Information") },
81  { "interior_decoration", I18N_NOOP2("OSM::amenity/shop", "Interior Decoration") },
82  { "internet_cafe", I18N_NOOP2("OSM::amenity/shop", "Internet Cafe") },
83  { "jewelry", I18N_NOOP2("OSM::amenity/shop", "Jewelry") },
84  { "kiosk", I18N_NOOP2("OSM::amenity/shop", "Kiosk") },
85  { "laundry", I18N_NOOP2("OSM::amenity/shop", "Laundry") },
86  { "library", I18N_NOOP2("OSM::amenity/shop", "Library") },
87  { "lockers", I18N_NOOP2("OSM::amenity/shop", "Locker") },
88  { "locksmith", I18N_NOOP2("OSM::amenity/shop", "Locksmith") },
89  { "lost_and_found", I18N_NOOP2("OSM::amenity/shop", "Lost & Found") },
90  { "lost_property", I18N_NOOP2("OSM::amenity/shop", "Lost & Found") },
91  { "luggage_locker", I18N_NOOP2("OSM::amenity/shop", "Locker") },
92  { "mall", I18N_NOOP2("OSM::amenity/shop", "Mall") },
93  { "medical_supply", I18N_NOOP2("OSM::amenity/shop", "Medical Supply") },
94  { "mobile_phone", I18N_NOOP2("OSM::amenity/shop", "Mobile Phone") },
95  { "money_transfer", I18N_NOOP2("OSM::amenity/shop", "Money Transfer") },
96  { "motorcycle_parking", I18N_NOOP2("OSM::amenity/shop", "Motorcycle Parking") },
97  { "motorcycle_rental", I18N_NOOP2("OSM::amenity/shop", "Motorcycle Rental") },
98  { "museum", I18N_NOOP2("OSM::amenity/shop", "Museum") },
99  { "music", I18N_NOOP2("OSM::amenity/shop", "Music") },
100  { "musical_instrument", I18N_NOOP2("OSM::amenity/shop", "Musical Instruments") },
101  { "newsagent", I18N_NOOP2("OSM::amenity/shop", "Newsagent") },
102  { "office", I18N_NOOP2("OSM::amenity/shop", "Office") },
103  { "optician", I18N_NOOP2("OSM::amenity/shop", "Optician") },
104  { "outdoor", I18N_NOOP2("OSM::amenity/shop", "Outdoor") },
105  { "paint", I18N_NOOP2("OSM::amenity/shop", "Paint") },
106  { "parking", I18N_NOOP2("OSM::amenity/shop", "Parking") },
107  { "parking_tickets", I18N_NOOP2("OSM::amenity/shop", "Parking Tickets") },
108  { "pastry", I18N_NOOP2("OSM::amenity/shop", "Pastry") },
109  { "perfumery", I18N_NOOP2("OSM::amenity/shop", "Perfumery") },
110  { "pet", I18N_NOOP2("OSM::amenity/shop", "Pet") },
111  { "pharmacy", I18N_NOOP2("OSM::amenity/shop", "Pharmacy") },
112  { "photo", I18N_NOOP2("OSM::amenity/shop", "Photo") },
113  { "place_of_worship", I18N_NOOP2("OSM::amenity/shop", "Place of Worship") },
114  { "police", I18N_NOOP2("OSM::amenity/shop", "Police") },
115  { "post_box", I18N_NOOP2("OSM::amenity/shop", "Post Box") },
116  { "post_office", I18N_NOOP2("OSM::amenity/shop", "Post Office") },
117  { "pub", I18N_NOOP2("OSM::amenity/shop", "Pub") },
118  { "public_transport_tickets", I18N_NOOP2("OSM::amenity/shop", "Public Transport Tickets") },
119  { "recycling", I18N_NOOP2("OSM::amenity/shop", "Recycling") },
120  { "restaurant", I18N_NOOP2("OSM::amenity/shop", "Restaurant") },
121  { "school", I18N_NOOP2("OSM::amenity/shop", "School") },
122  { "scooter_rental", I18N_NOOP2("OSM::amenity/shop", "Kick Scooter Rental") },
123  { "seafood", I18N_NOOP2("OSM::amenity/shop", "Seafood") },
124  { "shoes", I18N_NOOP2("OSM::amenity/shop", "Shoes") },
125  { "shop", I18N_NOOP2("OSM::amenity/shop", "Shop") },
126  { "social_facility", I18N_NOOP2("OSM::amenity/shop", "Social Facility") },
127  { "souveniers", I18N_NOOP2("OSM::amenity/shop", "Souvenirs") },
128  { "sports", I18N_NOOP2("OSM::amenity/shop", "Sports") },
129  { "stationery", I18N_NOOP2("OSM::amenity/shop", "Stationery") },
130  { "supermarket", I18N_NOOP2("OSM::amenity/shop", "Supermarket") },
131  { "tailor", I18N_NOOP2("OSM::amenity/shop", "Tailor") },
132  { "tatoo", I18N_NOOP2("OSM::amenity/shop", "Tattoo") },
133  { "taxi", I18N_NOOP2("OSM::amenity/shop", "Taxi") },
134  { "tea", I18N_NOOP2("OSM::amenity/shop", "Tea") },
135  { "theatre", I18N_NOOP2("OSM::amenity/shop", "Theatre") },
136  { "ticket", I18N_NOOP2("OSM::amenity/shop", "Tickets") },
137  { "tobacco", I18N_NOOP2("OSM::amenity/shop", "Tobacco") },
138  { "toilets", I18N_NOOP2("OSM::amenity/shop", "Toilets") },
139  { "townhall", I18N_NOOP2("OSM::amenity/shop", "Town Hall") },
140  { "toys", I18N_NOOP2("OSM::amenity/shop", "Toys") },
141  { "travel_agency", I18N_NOOP2("OSM::amenity/shop", "Travel Agency") },
142  { "travel_agent", I18N_NOOP2("OSM::amenity/shop", "Travel Agency") },
143  { "university", I18N_NOOP2("OSM::amenity/shop", "University") },
144  { "variety_store", I18N_NOOP2("OSM::amenity/shop", "Variety Store") },
145  { "video_games", I18N_NOOP2("OSM::amenity/shop", "Video Games") },
146  { "waiting", I18N_NOOP2("OSM::amenity/shop", "Waiting Area") },
147  { "waiting_area", I18N_NOOP2("OSM::amenity/shop", "Waiting Area") },
148  { "waiting_room", I18N_NOOP2("OSM::amenity/shop", "Waiting Area") },
149  { "wine", I18N_NOOP2("OSM::amenity/shop", "Wine") },
150 };
151 static_assert(isSortedLookupTable(amenity_map), "amenity map is not sorted!");
152 
153 // TODO expand this, see https://taginfo.openstreetmap.org/keys/cuisine#values
154 static constexpr const ValueMapEntry cuisine_map[] = {
155  { "american", I18N_NOOP2("OSM::cuisine", "American") },
156  { "arab", I18N_NOOP2("OSM::cuisine", "Arab") },
157  { "argentinian", I18N_NOOP2("OSM::cuisine", "Argentinian") },
158  { "asian", I18N_NOOP2("OSM::cuisine", "Asian") },
159  { "austrian", I18N_NOOP2("OSM::cuisine", "Austrian") },
160  { "barbecue", I18N_NOOP2("OSM::cuisine", "BBQ") },
161  { "bbq", I18N_NOOP2("OSM::cuisine", "BBQ") },
162  { "brazilian", I18N_NOOP2("OSM::cuisine", "Brazilian") },
163  { "breakfast", I18N_NOOP2("OSM::cuisine", "Breakfast") },
164  { "burger", I18N_NOOP2("OSM::cuisine", "Burger") },
165  { "cake", I18N_NOOP2("OSM::cuisine", "Cake") },
166  { "chicken", I18N_NOOP2("OSM::cuisine", "Chicken") },
167  { "chinese", I18N_NOOP2("OSM::cuisine", "Chinese") },
168  { "coffee_shop", I18N_NOOP2("OSM::cuisine", "Coffee Shop") },
169  { "cookies", I18N_NOOP2("OSM::cuisine", "Cookies") },
170  { "crepe", I18N_NOOP2("OSM::cuisine", "Crêpe") },
171  { "donut", I18N_NOOP2("OSM::cuisine", "Donut") },
172  { "falafel", I18N_NOOP2("OSM::cuisine", "Falafel") },
173  { "fish", I18N_NOOP2("OSM::cuisine", "Fish") },
174  { "fish_and_chips", I18N_NOOP2("OSM::cuisine", "Fish & Chips") },
175  { "french", I18N_NOOP2("OSM::cuisine", "French") },
176  { "german", I18N_NOOP2("OSM::cuisine", "German") },
177  { "greek", I18N_NOOP2("OSM::cuisine", "Greek") },
178  { "ice_cream", I18N_NOOP2("OSM::cuisine", "Ice Cream") },
179  { "indian", I18N_NOOP2("OSM::cuisine", "Indian") },
180  { "indonesian", I18N_NOOP2("OSM::cuisine", "Indonesian") },
181  { "international", I18N_NOOP2("OSM::cuisine", "International") },
182  { "italian", I18N_NOOP2("OSM::cuisine", "Italian") },
183  { "italian_pizza", I18N_NOOP2("OSM::cuisine", "Pizza") },
184  { "japanese", I18N_NOOP2("OSM::cuisine", "Japanese") },
185  { "juice", I18N_NOOP2("OSM::cuisine", "Juice") },
186  { "kebab", I18N_NOOP2("OSM::cuisine", "Kebab") },
187  { "korean", I18N_NOOP2("OSM::cuisine", "Korean") },
188  { "lebanese", I18N_NOOP2("OSM::cuisine", "Lebanese") },
189  { "local", I18N_NOOP2("OSM::cuisine", "Local") },
190  { "mediterranean", I18N_NOOP2("OSM::cuisine", "Mediterranean") },
191  { "mexican", I18N_NOOP2("OSM::cuisine", "Mexican") },
192  { "noodle", I18N_NOOP2("OSM::cuisine", "Noodle") },
193  { "pakistani", I18N_NOOP2("OSM::cuisine", "Pakistani") },
194  { "pancake", I18N_NOOP2("OSM::cuisine", "Pancake") },
195  { "pasta", I18N_NOOP2("OSM::cuisine", "Pasta") },
196  { "pizza", I18N_NOOP2("OSM::cuisine", "Pizza") },
197  { "polish", I18N_NOOP2("OSM::cuisine", "Polish") },
198  { "portuguese", I18N_NOOP2("OSM::cuisine", "Portuguese") },
199  { "ramen", I18N_NOOP2("OSM::cuisine", "Ramen") },
200  { "regional", I18N_NOOP2("OSM::cuisine", "Regional") },
201  { "salad", I18N_NOOP2("OSM::cuisine", "Salad") },
202  { "sandwich", I18N_NOOP2("OSM::cuisine", "Sandwich") },
203  { "sausage", I18N_NOOP2("OSM::cuisine", "Sausage") },
204  { "seafood", I18N_NOOP2("OSM::cuisine", "Seafood") },
205  { "soup", I18N_NOOP2("OSM::cuisine", "Soup") },
206  { "spanish", I18N_NOOP2("OSM::cuisine", "Spanish") },
207  { "steak", I18N_NOOP2("OSM::cuisine", "Steak") },
208  { "steak_house", I18N_NOOP2("OSM::cuisine", "Steak") },
209  { "sushi", I18N_NOOP2("OSM::cuisine", "Sushi") },
210  { "tapas", I18N_NOOP2("OSM::cuisine", "Tapas") },
211  { "thai", I18N_NOOP2("OSM::cuisine", "Thai") },
212  { "turkish", I18N_NOOP2("OSM::cuisine", "Turkish") },
213  { "vegetarian", I18N_NOOP2("OSM::cuisine", "Vegetarian") },
214  { "vietnamese", I18N_NOOP2("OSM::cuisine", "Vietnamese") },
215 };
216 static_assert(isSortedLookupTable(cuisine_map), "cuising map is not sorted!");
217 
218 // diet types offered at restaurants
219 struct {
220  const char *keyName;
221  const char *label;
222 
223  constexpr inline OSMElementInformationModel::Key key() const { return OSMElementInformationModel::Diet; }
224  constexpr inline OSMElementInformationModel::KeyCategory category() const { return OSMElementInformationModel::Main; }
225 } static constexpr const diet_type_map[] = {
226  { "diet:gluten_free", I18N_NOOP2("OSM::diet_type", "gluten free") },
227  { "diet:halal", I18N_NOOP2("OSM::diet_type", "halal") },
228  { "diet:kosher", I18N_NOOP2("OSM::diet_type", "kosher") },
229  { "diet:lactose_free", I18N_NOOP2("OSM::diet_type", "lactose free") },
230  { "diet:vegan", I18N_NOOP2("OSM::diet_type", "vegan") },
231  { "diet:vegetarian", I18N_NOOP2("OSM::diet_type", "vegetarian") },
232 };
233 static_assert(isSortedLookupTable(diet_type_map), "diet type map is not sorted!");
234 
235 // generic payment types (excluding cash, that's handled separately)
236 struct {
237  const char *keyName;
238  OSMElementInformationModel::Key m_key;
239 
240  constexpr inline OSMElementInformationModel::Key key() const { return m_key; }
241  constexpr inline OSMElementInformationModel::KeyCategory category() const { return OSMElementInformationModel::Payment; }
242 } static constexpr const payment_generic_type_map[] = {
243  { "payment:account_cards", OSMElementInformationModel::PaymentDebitCard },
244  { "payment:credit_cards", OSMElementInformationModel::PaymentCreditCard },
245  { "payment:debit_cards", OSMElementInformationModel::PaymentDebitCard },
246  { "payment:electronic_purses", OSMElementInformationModel::PaymentStoredValueCard },
247 };
248 static_assert(isSortedLookupTable(payment_generic_type_map), "generic payment type map is not sorted!");
249 
250 // payment vendor types only, generic ones go into the list above and are handled separately
251 struct {
252  const char *keyName;
253  OSMElementInformationModel::Key m_key;
254  const char *label;
255 
256  constexpr inline OSMElementInformationModel::Key key() const { return m_key; }
257  constexpr inline OSMElementInformationModel::KeyCategory category() const { return OSMElementInformationModel::Payment; }
258 } static constexpr const payment_type_map[] = {
259  { "payment:american_express", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "American Express") },
260  { "payment:apple_pay", OSMElementInformationModel::PaymentDigital, I18N_NOOP2("OSM::payment_method", "Apple Pay") },
261  { "payment:diners_club", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "Diners Club") },
262  { "payment:discover_card", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "Discover Card") },
263  { "payment:jcb", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "JCB") },
264  { "payment:girocard", OSMElementInformationModel::PaymentDebitCard, I18N_NOOP2("OSM::payment_method", "Girocard") },
265  { "payment:google_pay", OSMElementInformationModel::PaymentDigital, I18N_NOOP2("OSM::payment_method", "Google Pay") },
266  { "payment:maestro", OSMElementInformationModel::PaymentDebitCard, I18N_NOOP2("OSM::payment_method", "Maestro") },
267  { "payment:mastercard", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "Mastercard") },
268  { "payment:unionpay", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "UnionPay") },
269  { "payment:v_pay", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "V Pay") },
270  { "payment:vpay", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "V Pay") },
271  { "payment:visa", OSMElementInformationModel::PaymentCreditCard, I18N_NOOP2("OSM::payment_method", "Visa") },
272 };
273 
274 static constexpr const ValueMapEntry wheelchair_map[] = {
275  { "limited", I18N_NOOP2("OSM::wheelchair_access", "limited") },
276  { "no", I18N_NOOP2("OSM::wheelchair_access", "no") },
277  { "yes", I18N_NOOP2("OSM::wheelchair_access", "yes") },
278 };
279 static_assert(isSortedLookupTable(wheelchair_map), "wheelchair access map is not sorted!");
280 
281 // socket types for charging stations
282 struct {
283  const char *keyName;
284  const char *label;
285 
286  constexpr inline OSMElementInformationModel::Key key() const { return OSMElementInformationModel::Socket; }
287  constexpr inline OSMElementInformationModel::KeyCategory category() const { return OSMElementInformationModel::Main; }
288 } static constexpr const socket_type_map[] = {
289  { "socket:chademo", I18N_NOOP2("OSM::charging_station_socket", "Chademo") },
290  { "socket:schuko", I18N_NOOP2("OSM::charging_station_socket", "Schuko") },
291  { "socket:tesla_standard", I18N_NOOP2("OSM::charging_station_socket", "Tesla") },
292  { "socket:tesla_supercharger", I18N_NOOP2("OSM::charging_station_socket", "Tesla Supercharger") },
293  { "socket:tesla_supercharger_ccs", I18N_NOOP2("OSM::charging_station_socket", "Tesla Supercharger CCS") },
294  { "socket:type2", I18N_NOOP2("OSM::charging_station_socket", "Type 2") },
295  { "socket:type2_cable", I18N_NOOP2("OSM::charging_station_socket", "Type 2 cable") },
296  { "socket:type2_combo", I18N_NOOP2("OSM::charging_station_socket", "Type 2 CCS") },
297  { "socket:typee", I18N_NOOP2("OSM::charging_station_socket", "Type E") },
298 };
299 static_assert(isSortedLookupTable(socket_type_map), "socket type map is not sorted!");
300 
301 // charging station authentication methods
302 struct {
303  const char *keyName;
304  const char *label;
305 
306  constexpr inline OSMElementInformationModel::Key key() const { return OSMElementInformationModel::Authentication; }
307  constexpr inline OSMElementInformationModel::KeyCategory category() const { return OSMElementInformationModel::Main; }
308 } static constexpr const authentication_type_map[] = {
309  { "authentication:app", I18N_NOOP2("OSM::charging_station_authentication", "app") },
310  { "authentication:membership_card", I18N_NOOP2("OSM::charging_station_authentication", "membership card") },
311  { "authentication:nfc", I18N_NOOP2("OSM::charging_station_authentication", "NFC") },
312  { "authentication:none", I18N_NOOP2("OSM::charging_station_authentication", "none") },
313  { "authentication:phone_call", I18N_NOOP2("OSM::charging_station_authentication", "phone call") },
314  { "authentication:short_message", I18N_NOOP2("OSM::charging_station_authentication", "SMS") },
315 };
316 static_assert(isSortedLookupTable(authentication_type_map), "authentication type map is not sorted!");
317 
318 // bicycle parking values
319 // see https://taginfo.openstreetmap.org/keys/?key=bicycle_parking#values
320 static constexpr const ValueMapEntry bicycle_parking_map[] = {
321  { "anchors", I18N_NOOP2("OSM::bicycle_parking", "anchors") },
322  { "bollard", I18N_NOOP2("OSM::bicycle_parking", "bollard") },
323  { "building", I18N_NOOP2("OSM::bicycle_parking", "building") },
324  { "ground_slots", I18N_NOOP2("OSM::bicycle_parking", "ground slots") },
325  { "lockers", I18N_NOOP2("OSM::bicycle_parking", "lockers") },
326  { "racks", I18N_NOOP2("OSM::bicycle_parking", "racks") },
327  { "shed", I18N_NOOP2("OSM::bicycle_parking", "shed") },
328  { "stands", I18N_NOOP2("OSM::bicycle_parking", "stands") },
329  { "wall_loops", I18N_NOOP2("OSM::bicycle_parking", "wall loops") },
330  { "wide_stands", I18N_NOOP2("OSM::bicycle_parking", "wide stands") },
331 };
332 static_assert(isSortedLookupTable(bicycle_parking_map), "bicycle parking map is not sorted!");
333 
334 }
OSM-based multi-floor indoor maps for buildings.
#define I18N_NOOP2(context, text)
Category category(StandardShortcut id)
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Sat Oct 16 2021 23:05:32 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.