• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • kde-4.x
  • kdeedu
  • marble
  • src
  • lib
  • marble
StyleBuilder.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2007 Murad Tagirov <[email protected]>
9 // Copyright 2009 Patrick Spendrin <[email protected]>
10 // Copyright 2015 Marius-Valeriu Stanciu <[email protected]>
11 // Copyright 2016 Dennis Nienhüser <[email protected]>
12 //
13 
14 #include "StyleBuilder.h"
15 
16 #include "MarbleDirs.h"
17 #include "OsmPlacemarkData.h"
18 #include "OsmcSymbol.h"
19 #include "GeoDataGeometry.h"
20 #include "GeoDataLinearRing.h"
21 #include "GeoDataLineString.h"
22 #include "GeoDataPlacemark.h"
23 #include "GeoDataPoint.h"
24 #include "GeoDataPolygon.h"
25 #include "GeoDataIconStyle.h"
26 #include "GeoDataLabelStyle.h"
27 #include "GeoDataLineStyle.h"
28 #include "GeoDataPolyStyle.h"
29 
30 #include <QApplication>
31 #include <QFont>
32 #include <QImage>
33 #include <QDate>
34 #include <QSet>
35 #include <QScreen>
36 #include <QHash>
37 #include <QDebug>
38 
39 namespace Marble
40 {
41 
42 class StyleBuilder::Private
43 {
44 public:
45  Private();
46 
47  GeoDataStyle::ConstPtr presetStyle(GeoDataPlacemark::GeoDataVisualCategory visualCategory) const;
48 
49  static GeoDataStyle::Ptr createStyle(qreal width, qreal realWidth, const QColor& color,
50  const QColor& outlineColor, bool fill, bool outline,
51  Qt::BrushStyle brushStyle, Qt::PenStyle penStyle,
52  Qt::PenCapStyle capStyle, bool lineBackground,
53  const QVector< qreal >& dashPattern,
54  const QFont& font, const QColor& fontColor = Qt::black,
55  const QString& texturePath = QString());
56  static GeoDataStyle::Ptr createPOIStyle(const QFont &font, const QString &bitmap,
57  const QColor &textColor = Qt::black,
58  const QColor &color = QColor(0xBE, 0xAD, 0xAD),
59  const QColor &outline = QColor(0xBE, 0xAD, 0xAD).darker(),
60  bool fill = true, bool renderOutline = true);
61  static GeoDataStyle::Ptr createOsmPOIStyle(const QFont &font, const QString &bitmap,
62  const QColor &textColor = Qt::black,
63  const QColor &color = QColor(0xBE, 0xAD, 0xAD),
64  const QColor &outline = QColor(0xBE, 0xAD, 0xAD).darker());
65  static GeoDataStyle::Ptr createOsmPOIRingStyle(const QFont &font, const QString &bitmap,
66  const QColor &textColor = Qt::black,
67  const QColor &color = QColor(0xBE, 0xAD, 0xAD),
68  const QColor &outline = QColor(0xBE, 0xAD, 0xAD).darker());
69  static GeoDataStyle::Ptr createOsmPOIAreaStyle(const QFont &font, const QString &bitmap,
70  const QColor &textColor = Qt::black,
71  const QColor &color = QColor(0xBE, 0xAD, 0xAD),
72  const QColor &outline = QColor(0xBE, 0xAD, 0xAD).darker());
73  static GeoDataStyle::Ptr createHighwayStyle(const QColor& color, const QColor& outlineColor, const QFont& font,
74  const QColor& fontColor = Qt::black,
75  qreal width = 1, qreal realWidth = 0.0,
76  Qt::PenStyle penStyle = Qt::SolidLine,
77  Qt::PenCapStyle capStyle = Qt::RoundCap,
78  bool lineBackground = false);
79  GeoDataStyle::Ptr createWayStyle(const QColor& color, const QColor& outlineColor,
80  bool fill = true, bool outline = true,
81  Qt::BrushStyle brushStyle = Qt::SolidPattern,
82  const QString& texturePath = QString()) const;
83  static GeoDataStyle::Ptr createIconWayStyle(const QColor& color, const QFont &font, const QColor &textColor, double lineWidth=1.0, const QString& iconPath = QString());
84 
85  GeoDataStyle::ConstPtr createRelationStyle(const StyleParameters &parameters);
86  GeoDataStyle::ConstPtr createPlacemarkStyle(const StyleParameters &parameters);
87  GeoDataStyle::ConstPtr adjustPisteStyle(const StyleParameters &parameters, const GeoDataStyle::ConstPtr &style);
88  static void adjustWayWidth(const StyleParameters &parameters, GeoDataLineStyle &lineStyle);
89 
90  // Having an outline with the same color as the fill results in degraded
91  // performance and degraded display quality for no good reason
92  // Q_ASSERT( !(outline && color == outlineColor && brushStyle == Qt::SolidPattern) );
93  void initializeDefaultStyles();
94 
95  static QString createPaintLayerItem(const QString &itemType, GeoDataPlacemark::GeoDataVisualCategory visualCategory, const QString &subType = QString());
96 
97  static void initializeOsmVisualCategories();
98  static void initializeMinimumZoomLevels();
99 
100  int m_maximumZoomLevel;
101  QColor m_defaultLabelColor;
102  QFont m_defaultFont;
103  GeoDataStyle::Ptr m_defaultStyle[GeoDataPlacemark::LastIndex];
104  GeoDataStyle::Ptr m_styleTreeAutumn;
105  GeoDataStyle::Ptr m_styleTreeWinter;
106  bool m_defaultStyleInitialized;
107 
108  QHash<QString, GeoDataStyle::Ptr> m_styleCache;
109  QHash<GeoDataPlacemark::GeoDataVisualCategory, GeoDataStyle::Ptr> m_buildingStyles;
110  QSet<QLocale::Country> m_oceanianCountries;
111 
115  static QHash<OsmTag, GeoDataPlacemark::GeoDataVisualCategory> s_visualCategories;
116  static int s_defaultMinZoomLevels[GeoDataPlacemark::LastIndex];
117  static bool s_defaultMinZoomLevelsInitialized;
118  static QHash<GeoDataPlacemark::GeoDataVisualCategory, qint64> s_popularities;
119 };
120 
121 QHash<StyleBuilder::OsmTag, GeoDataPlacemark::GeoDataVisualCategory> StyleBuilder::Private::s_visualCategories;
122 int StyleBuilder::Private::s_defaultMinZoomLevels[GeoDataPlacemark::LastIndex];
123 bool StyleBuilder::Private::s_defaultMinZoomLevelsInitialized = false;
124 QHash<GeoDataPlacemark::GeoDataVisualCategory, qint64> StyleBuilder::Private::s_popularities;
125 
126 StyleBuilder::Private::Private() :
127  m_maximumZoomLevel(15),
128  m_defaultLabelColor(Qt::black),
129  m_defaultFont(QStringLiteral("Sans Serif")),
130  m_defaultStyle(),
131  m_defaultStyleInitialized(false),
132  m_oceanianCountries(
133 {
134  QLocale::Australia, QLocale::NewZealand, QLocale::Fiji,
135  QLocale::PapuaNewGuinea, QLocale::NewCaledonia, QLocale::SolomonIslands,
136  QLocale::Samoa, QLocale::Vanuatu, QLocale::Guam,
137  QLocale::FrenchPolynesia, QLocale::Tonga, QLocale::Palau,
138  QLocale::Kiribati, QLocale::CookIslands, QLocale::Micronesia,
139  QLocale::MarshallIslands, QLocale::NauruCountry,
140  QLocale::AmericanSamoa, QLocale::Niue, QLocale::Pitcairn,
141  QLocale::WallisAndFutunaIslands, QLocale::NorfolkIsland
142 })
143 {
144 #if QT_VERSION >= 0x050700
145  m_oceanianCountries << QLocale::TuvaluCountry << QLocale::OutlyingOceania;
146 #else
147  m_oceanianCountries << QLocale::Tuvalu;
148 #endif
149  initializeMinimumZoomLevels();
150  for (int i = 0; i < GeoDataPlacemark::LastIndex; ++i) {
151  m_maximumZoomLevel = qMax(m_maximumZoomLevel, s_defaultMinZoomLevels[i]);
152  }
153 }
154 
155 GeoDataStyle::Ptr StyleBuilder::Private::createPOIStyle(const QFont &font, const QString &path,
156  const QColor &textColor, const QColor &color, const QColor &outlineColor, bool fill, bool renderOutline)
157 {
158  GeoDataStyle::Ptr style = createStyle(1, 0, color, outlineColor, fill, renderOutline, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector<qreal>(), font);
159  style->setIconStyle(GeoDataIconStyle(path));
160  auto const screen = QApplication::screens().first();
161  double const physicalSize = 6.0; // mm
162  int const pixelSize = qRound(physicalSize * screen->physicalDotsPerInch() / (IN2M * M2MM));
163  style->iconStyle().setSize(QSize(pixelSize, pixelSize));
164  style->setLabelStyle(GeoDataLabelStyle(font, textColor));
165  style->labelStyle().setAlignment(GeoDataLabelStyle::Center);
166  return style;
167 }
168 
169 GeoDataStyle::Ptr StyleBuilder::Private::createOsmPOIStyle(const QFont &font, const QString &imagePath,
170  const QColor &textColor, const QColor &color, const QColor &outlineColor)
171 {
172  QString const path = MarbleDirs::path(QLatin1String("svg/osmcarto/svg/") + imagePath + QLatin1String(".svg"));
173  return createPOIStyle(font, path, textColor, color, outlineColor, false, false);
174 }
175 
176 GeoDataStyle::Ptr StyleBuilder::Private::createOsmPOIRingStyle(const QFont &font, const QString &imagePath,
177  const QColor &textColor, const QColor &color, const QColor &outlineColor)
178 {
179  QString const path = MarbleDirs::path(QLatin1String("svg/osmcarto/svg/") + imagePath + QLatin1String(".svg"));
180  return createPOIStyle(font, path, textColor, color, outlineColor, false, true);
181 }
182 
183 GeoDataStyle::Ptr StyleBuilder::Private::createOsmPOIAreaStyle(const QFont &font, const QString &imagePath,
184  const QColor &textColor, const QColor &color, const QColor &outlineColor)
185 {
186  QString const path = MarbleDirs::path(QLatin1String("svg/osmcarto/svg/") + imagePath + QLatin1String(".svg"));
187  return createPOIStyle(font, path, textColor, color, outlineColor, true, false);
188 }
189 
190 
191 GeoDataStyle::Ptr StyleBuilder::Private::createHighwayStyle(const QColor& color, const QColor& outlineColor, const QFont& font,
192  const QColor& fontColor, qreal width, qreal realWidth, Qt::PenStyle penStyle,
193  Qt::PenCapStyle capStyle, bool lineBackground)
194 {
195  return createStyle(width, realWidth, color, outlineColor, true, true, Qt::SolidPattern, penStyle, capStyle, lineBackground, QVector< qreal >(), font, fontColor);
196 }
197 
198 GeoDataStyle::Ptr StyleBuilder::Private::createWayStyle(const QColor& color, const QColor& outlineColor,
199  bool fill, bool outline, Qt::BrushStyle brushStyle, const QString& texturePath) const
200 {
201  return createStyle(1, 0, color, outlineColor, fill, outline, brushStyle, Qt::SolidLine, Qt::RoundCap, false, QVector<qreal>(), m_defaultFont, Qt::black, texturePath);
202 }
203 
204 GeoDataStyle::Ptr StyleBuilder::Private::createIconWayStyle(const QColor &color, const QFont &font, const QColor &textColor, double lineWidth, const QString &iconPath)
205 {
206  auto const path = iconPath.isEmpty() ? iconPath : MarbleDirs::path(iconPath);
207  auto style = createPOIStyle(font, path, textColor, color, color, true, true);
208  style->lineStyle().setWidth(float(lineWidth));
209  return style;
210 }
211 
212 GeoDataStyle::ConstPtr StyleBuilder::Private::createRelationStyle(const StyleParameters &parameters)
213 {
214  Q_ASSERT(parameters.relation);
215  const GeoDataPlacemark *const placemark = parameters.placemark;
216  auto const visualCategory = placemark->visualCategory();
217  bool const isHighway = visualCategory >= GeoDataPlacemark::HighwaySteps && visualCategory <= GeoDataPlacemark::HighwayMotorway;
218  bool const isRailway = visualCategory >= GeoDataPlacemark::RailwayRail && visualCategory <= GeoDataPlacemark::RailwayFunicular;
219  if (isHighway || isRailway) {
220  if (parameters.relation->relationType() == GeoDataRelation::RouteHiking &&
221  parameters.relation->osmData().containsTagKey(QStringLiteral("osmc:symbol"))) {
222  QString const osmcSymbolValue = parameters.relation->osmData().tagValue(QStringLiteral("osmc:symbol"));
223  // Take cached Style instance if possible
224  QString const cacheKey = QStringLiteral("/route/hiking/%1").arg(osmcSymbolValue);
225  if (m_styleCache.contains(cacheKey)) {
226  return m_styleCache[cacheKey];
227  }
228 
229  auto style = presetStyle(visualCategory);
230  auto lineStyle = style->lineStyle();
231  if (isHighway) {
232  adjustWayWidth(parameters, lineStyle);
233  }
234  auto iconStyle = style->iconStyle();
235  GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style));
236  OsmcSymbol symbol = OsmcSymbol(osmcSymbolValue);
237  lineStyle.setColor(symbol.wayColor());
238  iconStyle.setIcon(symbol.icon());
239  newStyle->setLineStyle(lineStyle);
240  newStyle->setIconStyle(iconStyle);
241  style = newStyle;
242  m_styleCache.insert(cacheKey, newStyle);
243  return style;
244  }
245 
246  if (parameters.relation->relationType() >= GeoDataRelation::RouteRoad &&
247  parameters.relation->relationType() <= GeoDataRelation::RouteInlineSkates) {
248  auto const colorValue = parameters.relation->osmData().tagValue(QStringLiteral("colour"));
249  QString color = colorValue;
250  if (!QColor::isValidColor(colorValue)) {
251  switch (parameters.relation->relationType()) {
252  case GeoDataRelation::RouteTrain:
253  color = QStringLiteral("navy"); break;
254  case GeoDataRelation::RouteSubway:
255  color = QStringLiteral("cornflowerblue"); break;
256  case GeoDataRelation::RouteTram:
257  color = QStringLiteral("steelblue"); break;
258  case GeoDataRelation::RouteBus:
259  case GeoDataRelation::RouteTrolleyBus:
260  color = QStringLiteral("tomato"); break;
261  case GeoDataRelation::RouteBicycle:
262  case GeoDataRelation::RouteMountainbike:
263  case GeoDataRelation::RouteFoot:
264  case GeoDataRelation::RouteHiking:
265  case GeoDataRelation::RouteHorse:
266  case GeoDataRelation::RouteInlineSkates:
267  color = QStringLiteral("paleturquoise"); break;
268  case GeoDataRelation::UnknownType:
269  case GeoDataRelation:: RouteRoad:
270  case GeoDataRelation::RouteDetour:
271  case GeoDataRelation::RouteFerry:
272  case GeoDataRelation::RouteSkiDownhill:
273  case GeoDataRelation::RouteSkiNordic:
274  case GeoDataRelation::RouteSkitour:
275  case GeoDataRelation::RouteSled:
276  color = QString(); break;
277  }
278  }
279  // Take cached Style instance if possible
280  QString const cacheKey = QStringLiteral("/route/%1/%2").arg(parameters.relation->relationType()).arg(color);
281  if (m_styleCache.contains(cacheKey)) {
282  return m_styleCache[cacheKey];
283  }
284 
285  auto style = presetStyle(visualCategory);
286  auto lineStyle = style->lineStyle();
287  if (isHighway) {
288  adjustWayWidth(parameters, lineStyle);
289  }
290  GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style));
291  if (!color.isEmpty()) {
292  lineStyle.setColor(QColor(color));
293  auto labelStyle = style->labelStyle();
294  labelStyle.setColor(GeoDataColorStyle::contrastColor(color));
295  newStyle->setLabelStyle(labelStyle);
296  }
297  newStyle->setLineStyle(lineStyle);
298  style = newStyle;
299  m_styleCache.insert(cacheKey, newStyle);
300  return style;
301  }
302  }
303  return GeoDataStyle::ConstPtr();
304 }
305 
306 GeoDataStyle::ConstPtr StyleBuilder::Private::createPlacemarkStyle(const StyleParameters &parameters)
307 {
308  const GeoDataPlacemark *const placemark = parameters.placemark;
309  QString styleCacheKey;
310 
311  OsmPlacemarkData const & osmData = placemark->osmData();
312  auto const visualCategory = placemark->visualCategory();
313  if (visualCategory == GeoDataPlacemark::Building) {
314  auto const tagMap = osmTagMapping();
315  auto const & osmData = placemark->osmData();
316  auto const buildingTag = QStringLiteral("building");
317  for (auto iter = osmData.tagsBegin(), end = osmData.tagsEnd(); iter != end; ++iter) {
318  auto const osmTag = StyleBuilder::OsmTag(iter.key(), iter.value());
319  if (iter.key() != buildingTag && tagMap.contains(osmTag)) {
320  return m_buildingStyles.value(tagMap.value(osmTag), m_defaultStyle[visualCategory]);
321  }
322  }
323  }
324 
325  GeoDataStyle::ConstPtr style = presetStyle(visualCategory);
326 
327  if (geodata_cast<GeoDataPoint>(placemark->geometry())) {
328  if (visualCategory == GeoDataPlacemark::NaturalTree) {
329  GeoDataCoordinates const coordinates = placemark->coordinate();
330  qreal const lat = coordinates.latitude(GeoDataCoordinates::Degree);
331  if (qAbs(lat) > 15) {
333  int const month = QDate::currentDate().month();
334  bool const southernHemisphere = lat < 0;
335  if (southernHemisphere) {
336  if (month >= 3 && month <= 5) {
337  style = m_styleTreeAutumn;
338  } else if (month >= 6 && month <= 8) {
339  style = m_styleTreeWinter;
340  }
341  } else {
342  if (month >= 9 && month <= 11) {
343  style = m_styleTreeAutumn;
344  } else if (month == 12 || month == 1 || month == 2) {
345  style = m_styleTreeWinter;
346  }
347  }
348  }
349  }
350  } else if (geodata_cast<GeoDataLinearRing>(placemark->geometry())) {
351  bool adjustStyle = false;
352 
353  GeoDataPolyStyle polyStyle = style->polyStyle();
354  GeoDataLineStyle lineStyle = style->lineStyle();
355  if (visualCategory == GeoDataPlacemark::NaturalWater) {
356  if (osmData.containsTag(QStringLiteral("salt"), QStringLiteral("yes"))) {
357  polyStyle.setColor("#ffff80");
358  lineStyle.setPenStyle(Qt::DashLine);
359  lineStyle.setWidth(2);
360  adjustStyle = true;
361  }
362  } else if (visualCategory == GeoDataPlacemark::Bathymetry) {
363  auto tagIter = osmData.findTag(QStringLiteral("ele"));
364  if (tagIter != osmData.tagsEnd()) {
365  const QString& elevation = tagIter.value();
366  if (elevation == QLatin1String("4000")) {
367  polyStyle.setColor("#94c2c2");
368  lineStyle.setColor("#94c2c2");
369  adjustStyle = true;
370  }
371  }
372  } else if (visualCategory == GeoDataPlacemark::AmenityGraveyard || visualCategory == GeoDataPlacemark::LanduseCemetery) {
373  auto tagIter = osmData.findTag(QStringLiteral("religion"));
374  if (tagIter != osmData.tagsEnd()) {
375  const QString& religion = tagIter.value();
376  if (religion == QLatin1String("jewish")) {
377  polyStyle.setTexturePath(MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_jewish.png"));
378  adjustStyle = true;
379  } else if (religion == QLatin1String("christian")) {
380  polyStyle.setTexturePath(MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_christian.png"));
381  adjustStyle = true;
382  } else if (religion == QLatin1String("INT-generic")) {
383  polyStyle.setTexturePath(MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_generic.png"));
384  adjustStyle = true;
385  }
386  }
387  } else if (visualCategory == GeoDataPlacemark::PisteDownhill) {
388  return adjustPisteStyle(parameters, style);
389  }
390 
391  if (adjustStyle) {
392  GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style));
393  newStyle->setPolyStyle(polyStyle);
394  newStyle->setLineStyle(lineStyle);
395  style = newStyle;
396  }
397 
398  if (style->iconStyle().iconPath().isEmpty()) {
399  const GeoDataPlacemark::GeoDataVisualCategory category = determineVisualCategory(osmData);
400  const GeoDataStyle::ConstPtr categoryStyle = presetStyle(category);
401  if (category != GeoDataPlacemark::None && !categoryStyle->iconStyle().scaledIcon().isNull()) {
402  GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style));
403  newStyle->setIconStyle(categoryStyle->iconStyle());
404  style = newStyle;
405  }
406  }
407  } else if (geodata_cast<GeoDataLineString>(placemark->geometry())) {
408  GeoDataPolyStyle polyStyle = style->polyStyle();
409  GeoDataLineStyle lineStyle = style->lineStyle();
410  GeoDataLabelStyle labelStyle = style->labelStyle();
411  GeoDataIconStyle iconStyle = style->iconStyle();
412  lineStyle.setCosmeticOutline(true);
413 
414  bool adjustStyle = false;
415 
416  if (visualCategory == GeoDataPlacemark::AdminLevel2) {
417  if (osmData.containsTag(QStringLiteral("maritime"), QStringLiteral("yes"))) {
418  lineStyle.setColor("#88b3bf");
419  polyStyle.setColor("#88b3bf");
420  if (osmData.containsTag(QStringLiteral("marble:disputed"), QStringLiteral("yes"))) {
421  lineStyle.setPenStyle(Qt::DashLine);
422  }
423  adjustStyle = true;
424  }
425  } else if ((visualCategory >= GeoDataPlacemark::HighwayService &&
426  visualCategory <= GeoDataPlacemark::HighwayMotorway) ||
427  visualCategory == GeoDataPlacemark::TransportAirportRunway) {
428  // Take cached Style instance if possible
429  styleCacheKey = QStringLiteral("%1/%2").arg(parameters.tileLevel).arg(visualCategory);
430  if (m_styleCache.contains(styleCacheKey)) {
431  style = m_styleCache[styleCacheKey];
432  return style;
433  }
434 
435  adjustStyle = true;
436  styleCacheKey = QStringLiteral("%1/%2").arg(parameters.tileLevel).arg(visualCategory);
437  adjustWayWidth(parameters, lineStyle);
438 
439  QString const accessValue = osmData.tagValue(QStringLiteral("access"));
440  if (accessValue == QLatin1String("private") ||
441  accessValue == QLatin1String("no") ||
442  accessValue == QLatin1String("agricultural") ||
443  accessValue == QLatin1String("delivery") ||
444  accessValue == QLatin1String("forestry")) {
445  QColor polyColor = polyStyle.color();
446  qreal hue, sat, val;
447  polyColor.getHsvF(&hue, &sat, &val);
448  polyColor.setHsvF(0.98, qMin(1.0, 0.2 + sat), val);
449  polyStyle.setColor(polyColor);
450  lineStyle.setColor(lineStyle.color().darker(150));
451  }
452 
453  if (osmData.containsTag("tunnel", "yes")) {
454  QColor polyColor = polyStyle.color();
455  qreal hue, sat, val;
456  polyColor.getHsvF(&hue, &sat, &val);
457  polyColor.setHsvF(hue, 0.25 * sat, 0.95 * val);
458  polyStyle.setColor(polyColor);
459  lineStyle.setColor(lineStyle.color().lighter(115));
460  }
461 
462  } else if (visualCategory >= GeoDataPlacemark::WaterwayCanal && visualCategory <= GeoDataPlacemark::WaterwayStream) {
463 
464  adjustStyle = true;
465 
466  // Take cached Style instance if possible
467  styleCacheKey = QStringLiteral("%1/%2").arg(parameters.tileLevel).arg(visualCategory);
468  if (m_styleCache.contains(styleCacheKey)) {
469  style = m_styleCache[styleCacheKey];
470  return style;
471  }
472 
473 
474  if (parameters.tileLevel <= 3) {
475  lineStyle.setWidth(1);
476  lineStyle.setPhysicalWidth(0.0);
477  styleCacheKey = QStringLiteral("%1/%2").arg(parameters.tileLevel).arg(visualCategory);
478  } else if (parameters.tileLevel <= 7) {
479  lineStyle.setWidth(2);
480  lineStyle.setPhysicalWidth(0.0);
481  styleCacheKey = QStringLiteral("%1/%2").arg(parameters.tileLevel).arg(visualCategory);
482  } else {
483  QString const widthValue = osmData.tagValue(QStringLiteral("width")).remove(QStringLiteral(" meters")).remove(QStringLiteral(" m"));
484  bool ok;
485  float const width = widthValue.toFloat(&ok);
486  lineStyle.setPhysicalWidth(ok ? qBound(0.1f, width, 200.0f) : 0.0f);
487  }
488  } else if (visualCategory == GeoDataPlacemark::PisteDownhill) {
489  return adjustPisteStyle(parameters, style);
490  }
491 
492  if (adjustStyle) {
493  GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style));
494  newStyle->setPolyStyle(polyStyle);
495  newStyle->setLineStyle(lineStyle);
496  newStyle->setLabelStyle(labelStyle);
497  newStyle->setIconStyle(iconStyle);
498  style = newStyle;
499  if (!styleCacheKey.isEmpty()) {
500  m_styleCache.insert(styleCacheKey, newStyle);
501  }
502  }
503 
504 
505  } else if (geodata_cast<GeoDataPolygon>(placemark->geometry())) {
506  GeoDataPolyStyle polyStyle = style->polyStyle();
507  GeoDataLineStyle lineStyle = style->lineStyle();
508  bool adjustStyle = false;
509  if (visualCategory == GeoDataPlacemark::Bathymetry) {
510  auto tagIter = osmData.findTag(QStringLiteral("ele"));
511  if (tagIter != osmData.tagsEnd()) {
512  const QString& elevation = tagIter.value();
513  if (elevation == QLatin1String("4000")) {
514  polyStyle.setColor("#a5c9c9");
515  lineStyle.setColor("#a5c9c9");
516  adjustStyle = true;
517  }
518  }
519  } else if (visualCategory == GeoDataPlacemark::PisteDownhill) {
520  return adjustPisteStyle(parameters, style);
521  }
522 
523  if (adjustStyle) {
524  GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style));
525  newStyle->setPolyStyle(polyStyle);
526  newStyle->setLineStyle(lineStyle);
527  style = newStyle;
528  }
529 
530  }
531 
532  return style;
533 }
534 
535 GeoDataStyle::ConstPtr StyleBuilder::Private::adjustPisteStyle(const StyleParameters &parameters, const GeoDataStyle::ConstPtr &style)
536 {
537  // Take cached Style instance if possible
538  auto const & osmData = parameters.placemark->osmData();
539  auto const visualCategory = parameters.placemark->visualCategory();
540  auto const difficulty = osmData.tagValue("piste:difficulty");
541  QString styleCacheKey = QStringLiteral("piste/%1/%2").arg(visualCategory).arg(difficulty);
542  if (m_styleCache.contains(styleCacheKey)) {
543  return m_styleCache[styleCacheKey];
544  }
545 
546  GeoDataLineStyle lineStyle = style->lineStyle();
547 
548  auto green = QColor("#006600");
549  auto red = QColor("#cc0000");
550  auto black = QColor("#151515");
551  auto yellow = Qt::yellow;
552  auto blue = QColor("#000099");
553  auto orange = QColor(255, 165, 0);
554  auto fallBack = Qt::lightGray;
555  auto country = QLocale::system().country();
556  if (country == QLocale::Japan) {
557  if (difficulty == "easy") {
558  lineStyle.setColor(green);
559  } else if (difficulty == "intermediate") {
560  lineStyle.setColor(red);
561  } else if (difficulty == "advanced") {
562  lineStyle.setColor(black);
563  } else {
564  lineStyle.setColor(fallBack);
565  }
566  } else if (country == QLocale::UnitedStates ||
567  country == QLocale::UnitedStatesMinorOutlyingIslands ||
568  country == QLocale::Canada ||
569  m_oceanianCountries.contains(country)) {
570  if (difficulty == "easy") {
571  lineStyle.setColor(green);
572  } else if (difficulty == "intermediate") {
573  lineStyle.setColor(blue);
574  } else if (difficulty == "advanced" || difficulty == "expert") {
575  lineStyle.setColor(black);
576  } else {
577  lineStyle.setColor(fallBack);
578  }
579  // fallback on Europe
580  } else {
581  if (difficulty == "novice") {
582  lineStyle.setColor(green);
583  } else if (difficulty == "easy") {
584  lineStyle.setColor(blue);
585  } else if (difficulty == "intermediate") {
586  lineStyle.setColor(red);
587  } else if (difficulty == "advanced") {
588  lineStyle.setColor(black);
589  } else if (difficulty == "expert") {
590  // scandinavian countries have different colors then the rest of Europe
591  if (country == QLocale::Denmark ||
592  country == QLocale::Norway ||
593  country == QLocale::Sweden) {
594  lineStyle.setColor(black);
595  } else {
596  lineStyle.setColor(orange);
597  }
598  } else if (difficulty == "freeride") {
599  lineStyle.setColor(yellow);
600  } else {
601  lineStyle.setColor(fallBack);
602  }
603  }
604 
605  GeoDataPolyStyle polyStyle = style->polyStyle();
606  polyStyle.setColor(lineStyle.color());
607  GeoDataStyle::Ptr newStyle(new GeoDataStyle(*style));
608  newStyle->setPolyStyle(polyStyle);
609  newStyle->setLineStyle(lineStyle);
610  m_styleCache.insert(styleCacheKey, newStyle);
611  return newStyle;
612 }
613 
614 void StyleBuilder::Private::adjustWayWidth(const StyleParameters &parameters, GeoDataLineStyle &lineStyle)
615 {
616  auto const & osmData = parameters.placemark->osmData();
617  auto const visualCategory = parameters.placemark->visualCategory();
618  if (parameters.tileLevel <= 8) {
619  lineStyle.setPhysicalWidth(0.0);
620  lineStyle.setWidth(2.0);
621  } else if (parameters.tileLevel <= 10) {
622  lineStyle.setPhysicalWidth(0.0);
623  lineStyle.setWidth(3.0);
624  } else if (parameters.tileLevel <= 12) {
625  lineStyle.setPhysicalWidth(0.0);
626  lineStyle.setWidth(4.0);
627  } else {
628  auto tagIter = osmData.findTag(QStringLiteral("width"));
629  if (tagIter != osmData.tagsEnd()) {
630  QString const widthValue = QString(tagIter.value()).remove(QStringLiteral(" meters")).remove(QStringLiteral(" m"));
631  bool ok;
632  float const width = widthValue.toFloat(&ok);
633  lineStyle.setPhysicalWidth(ok ? qBound(0.1f, width, 200.0f) : 0.0f);
634  } else {
635  bool const isOneWay = osmData.containsTag(QStringLiteral("oneway"), QStringLiteral("yes")) ||
636  osmData.containsTag(QStringLiteral("oneway"), QStringLiteral("-1"));
637  int const lanes = isOneWay ? 1 : 2; // also for motorway which implicitly is one way, but has two lanes and each direction has its own highway
638  double const laneWidth = 3.0;
639  double const margins = visualCategory == GeoDataPlacemark::HighwayMotorway ? 2.0 : (isOneWay ? 1.0 : 0.0);
640  double const physicalWidth = margins + lanes * laneWidth;
641  lineStyle.setPhysicalWidth(physicalWidth);
642  }
643  }
644 }
645 
646 GeoDataStyle::Ptr StyleBuilder::Private::createStyle(qreal width, qreal realWidth, const QColor& color,
647  const QColor& outlineColor, bool fill, bool outline, Qt::BrushStyle brushStyle, Qt::PenStyle penStyle,
648  Qt::PenCapStyle capStyle, bool lineBackground, const QVector< qreal >& dashPattern,
649  const QFont& font, const QColor& fontColor, const QString& texturePath)
650 {
651  GeoDataStyle *style = new GeoDataStyle;
652  GeoDataLineStyle lineStyle(outlineColor);
653  lineStyle.setCapStyle(capStyle);
654  lineStyle.setPenStyle(penStyle);
655  lineStyle.setWidth(width);
656  lineStyle.setPhysicalWidth(realWidth);
657  lineStyle.setBackground(lineBackground);
658  lineStyle.setDashPattern(dashPattern);
659  GeoDataPolyStyle polyStyle(color);
660  polyStyle.setOutline(outline);
661  polyStyle.setFill(fill);
662  polyStyle.setBrushStyle(brushStyle);
663  polyStyle.setTexturePath(texturePath);
664  GeoDataLabelStyle labelStyle(font, fontColor);
665  style->setLineStyle(lineStyle);
666  style->setPolyStyle(polyStyle);
667  style->setLabelStyle(labelStyle);
668  return GeoDataStyle::Ptr(style);
669 }
670 
671 void StyleBuilder::Private::initializeDefaultStyles()
672 {
673  // We need to do this similar to the way KCmdLineOptions works in
674  // the future: Having a PlacemarkStyleProperty properties[] would
675  // help here greatly.
676 
677  if (m_defaultStyleInitialized) {
678  return;
679  }
680 
681  m_defaultStyleInitialized = true;
682 
683  QString defaultFamily = m_defaultFont.family();
684 
685 #ifdef Q_OS_MACX
686  int defaultSize = 10;
687 #else
688  int defaultSize = 8;
689 #endif
690 
691  QColor const defaultLabelColor = m_defaultLabelColor;
692 
693  m_defaultStyle[GeoDataPlacemark::None]
694  = GeoDataStyle::Ptr(new GeoDataStyle(QString(),
695  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
696 
697  m_defaultStyle[GeoDataPlacemark::Default]
698  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/default_location.png"),
699  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
700 
701  m_defaultStyle[GeoDataPlacemark::Unknown]
702  = GeoDataStyle::Ptr(new GeoDataStyle(QString(),
703  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
704 
705  m_defaultStyle[GeoDataPlacemark::SmallCity]
706  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_4_white.png"),
707  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
708 
709  m_defaultStyle[GeoDataPlacemark::SmallCountyCapital]
710  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_4_yellow.png"),
711  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
712 
713  m_defaultStyle[GeoDataPlacemark::SmallStateCapital]
714  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_4_orange.png"),
715  QFont(defaultFamily, defaultSize, 50, true), defaultLabelColor));
716 
717  m_defaultStyle[GeoDataPlacemark::SmallNationCapital]
718  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_4_red.png"),
719  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
720 
721  m_defaultStyle[GeoDataPlacemark::MediumCity]
722  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_3_white.png"),
723  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
724 
725  m_defaultStyle[GeoDataPlacemark::MediumCountyCapital]
726  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_3_yellow.png"),
727  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
728 
729  m_defaultStyle[GeoDataPlacemark::MediumStateCapital]
730  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_3_orange.png"),
731  QFont(defaultFamily, defaultSize, 50, true), defaultLabelColor));
732 
733  m_defaultStyle[GeoDataPlacemark::MediumNationCapital]
734  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_3_red.png"),
735  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
736 
737  m_defaultStyle[GeoDataPlacemark::BigCity]
738  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_2_white.png"),
739  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
740 
741  m_defaultStyle[GeoDataPlacemark::BigCountyCapital]
742  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_2_yellow.png"),
743  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
744 
745  m_defaultStyle[GeoDataPlacemark::BigStateCapital]
746  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_2_orange.png"),
747  QFont(defaultFamily, defaultSize, 50, true), defaultLabelColor));
748 
749  m_defaultStyle[GeoDataPlacemark::BigNationCapital]
750  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_2_red.png"),
751  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
752 
753  m_defaultStyle[GeoDataPlacemark::LargeCity]
754  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_1_white.png"),
755  QFont(defaultFamily, defaultSize, 75, false), defaultLabelColor));
756 
757  m_defaultStyle[GeoDataPlacemark::LargeCountyCapital]
758  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_1_yellow.png"),
759  QFont(defaultFamily, defaultSize, 75, false), defaultLabelColor));
760 
761  m_defaultStyle[GeoDataPlacemark::LargeStateCapital]
762  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_1_orange.png"),
763  QFont(defaultFamily, defaultSize, 75, true), defaultLabelColor));
764 
765  m_defaultStyle[GeoDataPlacemark::LargeNationCapital]
766  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/city_1_red.png"),
767  QFont(defaultFamily, defaultSize, 75, false), defaultLabelColor));
768 
769  m_defaultStyle[GeoDataPlacemark::Nation]
770  = GeoDataStyle::Ptr(new GeoDataStyle(QString(),
771  QFont(defaultFamily, int(defaultSize * 1.5), 75, false), QColor("#404040")));
772  // Align area labels centered
773  m_defaultStyle[GeoDataPlacemark::Nation]->labelStyle().setAlignment(GeoDataLabelStyle::Center);
774 
775  QFont osmCityFont = QFont(defaultFamily, int(defaultSize * 1.5), 75, false);
776  m_defaultStyle[GeoDataPlacemark::PlaceCity] = createOsmPOIStyle(osmCityFont, "place/place-6", QColor("#202020"));
777  m_defaultStyle[GeoDataPlacemark::PlaceCityCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-6", QColor("#202020"));
778  m_defaultStyle[GeoDataPlacemark::PlaceCityNationalCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-adminlevel2", QColor("#202020"));
779  m_defaultStyle[GeoDataPlacemark::PlaceSuburb] = createOsmPOIStyle(osmCityFont, QString(), QColor("#707070"));
780  m_defaultStyle[GeoDataPlacemark::PlaceHamlet] = createOsmPOIStyle(osmCityFont, QString(), QColor("#707070"));
781  QFont localityFont = osmCityFont;
782  localityFont.setPointSize(defaultSize);
783  m_defaultStyle[GeoDataPlacemark::PlaceLocality] = createOsmPOIStyle(localityFont, QString(), QColor("#707070"));
784  m_defaultStyle[GeoDataPlacemark::PlaceTown] = createOsmPOIStyle(osmCityFont, "place/place-6", QColor("#404040"));
785  m_defaultStyle[GeoDataPlacemark::PlaceTownCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-6", QColor("#404040"));
786  m_defaultStyle[GeoDataPlacemark::PlaceTownNationalCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-adminlevel2", QColor("#404040"));
787  m_defaultStyle[GeoDataPlacemark::PlaceVillage] = createOsmPOIStyle(osmCityFont, "place/place-6", QColor("#505050"));
788  m_defaultStyle[GeoDataPlacemark::PlaceVillageCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-6", QColor("#505050"));
789  m_defaultStyle[GeoDataPlacemark::PlaceVillageNationalCapital] = createOsmPOIStyle(osmCityFont, "place/place-capital-adminlevel2", QColor("#505050"));
790  for (int i = GeoDataPlacemark::PlaceCity; i <= GeoDataPlacemark::PlaceVillageCapital; ++i) {
791  m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->polyStyle().setFill(false);
792  m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->polyStyle().setOutline(false);
793  m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->labelStyle().setAlignment(GeoDataLabelStyle::Center);
794 
795  if (i == GeoDataPlacemark::PlaceCityNationalCapital || i == GeoDataPlacemark::PlaceTownNationalCapital || i == GeoDataPlacemark::PlaceVillageNationalCapital) {
796  m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->iconStyle().setScale(0.55f);
797  } else {
798  m_defaultStyle[GeoDataPlacemark::GeoDataVisualCategory(i)]->iconStyle().setScale(0.25);
799  }
800  }
801 
802  m_defaultStyle[GeoDataPlacemark::Mountain]
803  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/mountain_1.png"),
804  QFont(defaultFamily, int(defaultSize * 0.9), 50, false), defaultLabelColor));
805 
806  m_defaultStyle[GeoDataPlacemark::Volcano]
807  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/volcano_1.png"),
808  QFont(defaultFamily, int(defaultSize * 0.9), 50, false), defaultLabelColor));
809 
810  m_defaultStyle[GeoDataPlacemark::Mons]
811  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/mountain_1.png"),
812  QFont(defaultFamily, int(defaultSize * 0.9), 50, false), defaultLabelColor));
813 
814  m_defaultStyle[GeoDataPlacemark::Valley]
815  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/valley.png"),
816  QFont(defaultFamily, int(defaultSize * 0.9), 50, false), defaultLabelColor));
817 
818  m_defaultStyle[GeoDataPlacemark::Continent]
819  = GeoDataStyle::Ptr(new GeoDataStyle(QString(),
820  QFont(defaultFamily, int(defaultSize * 1.7), 50, false), QColor("#bf0303")));
821  // Align area labels centered
822  m_defaultStyle[GeoDataPlacemark::Continent]->labelStyle().setAlignment(GeoDataLabelStyle::Center);
823 
824  m_defaultStyle[GeoDataPlacemark::Ocean]
825  = GeoDataStyle::Ptr(new GeoDataStyle(QString(),
826  QFont(defaultFamily, int(defaultSize * 1.7), 50, true), QColor("#2c72c7")));
827  // Align area labels centered
828  m_defaultStyle[GeoDataPlacemark::Ocean]->labelStyle().setAlignment(GeoDataLabelStyle::Center);
829 
830  m_defaultStyle[GeoDataPlacemark::OtherTerrain]
831  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/other.png"),
832  QFont(defaultFamily, int(defaultSize * 0.9), 50, false), defaultLabelColor));
833 
834  m_defaultStyle[GeoDataPlacemark::Crater]
835  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/crater.png"),
836  QFont(defaultFamily, int(defaultSize * 0.9), 50, false), defaultLabelColor));
837 
838  m_defaultStyle[GeoDataPlacemark::Mare]
839  = GeoDataStyle::Ptr(new GeoDataStyle(QString(),
840  QFont(defaultFamily, int(defaultSize * 1.7), 50, false), QColor("#bf0303")));
841  // Align area labels centered
842  m_defaultStyle[GeoDataPlacemark::Mare]->labelStyle().setAlignment(GeoDataLabelStyle::Center);
843 
844  m_defaultStyle[GeoDataPlacemark::GeographicPole]
845  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/pole_1.png"),
846  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
847 
848  m_defaultStyle[GeoDataPlacemark::MagneticPole]
849  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/pole_2.png"),
850  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
851 
852  m_defaultStyle[GeoDataPlacemark::ShipWreck]
853  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/shipwreck.png"),
854  QFont(defaultFamily, int(defaultSize * 0.8), 50, false), defaultLabelColor));
855 
856  m_defaultStyle[GeoDataPlacemark::AirPort]
857  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/airport.png"),
858  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
859 
860  m_defaultStyle[GeoDataPlacemark::Observatory]
861  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/observatory.png"),
862  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
863 
864  m_defaultStyle[GeoDataPlacemark::OsmSite]
865  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/osm.png"),
866  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
867 
868  m_defaultStyle[GeoDataPlacemark::Coordinate]
869  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/coordinate.png"),
870  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
871 
872 
873  m_defaultStyle[GeoDataPlacemark::MannedLandingSite]
874  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/manned_landing.png"),
875  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
876 
877  m_defaultStyle[GeoDataPlacemark::RoboticRover]
878  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/robotic_rover.png"),
879  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
880 
881  m_defaultStyle[GeoDataPlacemark::UnmannedSoftLandingSite]
882  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/unmanned_soft_landing.png"),
883  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
884 
885  m_defaultStyle[GeoDataPlacemark::UnmannedHardLandingSite]
886  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/unmanned_hard_landing.png"),
887  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
888 
889  m_defaultStyle[GeoDataPlacemark::Bookmark]
890  = createPOIStyle(QFont(defaultFamily, defaultSize, 50, false),
891  MarbleDirs::path("svg/bookmark.svg"), defaultLabelColor);
892  m_defaultStyle[GeoDataPlacemark::Bookmark]->iconStyle().setScale(0.75);
893 
894  QColor const shopColor("#ac39ac");
895  QColor const transportationColor("#0092da");
896  QColor const amenityColor("#734a08");
897  QColor const healthColor("#da0092");
898  QColor const airTransportColor("#8461C4");
899  QColor const educationalAreasAndHospital("#f0f0d8");
900  QColor const buildingColor("#beadad");
901  QColor const waterColor("#b5d0d0");
902  // Allows to visualize multiple repaints of buildings
903 // QColor const buildingColor(0, 255, 0, 64);
904 
905  QFont const osmFont(defaultFamily, 10, 50, false);
906  m_defaultStyle[GeoDataPlacemark::AccomodationCamping] = createOsmPOIRingStyle(osmFont, "transportation/camping.16", transportationColor);
907  m_defaultStyle[GeoDataPlacemark::AccomodationHostel] = createOsmPOIStyle(osmFont, "transportation/hostel.16", transportationColor);
908  m_defaultStyle[GeoDataPlacemark::AccomodationHotel] = createOsmPOIStyle(osmFont, "transportation/hotel.16", transportationColor);
909  m_defaultStyle[GeoDataPlacemark::AccomodationMotel] = createOsmPOIStyle(osmFont, "transportation/motel.16", transportationColor);
910  m_defaultStyle[GeoDataPlacemark::AccomodationYouthHostel] = createOsmPOIStyle(osmFont, "transportation/hostel.16", transportationColor);
911  m_defaultStyle[GeoDataPlacemark::AccomodationGuestHouse] = createOsmPOIStyle(osmFont, "transportation/guest_house.16", transportationColor);
912  m_defaultStyle[GeoDataPlacemark::AmenityLibrary] = createOsmPOIStyle(osmFont, "amenity/library.20", amenityColor);
913  m_defaultStyle[GeoDataPlacemark::AmenityKindergarten] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor);
914  m_defaultStyle[GeoDataPlacemark::EducationCollege] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor);
915  m_defaultStyle[GeoDataPlacemark::EducationSchool] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor);
916  m_defaultStyle[GeoDataPlacemark::EducationUniversity] = createOsmPOIAreaStyle(osmFont, QString(), amenityColor, educationalAreasAndHospital, amenityColor);
917  m_defaultStyle[GeoDataPlacemark::FoodBar] = createOsmPOIStyle(osmFont, "amenity/bar.16", amenityColor);
918  m_defaultStyle[GeoDataPlacemark::FoodBiergarten] = createOsmPOIStyle(osmFont, "amenity/biergarten.16", amenityColor);
919  m_defaultStyle[GeoDataPlacemark::FoodCafe] = createOsmPOIStyle(osmFont, "amenity/cafe.16", amenityColor);
920  m_defaultStyle[GeoDataPlacemark::FoodFastFood] = createOsmPOIStyle(osmFont, "amenity/fast_food.16", amenityColor);
921  m_defaultStyle[GeoDataPlacemark::FoodPub] = createOsmPOIStyle(osmFont, "amenity/pub.16", amenityColor);
922  m_defaultStyle[GeoDataPlacemark::FoodRestaurant] = createOsmPOIStyle(osmFont, "amenity/restaurant.16", amenityColor);
923 
924  m_defaultStyle[GeoDataPlacemark::HealthDentist] = createOsmPOIStyle(osmFont, "health/dentist.16", healthColor);
925  m_defaultStyle[GeoDataPlacemark::HealthDoctors] = createOsmPOIStyle(osmFont, "health/doctors.16", healthColor);
926  m_defaultStyle[GeoDataPlacemark::HealthHospital] = createOsmPOIStyle(osmFont, "health/hospital.16", healthColor, educationalAreasAndHospital, amenityColor);
927  m_defaultStyle[GeoDataPlacemark::HealthPharmacy] = createOsmPOIStyle(osmFont, "health/pharmacy.16", healthColor);
928  m_defaultStyle[GeoDataPlacemark::HealthVeterinary] = createOsmPOIStyle(osmFont, "health/veterinary-14", healthColor);
929 
930  m_defaultStyle[GeoDataPlacemark::MoneyAtm] = createOsmPOIStyle(osmFont, "amenity/atm.16", amenityColor);
931  m_defaultStyle[GeoDataPlacemark::MoneyBank] = createOsmPOIStyle(osmFont, "amenity/bank.16", amenityColor);
932 
933  m_defaultStyle[GeoDataPlacemark::HistoricArchaeologicalSite] = createOsmPOIAreaStyle(osmFont, "amenity/archaeological_site.16", amenityColor, Qt::transparent);
934  m_defaultStyle[GeoDataPlacemark::AmenityEmbassy] = createOsmPOIStyle(osmFont, "transportation/embassy.16", transportationColor);
935  m_defaultStyle[GeoDataPlacemark::AmenityEmergencyPhone] = createOsmPOIStyle(osmFont, "amenity/emergency_phone.16", amenityColor);
936  m_defaultStyle[GeoDataPlacemark::AmenityMountainRescue] = createOsmPOIStyle(osmFont, "amenity/mountain_rescue.16", amenityColor);
937  m_defaultStyle[GeoDataPlacemark::LeisureWaterPark] = createOsmPOIStyle(osmFont, "amenity/water_park.16", amenityColor);
938  m_defaultStyle[GeoDataPlacemark::AmenityCommunityCentre] = createOsmPOIStyle(osmFont, "amenity/community_centre-14", amenityColor);
939  m_defaultStyle[GeoDataPlacemark::AmenityFountain] = createOsmPOIStyle(osmFont, "amenity/fountain-14", QColor("#7989de"), waterColor, waterColor.darker(150));
940  m_defaultStyle[GeoDataPlacemark::AmenityNightClub] = createOsmPOIStyle(osmFont, "amenity/nightclub.18", amenityColor);
941  m_defaultStyle[GeoDataPlacemark::AmenityBench] = createOsmPOIStyle(osmFont, "individual/bench.16", amenityColor);
942  m_defaultStyle[GeoDataPlacemark::AmenityCourtHouse] = createOsmPOIStyle(osmFont, "amenity/courthouse-16", amenityColor);
943  m_defaultStyle[GeoDataPlacemark::AmenityFireStation] = createOsmPOIStyle(osmFont, "amenity/firestation.16", amenityColor);
944  m_defaultStyle[GeoDataPlacemark::AmenityHuntingStand] = createOsmPOIStyle(osmFont, "manmade/hunting-stand.16", amenityColor);
945  m_defaultStyle[GeoDataPlacemark::AmenityPolice] = createOsmPOIStyle(osmFont, "amenity/police.16", amenityColor);
946  m_defaultStyle[GeoDataPlacemark::AmenityPostBox] = createOsmPOIStyle(osmFont, "amenity/post_box-12", amenityColor);
947  m_defaultStyle[GeoDataPlacemark::AmenityPostOffice] = createOsmPOIStyle(osmFont, "amenity/post_office-14", amenityColor);
948  m_defaultStyle[GeoDataPlacemark::AmenityPrison] = createOsmPOIStyle(osmFont, "amenity/prison.16", amenityColor);
949  m_defaultStyle[GeoDataPlacemark::AmenityRecycling] = createOsmPOIStyle(osmFont, "amenity/recycling.16", amenityColor);
950  m_defaultStyle[GeoDataPlacemark::AmenityShelter] = createOsmPOIStyle(osmFont, "transportation/shelter", transportationColor);
951  m_defaultStyle[GeoDataPlacemark::AmenityTelephone] = createOsmPOIStyle(osmFont, "amenity/telephone.16", amenityColor);
952  m_defaultStyle[GeoDataPlacemark::AmenityToilets] = createOsmPOIStyle(osmFont, "amenity/toilets.16", amenityColor);
953  m_defaultStyle[GeoDataPlacemark::AmenityTownHall] = createOsmPOIStyle(osmFont, "amenity/town_hall.16", amenityColor);
954  m_defaultStyle[GeoDataPlacemark::AmenityWasteBasket] = createOsmPOIStyle(osmFont, "individual/waste_basket.10", amenityColor);
955  m_defaultStyle[GeoDataPlacemark::AmenityWasteBasket]->iconStyle().setScale(0.75);
956  m_defaultStyle[GeoDataPlacemark::AmenityChargingStation] = createOsmPOIStyle(osmFont, "transportation/charging_station");
957  m_defaultStyle[GeoDataPlacemark::AmenityCarWash] = createOsmPOIStyle(osmFont, "amenity/car_wash", amenityColor);
958  m_defaultStyle[GeoDataPlacemark::AmenitySocialFacility] = createOsmPOIStyle(osmFont, "amenity/social_facility", amenityColor);
959 
960  m_defaultStyle[GeoDataPlacemark::AmenityDrinkingWater] = createOsmPOIStyle(osmFont, "amenity/drinking_water.16", amenityColor);
961 
962  m_defaultStyle[GeoDataPlacemark::NaturalPeak] = createOsmPOIStyle(osmFont, "individual/peak", amenityColor);
963  m_defaultStyle[GeoDataPlacemark::NaturalPeak]->iconStyle().setScale(0.33f);
964  m_defaultStyle[GeoDataPlacemark::NaturalVolcano] = createOsmPOIStyle(osmFont, "individual/volcano", amenityColor);
965  m_defaultStyle[GeoDataPlacemark::NaturalVolcano]->iconStyle().setScale(0.33f);
966  m_defaultStyle[GeoDataPlacemark::NaturalTree] = createOsmPOIStyle(osmFont, "individual/tree-29", amenityColor); // tree-16 provides the official icon
967  m_styleTreeAutumn = createOsmPOIStyle(osmFont, "individual/tree-29-autumn", amenityColor);
968  m_styleTreeWinter = createOsmPOIStyle(osmFont, "individual/tree-29-winter", amenityColor);
969  qreal const treeIconScale = 0.75;
970  m_defaultStyle[GeoDataPlacemark::NaturalTree]->iconStyle().setScale(treeIconScale);
971  m_styleTreeAutumn->iconStyle().setScale(treeIconScale);
972  m_styleTreeWinter->iconStyle().setScale(treeIconScale);
973 
974  m_defaultStyle[GeoDataPlacemark::ShopBeverages] = createOsmPOIStyle(osmFont, "shop/beverages-14", shopColor);
975  m_defaultStyle[GeoDataPlacemark::ShopHifi] = createOsmPOIStyle(osmFont, "shop/hifi-14", shopColor);
976  m_defaultStyle[GeoDataPlacemark::ShopSupermarket] = createOsmPOIStyle(osmFont, "shop/shop_supermarket", shopColor);
977  m_defaultStyle[GeoDataPlacemark::ShopAlcohol] = createOsmPOIStyle(osmFont, "shop/shop_alcohol.16", shopColor);
978  m_defaultStyle[GeoDataPlacemark::ShopBakery] = createOsmPOIStyle(osmFont, "shop/shop_bakery.16", shopColor);
979  m_defaultStyle[GeoDataPlacemark::ShopButcher] = createOsmPOIStyle(osmFont, "shop/butcher-14", shopColor);
980  m_defaultStyle[GeoDataPlacemark::ShopConfectionery] = createOsmPOIStyle(osmFont, "shop/confectionery.14", shopColor);
981  m_defaultStyle[GeoDataPlacemark::ShopConvenience] = createOsmPOIStyle(osmFont, "shop/shop_convenience", shopColor);
982  m_defaultStyle[GeoDataPlacemark::ShopGreengrocer] = createOsmPOIStyle(osmFont, "shop/greengrocer-14", shopColor);
983  m_defaultStyle[GeoDataPlacemark::ShopSeafood] = createOsmPOIStyle(osmFont, "shop/seafood-14", shopColor);
984  m_defaultStyle[GeoDataPlacemark::ShopDepartmentStore] = createOsmPOIStyle(osmFont, "shop/department_store-16", shopColor);
985  m_defaultStyle[GeoDataPlacemark::ShopKiosk] = createOsmPOIStyle(osmFont, "shop/kiosk-14", shopColor);
986  m_defaultStyle[GeoDataPlacemark::ShopBag] = createOsmPOIStyle(osmFont, "shop/bag-14", shopColor);
987  m_defaultStyle[GeoDataPlacemark::ShopClothes] = createOsmPOIStyle(osmFont, "shop/shop_clothes.16", shopColor);
988  m_defaultStyle[GeoDataPlacemark::ShopFashion] = createOsmPOIStyle(osmFont, "shop/shop_clothes.16", shopColor);
989  m_defaultStyle[GeoDataPlacemark::ShopJewelry] = createOsmPOIStyle(osmFont, "shop/shop_jewelry.16", shopColor);
990  m_defaultStyle[GeoDataPlacemark::ShopShoes] = createOsmPOIStyle(osmFont, "shop/shop_shoes.16", shopColor);
991  m_defaultStyle[GeoDataPlacemark::ShopVarietyStore] = createOsmPOIStyle(osmFont, "shop/variety_store-14", shopColor);
992  m_defaultStyle[GeoDataPlacemark::ShopBeauty] = createOsmPOIStyle(osmFont, "shop/beauty-14", shopColor);
993  m_defaultStyle[GeoDataPlacemark::ShopChemist] = createOsmPOIStyle(osmFont, "shop/chemist-14", shopColor);
994  m_defaultStyle[GeoDataPlacemark::ShopCosmetics] = createOsmPOIStyle(osmFont, "shop/perfumery-14", shopColor);
995  m_defaultStyle[GeoDataPlacemark::ShopHairdresser] = createOsmPOIStyle(osmFont, "shop/shop_hairdresser.16", shopColor);
996  m_defaultStyle[GeoDataPlacemark::ShopOptician] = createOsmPOIStyle(osmFont, "shop/shop_optician.16", shopColor);
997  m_defaultStyle[GeoDataPlacemark::ShopPerfumery] = createOsmPOIStyle(osmFont, "shop/perfumery-14", shopColor);
998  m_defaultStyle[GeoDataPlacemark::ShopDoitYourself] = createOsmPOIStyle(osmFont, "shop/shop_diy.16", shopColor);
999  m_defaultStyle[GeoDataPlacemark::ShopFlorist] = createOsmPOIStyle(osmFont, "shop/florist.16", shopColor);
1000  m_defaultStyle[GeoDataPlacemark::ShopHardware] = createOsmPOIStyle(osmFont, "shop/shop_diy.16", shopColor);
1001  m_defaultStyle[GeoDataPlacemark::ShopFurniture] = createOsmPOIStyle(osmFont, "shop/shop_furniture.16", shopColor);
1002  m_defaultStyle[GeoDataPlacemark::ShopElectronics] = createOsmPOIStyle(osmFont, "shop/shop_electronics.16", shopColor);
1003  m_defaultStyle[GeoDataPlacemark::ShopMobilePhone] = createOsmPOIStyle(osmFont, "shop/shop_mobile_phone.16", shopColor);
1004  m_defaultStyle[GeoDataPlacemark::ShopBicycle] = createOsmPOIStyle(osmFont, "shop/shop_bicycle.16", shopColor);
1005  m_defaultStyle[GeoDataPlacemark::ShopCar] = createOsmPOIStyle(osmFont, "shop/shop_car", shopColor);
1006  m_defaultStyle[GeoDataPlacemark::ShopCarRepair] = createOsmPOIStyle(osmFont, "shop/shopping_car_repair.16", shopColor);
1007  m_defaultStyle[GeoDataPlacemark::ShopCarParts] = createOsmPOIStyle(osmFont, "shop/car_parts-14", shopColor);
1008  m_defaultStyle[GeoDataPlacemark::ShopMotorcycle] = createOsmPOIStyle(osmFont, "shop/motorcycle-14", shopColor);
1009  m_defaultStyle[GeoDataPlacemark::ShopOutdoor] = createOsmPOIStyle(osmFont, "shop/outdoor-14", shopColor);
1010  m_defaultStyle[GeoDataPlacemark::ShopSports] = createOsmPOIStyle(osmFont, "shop/sports", shopColor);
1011  m_defaultStyle[GeoDataPlacemark::ShopCopy] = createOsmPOIStyle(osmFont, "shop/copyshop", shopColor);
1012  m_defaultStyle[GeoDataPlacemark::ShopArt] = createOsmPOIStyle(osmFont, "shop/art", shopColor);
1013  m_defaultStyle[GeoDataPlacemark::ShopMusicalInstrument] = createOsmPOIStyle(osmFont, "shop/musical_instrument-14", shopColor);
1014  m_defaultStyle[GeoDataPlacemark::ShopPhoto] = createOsmPOIStyle(osmFont, "shop/photo-14", shopColor);
1015  m_defaultStyle[GeoDataPlacemark::ShopBook] = createOsmPOIStyle(osmFont, "shop/shop_books.16", shopColor);
1016  m_defaultStyle[GeoDataPlacemark::ShopGift] = createOsmPOIStyle(osmFont, "shop/shop_gift.16", shopColor);
1017  m_defaultStyle[GeoDataPlacemark::ShopStationery] = createOsmPOIStyle(osmFont, "shop/stationery-14", shopColor);
1018  m_defaultStyle[GeoDataPlacemark::ShopLaundry] = createOsmPOIStyle(osmFont, "shop/laundry-14", shopColor);
1019  m_defaultStyle[GeoDataPlacemark::ShopPet] = createOsmPOIStyle(osmFont, "shop/shop_pet.16", shopColor);
1020  m_defaultStyle[GeoDataPlacemark::ShopToys] = createOsmPOIStyle(osmFont, "shop/toys-14", shopColor);
1021  m_defaultStyle[GeoDataPlacemark::ShopTravelAgency] = createOsmPOIStyle(osmFont, "shop/travel_agency-14", shopColor);
1022  m_defaultStyle[GeoDataPlacemark::ShopDeli] = createOsmPOIStyle(osmFont, "shop/deli", shopColor);
1023  m_defaultStyle[GeoDataPlacemark::ShopTobacco] = createOsmPOIStyle(osmFont, "shop/tobacco", shopColor);
1024  m_defaultStyle[GeoDataPlacemark::ShopTea] = createOsmPOIStyle(osmFont, "shop/tea", shopColor);
1025  m_defaultStyle[GeoDataPlacemark::ShopComputer] = createOsmPOIStyle(osmFont, "shop/computer-14", shopColor);
1026  m_defaultStyle[GeoDataPlacemark::ShopGardenCentre] = createOsmPOIStyle(osmFont, "shop/garden_centre-14", shopColor);
1027  m_defaultStyle[GeoDataPlacemark::Shop] = createOsmPOIStyle(osmFont, "shop/shop-14", shopColor);
1028 
1029  m_defaultStyle[GeoDataPlacemark::ManmadeBridge] = createWayStyle(QColor("#b8b8b8"), Qt::transparent, true, true);
1030  m_defaultStyle[GeoDataPlacemark::ManmadeLighthouse] = createOsmPOIStyle(osmFont, "transportation/lighthouse.16", transportationColor, "#f2efe9", QColor("#f2efe9").darker());
1031  m_defaultStyle[GeoDataPlacemark::ManmadePier] = createStyle(0.0, 3.0, "#f2efe9", "#f2efe9", true, false, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont);
1032  m_defaultStyle[GeoDataPlacemark::ManmadeWaterTower] = createOsmPOIStyle(osmFont, "amenity/water_tower.16", amenityColor);
1033  m_defaultStyle[GeoDataPlacemark::ManmadeWindMill] = createOsmPOIStyle(osmFont, "amenity/windmill.16", amenityColor);
1034  m_defaultStyle[GeoDataPlacemark::ManmadeCommunicationsTower] = createOsmPOIStyle(osmFont, "manmade/communications.16", amenityColor);
1035 
1036  m_defaultStyle[GeoDataPlacemark::HistoricCastle] = createOsmPOIRingStyle(osmFont, "amenity/cinema.16", amenityColor);
1037  m_defaultStyle[GeoDataPlacemark::HistoricMemorial] = createOsmPOIStyle(osmFont, "amenity/tourist_memorial.16", amenityColor);
1038  m_defaultStyle[GeoDataPlacemark::HistoricMonument] = createOsmPOIStyle(osmFont, "amenity/monument.16", amenityColor);
1039  m_defaultStyle[GeoDataPlacemark::HistoricRuins] = createOsmPOIRingStyle(osmFont, QString(), amenityColor);
1040 
1041  m_defaultStyle[GeoDataPlacemark::TourismAttraction] = createOsmPOIStyle(osmFont, "amenity/tourist_memorial.16", amenityColor);
1042  m_defaultStyle[GeoDataPlacemark::TourismArtwork] = createOsmPOIStyle(osmFont, "amenity/artwork", amenityColor);
1043  m_defaultStyle[GeoDataPlacemark::AmenityCinema] = createOsmPOIStyle(osmFont, "amenity/cinema.16", amenityColor);
1044  m_defaultStyle[GeoDataPlacemark::TourismInformation] = createOsmPOIStyle(osmFont, "amenity/information.16", amenityColor);
1045  m_defaultStyle[GeoDataPlacemark::TourismMuseum] = createOsmPOIStyle(osmFont, "amenity/museum.16", amenityColor);
1046  m_defaultStyle[GeoDataPlacemark::AmenityTheatre] = createOsmPOIStyle(osmFont, "amenity/theatre.16", amenityColor);
1047  m_defaultStyle[GeoDataPlacemark::TourismThemePark] = createOsmPOIStyle(osmFont, QString(), amenityColor);
1048  m_defaultStyle[GeoDataPlacemark::TourismViewPoint] = createOsmPOIStyle(osmFont, "amenity/viewpoint.16", amenityColor);
1049  m_defaultStyle[GeoDataPlacemark::TourismZoo] = createOsmPOIRingStyle(osmFont, QString(), amenityColor, Qt::transparent);
1050  m_defaultStyle[GeoDataPlacemark::TourismAlpineHut] = createOsmPOIStyle(osmFont, "transportation/alpinehut.16", transportationColor);
1051  m_defaultStyle[GeoDataPlacemark::TourismWildernessHut] = createOsmPOIStyle(osmFont, "transportation/wilderness_hut", transportationColor);
1052  m_defaultStyle[GeoDataPlacemark::TransportAerodrome] = createOsmPOIStyle(osmFont, "airtransport/aerodrome", airTransportColor);
1053  m_defaultStyle[GeoDataPlacemark::TransportHelipad] = createOsmPOIStyle(osmFont, "airtransport/helipad", airTransportColor);
1054  m_defaultStyle[GeoDataPlacemark::TransportAirportTerminal] = createOsmPOIAreaStyle(osmFont, QString(), airTransportColor);
1055  m_defaultStyle[GeoDataPlacemark::TransportAirportGate] = createOsmPOIAreaStyle(osmFont, QString(), airTransportColor);
1056  m_defaultStyle[GeoDataPlacemark::TransportBusStation] = createOsmPOIStyle(osmFont, "transportation/bus_station.16", transportationColor);
1057  m_defaultStyle[GeoDataPlacemark::TransportBusStop] = createOsmPOIStyle(osmFont, "transportation/bus_stop.12", transportationColor);
1058  m_defaultStyle[GeoDataPlacemark::TransportCarShare] = createOsmPOIStyle(osmFont, "transportation/car_share.16", transportationColor);
1059  m_defaultStyle[GeoDataPlacemark::TransportFuel] = createOsmPOIStyle(osmFont, "transportation/fuel.16", transportationColor);
1060  m_defaultStyle[GeoDataPlacemark::TransportParking] = createOsmPOIAreaStyle(osmFont, "transportation/parking", transportationColor, "#F6EEB6", QColor("#F6EEB6").darker());
1061  m_defaultStyle[GeoDataPlacemark::TransportBicycleParking] = createOsmPOIAreaStyle(osmFont, "transportation/bicycle_parking.16", transportationColor);
1062  m_defaultStyle[GeoDataPlacemark::TransportMotorcycleParking] = createOsmPOIAreaStyle(osmFont, "transportation/motorcycle_parking.16", transportationColor);
1063  qreal const parkingIconScale = 0.75;
1064  m_defaultStyle[GeoDataPlacemark::TransportParking]->iconStyle().setScale(parkingIconScale);
1065  m_defaultStyle[GeoDataPlacemark::TransportBicycleParking]->iconStyle().setScale(parkingIconScale);
1066  m_defaultStyle[GeoDataPlacemark::TransportMotorcycleParking]->iconStyle().setScale(parkingIconScale);
1067  m_defaultStyle[GeoDataPlacemark::TransportParkingSpace] = createWayStyle("#F6EEB6", QColor("#F6EEB6").darker(), true, true);
1068  m_defaultStyle[GeoDataPlacemark::TransportPlatform] = createWayStyle("#bbbbbb", Qt::transparent, true, false);
1069  m_defaultStyle[GeoDataPlacemark::TransportTrainStation] = createOsmPOIStyle(osmFont, "individual/railway_station", transportationColor);
1070  m_defaultStyle[GeoDataPlacemark::TransportTrainStation]->iconStyle().setScale(0.5);
1071  m_defaultStyle[GeoDataPlacemark::TransportTramStop] = createOsmPOIStyle(osmFont, "individual/railway_station", transportationColor);
1072  m_defaultStyle[GeoDataPlacemark::TransportTramStop]->iconStyle().setScale(0.33f);
1073  m_defaultStyle[GeoDataPlacemark::TransportRentalBicycle] = createOsmPOIStyle(osmFont, "transportation/rental_bicycle.16", transportationColor);
1074  m_defaultStyle[GeoDataPlacemark::TransportRentalCar] = createOsmPOIStyle(osmFont, "transportation/rental_car.16", transportationColor);
1075  m_defaultStyle[GeoDataPlacemark::TransportRentalSki] = createOsmPOIStyle(osmFont, "transportation/rental_ski.16", transportationColor);
1076  m_defaultStyle[GeoDataPlacemark::TransportTaxiRank] = createOsmPOIStyle(osmFont, "transportation/taxi.16", transportationColor);
1077  m_defaultStyle[GeoDataPlacemark::TransportSubwayEntrance] = createOsmPOIStyle(osmFont, "transportation/subway_entrance", transportationColor);
1078  m_defaultStyle[GeoDataPlacemark::ReligionPlaceOfWorship] = createOsmPOIStyle(osmFont, "black/place_of_worship.16");
1079  m_defaultStyle[GeoDataPlacemark::ReligionBahai] = createOsmPOIStyle(osmFont, QString());
1080  m_defaultStyle[GeoDataPlacemark::ReligionBuddhist] = createOsmPOIStyle(osmFont, "black/buddhist.16");
1081  m_defaultStyle[GeoDataPlacemark::ReligionChristian] = createOsmPOIStyle(osmFont, "black/christian.16");
1082  m_defaultStyle[GeoDataPlacemark::ReligionMuslim] = createOsmPOIStyle(osmFont, "black/muslim.16");
1083  m_defaultStyle[GeoDataPlacemark::ReligionHindu] = createOsmPOIStyle(osmFont, "black/hinduist.16");
1084  m_defaultStyle[GeoDataPlacemark::ReligionJain] = createOsmPOIStyle(osmFont, QString());
1085  m_defaultStyle[GeoDataPlacemark::ReligionJewish] = createOsmPOIStyle(osmFont, "black/jewish.16");
1086  m_defaultStyle[GeoDataPlacemark::ReligionShinto] = createOsmPOIStyle(osmFont, "black/shintoist.16");
1087  m_defaultStyle[GeoDataPlacemark::ReligionSikh] = createOsmPOIStyle(osmFont, "black/sikhist.16");
1088  m_defaultStyle[GeoDataPlacemark::ReligionTaoist] = createOsmPOIStyle(osmFont, "black/taoist.16");
1089 
1090  m_defaultStyle[GeoDataPlacemark::IndoorDoor] = createOsmPOIRingStyle(osmFont, "indoor/door_b.16");
1091  m_defaultStyle[GeoDataPlacemark::IndoorWall] = createOsmPOIStyle(osmFont, QString());
1092  m_defaultStyle[GeoDataPlacemark::IndoorRoom] = createWayStyle(buildingColor.darker(), QColor(Qt::black));
1093 
1094  m_defaultStyle[GeoDataPlacemark::HighwayTrafficSignals] = createOsmPOIStyle(osmFont, "individual/traffic_light");
1095  m_defaultStyle[GeoDataPlacemark::HighwayTrafficSignals]->iconStyle().setScale(0.75);
1096 
1097  m_defaultStyle[GeoDataPlacemark::HighwayElevator] = createOsmPOIStyle(osmFont, "transportation/elevator-12", transportationColor);
1098  m_defaultStyle[GeoDataPlacemark::HighwayElevator]->iconStyle().setScale(0.75);
1099 
1100  m_defaultStyle[GeoDataPlacemark::PowerTower] = createOsmPOIStyle(osmFont, "individual/power_tower", QColor("#888888"));
1101  m_defaultStyle[GeoDataPlacemark::PowerTower]->iconStyle().setScale(0.6f);
1102 
1103  m_defaultStyle[GeoDataPlacemark::BarrierCityWall] = createStyle(6.0, 3.0, "#787878", Qt::transparent, true, false, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, Qt::transparent);
1104  m_defaultStyle[GeoDataPlacemark::BarrierGate] = createOsmPOIStyle(osmFont, "individual/gate");
1105  m_defaultStyle[GeoDataPlacemark::BarrierGate]->iconStyle().setScale(0.75);
1106  m_defaultStyle[GeoDataPlacemark::BarrierLiftGate] = createOsmPOIStyle(osmFont, "individual/liftgate");
1107  m_defaultStyle[GeoDataPlacemark::BarrierLiftGate]->iconStyle().setScale(0.75);
1108  m_defaultStyle[GeoDataPlacemark::BarrierWall] = createStyle(2.0, 0.0, "#787878", Qt::transparent, true, false, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, Qt::transparent);
1109 
1110  m_defaultStyle[GeoDataPlacemark::HighwaySteps] = createStyle(0.0, 2.0, "#fa8072", QColor(Qt::white), true, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1111  m_defaultStyle[GeoDataPlacemark::HighwayUnknown] = createHighwayStyle("#dddddd", "#bbbbbb", osmFont, "000000", 0, 1);
1112  m_defaultStyle[GeoDataPlacemark::HighwayPath] = createHighwayStyle("#dddde8", "#999999", osmFont, "000000", 0, 1, Qt::DotLine, Qt::SquareCap, true);
1113  m_defaultStyle[GeoDataPlacemark::HighwayTrack] = createHighwayStyle("#996600", QColor(Qt::white), osmFont, QColor(Qt::transparent), 1, 1, Qt::DashLine, Qt::SquareCap, true);
1114  m_defaultStyle[GeoDataPlacemark::HighwayPedestrian] = createHighwayStyle("#dddde8", "#999999", osmFont, "000000", 0, 2);
1115  m_defaultStyle[GeoDataPlacemark::HighwayPedestrian]->polyStyle().setOutline(false);
1116  m_defaultStyle[GeoDataPlacemark::HighwayFootway] = createHighwayStyle("#fa8072", QColor(Qt::white), osmFont, "000000", 0, 2, Qt::DotLine, Qt::SquareCap, true);
1117  m_defaultStyle[GeoDataPlacemark::HighwayCycleway] = createHighwayStyle(QColor(Qt::blue), QColor(Qt::white), osmFont, "000000", 0, 2, Qt::DotLine, Qt::SquareCap, true);
1118  m_defaultStyle[GeoDataPlacemark::HighwayService] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 1, 6);
1119  m_defaultStyle[GeoDataPlacemark::HighwayResidential] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 3, 6);
1120  m_defaultStyle[GeoDataPlacemark::HighwayLivingStreet] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 3, 6);
1121  m_defaultStyle[GeoDataPlacemark::HighwayRoad] = createHighwayStyle("#dddddd", "#bbbbbb", osmFont, "000000", 3, 6);
1122  m_defaultStyle[GeoDataPlacemark::HighwayUnclassified] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 3, 6);
1123  m_defaultStyle[GeoDataPlacemark::HighwayTertiary] = createHighwayStyle("#ffffff", "#8f8f8f", osmFont, "000000", 6, 6);
1124  m_defaultStyle[GeoDataPlacemark::HighwayTertiaryLink] = createHighwayStyle("#ffffff", "#8f8f8f", osmFont, "000000", 6, 6);
1125  m_defaultStyle[GeoDataPlacemark::HighwaySecondary] = createHighwayStyle("#f7fabf", "#707d05", osmFont, "000000", 6, 6);
1126  m_defaultStyle[GeoDataPlacemark::HighwaySecondaryLink] = createHighwayStyle("#f7fabf", "#707d05", osmFont, "000000", 6, 6);
1127  m_defaultStyle[GeoDataPlacemark::HighwayPrimary] = createHighwayStyle("#fcd6a4", "#a06b00", osmFont, "000000", 9, 6);
1128  m_defaultStyle[GeoDataPlacemark::HighwayPrimaryLink] = createHighwayStyle("#fcd6a4", "#a06b00", osmFont, "000000", 6, 6);
1129  m_defaultStyle[GeoDataPlacemark::HighwayRaceway] = createHighwayStyle("#ffc0cb", "#ffc0cb", osmFont, "000000", 1, 5);
1130  m_defaultStyle[GeoDataPlacemark::HighwayTrunk] = createHighwayStyle("#f9b29c", "#c84e2f", osmFont, "000000", 9, 6);
1131  m_defaultStyle[GeoDataPlacemark::HighwayTrunkLink] = createHighwayStyle("#f9b29c", "#c84e2f", osmFont, "000000", 9, 6);
1132  m_defaultStyle[GeoDataPlacemark::HighwayMotorway] = createHighwayStyle("#e892a2", "#dc2a67", osmFont, "000000", 9, 10);
1133  m_defaultStyle[GeoDataPlacemark::HighwayMotorwayLink] = createHighwayStyle("#e892a2", "#dc2a67", osmFont, "000000", 9, 10);
1134  m_defaultStyle[GeoDataPlacemark::HighwayCorridor] = createHighwayStyle("#ffffff", "#bbbbbb", osmFont, "000000", 1, 3);
1135  m_defaultStyle[GeoDataPlacemark::TransportAirportRunway] = createHighwayStyle("#bbbbcc", "#bbbbcc", osmFont, "000000", 0, 1, Qt::NoPen);
1136  m_defaultStyle[GeoDataPlacemark::TransportAirportTaxiway] = createHighwayStyle("#bbbbcc", "#bbbbcc", osmFont, "000000", 0, 1, Qt::NoPen);
1137  m_defaultStyle[GeoDataPlacemark::TransportAirportApron] = createWayStyle("#e9d1ff", Qt::transparent, true, false);
1138  m_defaultStyle[GeoDataPlacemark::TransportSpeedCamera] = createOsmPOIStyle(osmFont, "individual/speedcamera");
1139 
1140  m_defaultStyle[GeoDataPlacemark::NaturalWater] = createStyle(4, 0, waterColor, waterColor, true, false,
1141  Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector< qreal >(),
1142  osmFont, waterColor.darker(150));
1143  m_defaultStyle[GeoDataPlacemark::WaterwayRiver] = createStyle(4, 0, waterColor, waterColor, true, false,
1144  Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector< qreal >(),
1145  osmFont, waterColor.darker(150));
1146  m_defaultStyle[GeoDataPlacemark::WaterwayCanal] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver];
1147  m_defaultStyle[GeoDataPlacemark::WaterwayDitch] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver];
1148  m_defaultStyle[GeoDataPlacemark::WaterwayDrain] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver];
1149  m_defaultStyle[GeoDataPlacemark::WaterwayStream] = m_defaultStyle[GeoDataPlacemark::WaterwayRiver];
1150  m_defaultStyle[GeoDataPlacemark::WaterwayWeir] = createStyle(4, 0, "#ffffff", "#87939b", true, false,
1151  Qt::SolidPattern, Qt::DotLine, Qt::RoundCap, true, QVector< qreal >(),
1152  osmFont, waterColor.darker(150));
1153 
1154  m_defaultStyle[GeoDataPlacemark::CrossingIsland] = createOsmPOIStyle(osmFont, "transportation/zebra_crossing", transportationColor);
1155  m_defaultStyle[GeoDataPlacemark::CrossingIsland]->iconStyle().setScale(0.75);
1156  m_defaultStyle[GeoDataPlacemark::CrossingRailway] = createOsmPOIStyle(osmFont, "transportation/railway_crossing", transportationColor);
1157  m_defaultStyle[GeoDataPlacemark::CrossingRailway]->iconStyle().setScale(0.5);
1158  m_defaultStyle[GeoDataPlacemark::CrossingSignals] = createOsmPOIStyle(osmFont, "transportation/traffic_light_crossing", transportationColor);
1159  m_defaultStyle[GeoDataPlacemark::CrossingSignals]->iconStyle().setScale(0.75);
1160  m_defaultStyle[GeoDataPlacemark::CrossingZebra] = createOsmPOIStyle(osmFont, "transportation/zebra_crossing", transportationColor);
1161  m_defaultStyle[GeoDataPlacemark::CrossingZebra]->iconStyle().setScale(0.75);
1162 
1163  m_defaultStyle[GeoDataPlacemark::NaturalReef] = createStyle(5.5, 0, "#36677c", "#36677c", true, false,
1164  Qt::Dense7Pattern, Qt::DotLine, Qt::RoundCap, false, QVector< qreal >(),
1165  osmFont, waterColor.darker(150));
1166 
1167  m_defaultStyle[GeoDataPlacemark::AmenityGraveyard] = createWayStyle("#AACBAF", "#AACBAF", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_generic.png"));
1168 
1169  m_defaultStyle[GeoDataPlacemark::NaturalWood] = createWayStyle("#8DC46C", "#8DC46C", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/forest.png"));
1170  m_defaultStyle[GeoDataPlacemark::NaturalBeach] = createWayStyle("#FFF1BA", "#FFF1BA", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/beach.png"));
1171  m_defaultStyle[GeoDataPlacemark::NaturalWetland] = createWayStyle("#DDECEC", "#DDECEC", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/wetland.png"));
1172  m_defaultStyle[GeoDataPlacemark::NaturalGlacier] = createWayStyle("#DDECEC", "#DDECEC", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/glacier.png"));
1173  m_defaultStyle[GeoDataPlacemark::NaturalIceShelf] = createWayStyle("#8ebebe", "#8ebebe", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/glacier.png"));
1174  m_defaultStyle[GeoDataPlacemark::NaturalScrub] = createWayStyle("#B5E3B5", "#B5E3B5", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/scrub.png"));
1175  m_defaultStyle[GeoDataPlacemark::NaturalCliff] = createWayStyle(Qt::transparent, Qt::transparent, true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/cliff2.png"));
1176  m_defaultStyle[GeoDataPlacemark::NaturalCave] = createOsmPOIStyle(osmFont, "amenities/cave", amenityColor);
1177  m_defaultStyle[GeoDataPlacemark::NaturalHeath] = createWayStyle("#d6d99f", QColor("#d6d99f").darker(150), true, false);
1178 
1179  m_defaultStyle[GeoDataPlacemark::LeisureGolfCourse] = createOsmPOIAreaStyle(osmFont, "leisure/golf", "#39ac39", "#b5e3b5", QColor(Qt::transparent));
1180  m_defaultStyle[GeoDataPlacemark::LeisureMinigolfCourse] = createOsmPOIAreaStyle(osmFont, "leisure/miniature_golf", "#39ac39", "#b5e3b5", QColor(Qt::transparent));
1181  m_defaultStyle[GeoDataPlacemark::LeisureMarina] = createOsmPOIStyle(osmFont, QString(), QColor("#95abd5"), QColor("#aec8d1"), QColor("#95abd5").darker(150));
1182  m_defaultStyle[GeoDataPlacemark::LeisurePark] = createWayStyle(QColor("#c8facc"), QColor("#c8facc").darker(150), true, true);
1183  m_defaultStyle[GeoDataPlacemark::LeisurePlayground] = createOsmPOIAreaStyle(osmFont, "amenity/playground.16", amenityColor, "#CCFFF1", "#BDFFED");
1184  m_defaultStyle[GeoDataPlacemark::LeisurePitch] = createWayStyle("#8ad3af", QColor("#8ad3af").darker(150), true, true);
1185  m_defaultStyle[GeoDataPlacemark::LeisureSportsCentre] = createWayStyle("#33cc99", QColor("#33cc99").darker(150), true, true);
1186  m_defaultStyle[GeoDataPlacemark::LeisureStadium] = createWayStyle("#33cc99", QColor("#33cc99").darker(150), true, true);
1187  m_defaultStyle[GeoDataPlacemark::LeisureTrack] = createWayStyle("#74dcba", QColor("#74dcba").darker(150), true, true);
1188  m_defaultStyle[GeoDataPlacemark::LeisureSwimmingPool] = createWayStyle(waterColor, waterColor.darker(150), true, true);
1189 
1190  m_defaultStyle[GeoDataPlacemark::LanduseAllotments] = createWayStyle("#E4C6AA", "#E4C6AA", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/allotments.png"));
1191  m_defaultStyle[GeoDataPlacemark::LanduseBasin] = createWayStyle(QColor(0xB5, 0xD0, 0xD0, 0x80), QColor(0xB5, 0xD0, 0xD0));
1192  m_defaultStyle[GeoDataPlacemark::LanduseCemetery] = createWayStyle("#AACBAF", "#AACBAF", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/grave_yard_generic.png"));
1193  m_defaultStyle[GeoDataPlacemark::LanduseCommercial] = createWayStyle("#F2DAD9", "#D1B2B0", true, true);
1194  m_defaultStyle[GeoDataPlacemark::LanduseConstruction] = createWayStyle("#b6b592", "#b6b592", true, false);
1195  m_defaultStyle[GeoDataPlacemark::LanduseFarmland] = createWayStyle("#EDDDC9", "#C8B69E", true, true);
1196  m_defaultStyle[GeoDataPlacemark::LanduseFarmyard] = createWayStyle("#EFD6B5", "#D1B48C", true, true);
1197  m_defaultStyle[GeoDataPlacemark::LanduseGarages] = createWayStyle("#E0DDCD", "#E0DDCD", true, false);
1198  m_defaultStyle[GeoDataPlacemark::LanduseGrass] = createWayStyle("#A8C8A5", "#A8C8A5", true, false);
1199  m_defaultStyle[GeoDataPlacemark::LanduseIndustrial] = createWayStyle("#DED0D5", "#DED0D5", true, false);
1200  m_defaultStyle[GeoDataPlacemark::LanduseLandfill] = createWayStyle("#b6b592", "#b6b592", true, false);
1201  m_defaultStyle[GeoDataPlacemark::LanduseMeadow] = createWayStyle("#cdebb0", "#cdebb0", true, false);
1202  m_defaultStyle[GeoDataPlacemark::LanduseMilitary] = createWayStyle("#F3D8D2", "#F3D8D2", true, true, Qt::BDiagPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/military_red_hatch.png"));
1203  m_defaultStyle[GeoDataPlacemark::LanduseQuarry] = createWayStyle("#C4C2C2", "#C4C2C2", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/quarry.png"));
1204  m_defaultStyle[GeoDataPlacemark::LanduseRailway] = createWayStyle("#DED0D5", "#DED0D5", true, false);
1205  m_defaultStyle[GeoDataPlacemark::LanduseReservoir] = createWayStyle(waterColor, waterColor, true, false);
1206  m_defaultStyle[GeoDataPlacemark::LanduseResidential] = createWayStyle("#DCDCDC", "#DCDCDC", true, false);
1207  m_defaultStyle[GeoDataPlacemark::LanduseRetail] = createWayStyle("#FFD6D1", "#D99C95", true, true);
1208  m_defaultStyle[GeoDataPlacemark::LanduseOrchard] = createWayStyle("#AEDFA3", "#AEDFA3", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/orchard.png"));
1209  m_defaultStyle[GeoDataPlacemark::LanduseVineyard] = createWayStyle("#AEDFA3", "#AEDFA3", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/vineyard.png"));
1210 
1211  m_defaultStyle[GeoDataPlacemark::MilitaryDangerArea] = createWayStyle("#FFC0CB", "#FFC0CB", true, false, Qt::SolidPattern, MarbleDirs::path("bitmaps/osmcarto/patterns/danger.png"));
1212 
1213  m_defaultStyle[GeoDataPlacemark::RailwayRail] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", true, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, true, QVector< qreal >() << 2 << 3, osmFont, QColor(Qt::transparent));
1214  m_defaultStyle[GeoDataPlacemark::RailwayNarrowGauge] = createStyle(2.0, 1.0, "#706E70", "#EEEEEE", true, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, true, QVector< qreal >() << 2 << 3, osmFont, QColor(Qt::transparent));
1215  // FIXME: the tram is currently being rendered as a polygon.
1216  m_defaultStyle[GeoDataPlacemark::RailwayTram] = createStyle(2.0, 1.435, "#706E70", "#B7B6B7", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1217  m_defaultStyle[GeoDataPlacemark::RailwayLightRail] = createStyle(2.0, 1.435, "#706E70", "#706E70", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1218  m_defaultStyle[GeoDataPlacemark::RailwayAbandoned] = createStyle(2.0, 1.435, Qt::transparent, "#706E70", false, false, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1219  m_defaultStyle[GeoDataPlacemark::RailwaySubway] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1220  m_defaultStyle[GeoDataPlacemark::RailwayPreserved] = createStyle(2.0, 1.435, "#EEEEEE", "#706E70", true, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, true, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1221  m_defaultStyle[GeoDataPlacemark::RailwayMiniature] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1222  m_defaultStyle[GeoDataPlacemark::RailwayConstruction] = createStyle(2.0, 1.435, "#EEEEEE", "#706E70", true, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, true, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1223  m_defaultStyle[GeoDataPlacemark::RailwayMonorail] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1224  m_defaultStyle[GeoDataPlacemark::RailwayFunicular] = createStyle(2.0, 1.435, "#706E70", "#EEEEEE", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont, QColor(Qt::transparent));
1225 
1226  m_defaultStyle[GeoDataPlacemark::Landmass] = createWayStyle("#F1EEE8", "#F1EEE8", true, false);
1227  m_defaultStyle[GeoDataPlacemark::UrbanArea] = createWayStyle("#E6E3DD", "#E6E3DD", true, false);
1228  m_defaultStyle[GeoDataPlacemark::InternationalDateLine] = createStyle(1.0, 0.0, "#000000", "#000000", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont);
1229  m_defaultStyle[GeoDataPlacemark::Bathymetry] = createWayStyle("#a5c9c9", "#a5c9c9", true, false);
1230 
1231  m_defaultStyle[GeoDataPlacemark::AerialwayStation] = createOsmPOIStyle(osmFont, "individual/railway_station", transportationColor);
1232  m_defaultStyle[GeoDataPlacemark::AerialwayStation]->iconStyle().setScale(0.33f);
1233  m_defaultStyle[GeoDataPlacemark::AerialwayPylon] = createOsmPOIStyle(osmFont, "individual/pylon", QColor("#dddddd"));
1234  m_defaultStyle[GeoDataPlacemark::AerialwayPylon]->iconStyle().setScale(0.33f);
1235  m_defaultStyle[GeoDataPlacemark::AerialwayCableCar] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/transportation-583813-cable-car.svg"));
1236  m_defaultStyle[GeoDataPlacemark::AerialwayGondola] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/transportation-21636-gondola.svg"));
1237  m_defaultStyle[GeoDataPlacemark::AerialwayChairLift] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/transportation-231-chair-lift.svg"));
1238  m_defaultStyle[GeoDataPlacemark::AerialwayMixedLift] = createIconWayStyle("#bbbbbb", osmFont, transportationColor);
1239  m_defaultStyle[GeoDataPlacemark::AerialwayDragLift] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/transportation-8803-platter-lift.svg"));
1240  m_defaultStyle[GeoDataPlacemark::AerialwayTBar] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/transportation-8803-platter-lift.svg"));
1241  m_defaultStyle[GeoDataPlacemark::AerialwayJBar] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/transportation-8803-platter-lift.svg"));
1242  m_defaultStyle[GeoDataPlacemark::AerialwayPlatter] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/transportation-8803-platter-lift.svg"));
1243  m_defaultStyle[GeoDataPlacemark::AerialwayRopeTow] = createIconWayStyle("#bbbbbb", osmFont, transportationColor);
1244  m_defaultStyle[GeoDataPlacemark::AerialwayMagicCarpet] = createIconWayStyle("#bbbbbb", osmFont, transportationColor);
1245  m_defaultStyle[GeoDataPlacemark::AerialwayZipLine] = createIconWayStyle("#bbbbbb", osmFont, transportationColor);
1246  m_defaultStyle[GeoDataPlacemark::AerialwayGoods] = createIconWayStyle("#bbbbbb", osmFont, transportationColor);
1247 
1248  m_defaultStyle[GeoDataPlacemark::PisteDownhill] = createStyle(9, 0.0, "#dddddd", Qt::transparent, true, false, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector< qreal >(), osmFont, Qt::transparent);
1249  m_defaultStyle[GeoDataPlacemark::PisteNordic] = createStyle(3, 0.0, "#fffafa", "#006666", true, false, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector< qreal >(), osmFont, Qt::transparent, MarbleDirs::path("bitmaps/osmcarto/patterns/ice.png"));
1250  m_defaultStyle[GeoDataPlacemark::PisteSkitour] = m_defaultStyle[GeoDataPlacemark::PisteNordic];
1251  m_defaultStyle[GeoDataPlacemark::PisteSled] = m_defaultStyle[GeoDataPlacemark::PisteNordic];
1252  m_defaultStyle[GeoDataPlacemark::PisteHike] = m_defaultStyle[GeoDataPlacemark::PisteNordic];
1253  m_defaultStyle[GeoDataPlacemark::PisteSleigh] = m_defaultStyle[GeoDataPlacemark::PisteNordic];
1254  m_defaultStyle[GeoDataPlacemark::PisteIceSkate] = m_defaultStyle[GeoDataPlacemark::PisteNordic];
1255  m_defaultStyle[GeoDataPlacemark::PisteSnowPark] = m_defaultStyle[GeoDataPlacemark::PisteNordic];
1256  m_defaultStyle[GeoDataPlacemark::PistePlayground] = m_defaultStyle[GeoDataPlacemark::PisteNordic];
1257  m_defaultStyle[GeoDataPlacemark::PisteSkiJump] = createIconWayStyle("#bbbbbb", osmFont, transportationColor, 1.0, QStringLiteral("svg/thenounproject/sports-245-ski-jump.svg"));
1258 
1259  m_defaultStyle[GeoDataPlacemark::AdminLevel1] = createStyle(0.0, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::CustomDashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1260  m_defaultStyle[GeoDataPlacemark::AdminLevel2] = createStyle(2.0, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1261  m_defaultStyle[GeoDataPlacemark::AdminLevel3] = createStyle(1.8, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1262  m_defaultStyle[GeoDataPlacemark::AdminLevel4] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1263  m_defaultStyle[GeoDataPlacemark::AdminLevel5] = createStyle(1.25, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashDotDotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1264  m_defaultStyle[GeoDataPlacemark::AdminLevel6] = createStyle(1, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashDotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1265  m_defaultStyle[GeoDataPlacemark::AdminLevel7] = createStyle(1, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1266  m_defaultStyle[GeoDataPlacemark::AdminLevel8] = createStyle(1, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DashLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1267  m_defaultStyle[GeoDataPlacemark::AdminLevel9] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1268  m_defaultStyle[GeoDataPlacemark::AdminLevel10] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1269  m_defaultStyle[GeoDataPlacemark::AdminLevel11] = createStyle(1.5, 0.0, "#DF9CCF", "#DF9CCF", false, true, Qt::SolidPattern, Qt::DotLine, Qt::FlatCap, false, QVector< qreal >() << 0.3 << 0.3, osmFont);
1270 
1271  m_defaultStyle[GeoDataPlacemark::BoundaryMaritime] = createStyle(2.0, 0.0, "#88b3bf", "#88b3bf", false, true, Qt::SolidPattern, Qt::SolidLine, Qt::FlatCap, false, QVector<qreal>(), osmFont);
1272 
1273  m_defaultStyle[GeoDataPlacemark::Satellite]
1274  = GeoDataStyle::Ptr(new GeoDataStyle(MarbleDirs::path("bitmaps/satellite.png"),
1275  QFont(defaultFamily, defaultSize, 50, false), defaultLabelColor));
1276 
1277  QFont tmp;
1278 
1279  // Fonts for areas ...
1280  tmp = m_defaultStyle[GeoDataPlacemark::Continent]->labelStyle().font();
1281  tmp.setLetterSpacing(QFont::AbsoluteSpacing, 2);
1282  tmp.setCapitalization(QFont::AllUppercase);
1283  tmp.setBold(true);
1284  m_defaultStyle[GeoDataPlacemark::Continent]->labelStyle().setFont(tmp);
1285 
1286  // Fonts for areas ...
1287  tmp = m_defaultStyle[GeoDataPlacemark::Mare]->labelStyle().font();
1288  tmp.setLetterSpacing(QFont::AbsoluteSpacing, 2);
1289  tmp.setCapitalization(QFont::AllUppercase);
1290  tmp.setBold(true);
1291  m_defaultStyle[GeoDataPlacemark::Mare]->labelStyle().setFont(tmp);
1292 
1293  // Now we need to underline the capitals ...
1294 
1295  tmp = m_defaultStyle[GeoDataPlacemark::SmallNationCapital]->labelStyle().font();
1296  tmp.setUnderline(true);
1297  m_defaultStyle[GeoDataPlacemark::SmallNationCapital]->labelStyle().setFont(tmp);
1298 
1299  tmp = m_defaultStyle[GeoDataPlacemark::MediumNationCapital]->labelStyle().font();
1300  tmp.setUnderline(true);
1301  m_defaultStyle[GeoDataPlacemark::MediumNationCapital]->labelStyle().setFont(tmp);
1302 
1303  tmp = m_defaultStyle[GeoDataPlacemark::BigNationCapital]->labelStyle().font();
1304  tmp.setUnderline(true);
1305  m_defaultStyle[GeoDataPlacemark::BigNationCapital]->labelStyle().setFont(tmp);
1306 
1307  tmp = m_defaultStyle[GeoDataPlacemark::LargeNationCapital]->labelStyle().font();
1308  tmp.setUnderline(true);
1309  m_defaultStyle[GeoDataPlacemark::LargeNationCapital]->labelStyle().setFont(tmp);
1310 
1311  // Buildings
1312  m_defaultStyle[GeoDataPlacemark::Building] = createStyle(1, 0, buildingColor, buildingColor.darker(),
1313  true, true, Qt::SolidPattern, Qt::SolidLine, Qt::RoundCap, false, QVector<qreal>(), osmFont);
1314  for (int i = 0; i < GeoDataPlacemark::LastIndex; ++i) {
1315  if (m_defaultStyle[i] && !m_defaultStyle[i]->iconStyle().iconPath().isEmpty()) {
1316  auto const category = GeoDataPlacemark::GeoDataVisualCategory(i);
1317  m_buildingStyles[category] = GeoDataStyle::Ptr(new GeoDataStyle(*m_defaultStyle[GeoDataPlacemark::Building]));
1318  m_buildingStyles[category]->iconStyle() = m_defaultStyle[i]->iconStyle();
1319  m_buildingStyles[category]->labelStyle() = m_defaultStyle[i]->labelStyle();
1320  }
1321  }
1322 
1323 }
1324 
1325 QString StyleBuilder::Private::createPaintLayerItem(const QString &itemType, GeoDataPlacemark::GeoDataVisualCategory visualCategory, const QString &subType)
1326 {
1327  QString const category = visualCategoryName(visualCategory);
1328  if (subType.isEmpty()) {
1329  return itemType + QLatin1Char('/') + category;
1330  } else {
1331  return itemType + QLatin1Char('/') + category + QLatin1Char('/') + subType;
1332  }
1333 }
1334 
1335 void StyleBuilder::Private::initializeOsmVisualCategories()
1336 {
1337  // Only initialize the map once
1338  if (!s_visualCategories.isEmpty()) {
1339  return;
1340  }
1341 
1342  s_visualCategories[OsmTag("admin_level", "1")] = GeoDataPlacemark::AdminLevel1;
1343  s_visualCategories[OsmTag("admin_level", "2")] = GeoDataPlacemark::AdminLevel2;
1344  s_visualCategories[OsmTag("admin_level", "3")] = GeoDataPlacemark::AdminLevel3;
1345  s_visualCategories[OsmTag("admin_level", "4")] = GeoDataPlacemark::AdminLevel4;
1346  s_visualCategories[OsmTag("admin_level", "5")] = GeoDataPlacemark::AdminLevel5;
1347  s_visualCategories[OsmTag("admin_level", "6")] = GeoDataPlacemark::AdminLevel6;
1348  s_visualCategories[OsmTag("admin_level", "7")] = GeoDataPlacemark::AdminLevel7;
1349  s_visualCategories[OsmTag("admin_level", "8")] = GeoDataPlacemark::AdminLevel8;
1350  s_visualCategories[OsmTag("admin_level", "9")] = GeoDataPlacemark::AdminLevel9;
1351  s_visualCategories[OsmTag("admin_level", "10")] = GeoDataPlacemark::AdminLevel10;
1352  s_visualCategories[OsmTag("admin_level", "11")] = GeoDataPlacemark::AdminLevel11;
1353 
1354  s_visualCategories[OsmTag("boundary", "maritime")] = GeoDataPlacemark::BoundaryMaritime;
1355 
1356  s_visualCategories[OsmTag("amenity", "restaurant")] = GeoDataPlacemark::FoodRestaurant;
1357  s_visualCategories[OsmTag("amenity", "fast_food")] = GeoDataPlacemark::FoodFastFood;
1358  s_visualCategories[OsmTag("amenity", "pub")] = GeoDataPlacemark::FoodPub;
1359  s_visualCategories[OsmTag("amenity", "bar")] = GeoDataPlacemark::FoodBar;
1360  s_visualCategories[OsmTag("amenity", "cafe")] = GeoDataPlacemark::FoodCafe;
1361  s_visualCategories[OsmTag("amenity", "biergarten")] = GeoDataPlacemark::FoodBiergarten;
1362 
1363  s_visualCategories[OsmTag("amenity", "college")] = GeoDataPlacemark::EducationCollege;
1364  s_visualCategories[OsmTag("amenity", "school")] = GeoDataPlacemark::EducationSchool;
1365  s_visualCategories[OsmTag("amenity", "university")] = GeoDataPlacemark::EducationUniversity;
1366 
1367  s_visualCategories[OsmTag("amenity", "childcare")] = GeoDataPlacemark::AmenityKindergarten;
1368  s_visualCategories[OsmTag("amenity", "kindergarten")] = GeoDataPlacemark::AmenityKindergarten;
1369  s_visualCategories[OsmTag("amenity", "library")] = GeoDataPlacemark::AmenityLibrary;
1370 
1371  s_visualCategories[OsmTag("amenity", "bus_station")] = GeoDataPlacemark::TransportBusStation;
1372  s_visualCategories[OsmTag("amenity", "car_sharing")] = GeoDataPlacemark::TransportCarShare;
1373  s_visualCategories[OsmTag("amenity", "fuel")] = GeoDataPlacemark::TransportFuel;
1374  s_visualCategories[OsmTag("amenity", "parking")] = GeoDataPlacemark::TransportParking;
1375  s_visualCategories[OsmTag("amenity", "parking_space")] = GeoDataPlacemark::TransportParkingSpace;
1376 
1377  s_visualCategories[OsmTag("amenity", "atm")] = GeoDataPlacemark::MoneyAtm;
1378  s_visualCategories[OsmTag("amenity", "bank")] = GeoDataPlacemark::MoneyBank;
1379 
1380  s_visualCategories[OsmTag("historic", "archaeological_site")] = GeoDataPlacemark::HistoricArchaeologicalSite;
1381  s_visualCategories[OsmTag("historic", "castle")] = GeoDataPlacemark::HistoricCastle;
1382  s_visualCategories[OsmTag("historic", "fort")] = GeoDataPlacemark::HistoricCastle;
1383  s_visualCategories[OsmTag("historic", "memorial")] = GeoDataPlacemark::HistoricMemorial;
1384  s_visualCategories[OsmTag("historic", "monument")] = GeoDataPlacemark::HistoricMonument;
1385  s_visualCategories[OsmTag("historic", "ruins")] = GeoDataPlacemark::HistoricRuins;
1386 
1387  s_visualCategories[OsmTag("amenity", "bench")] = GeoDataPlacemark::AmenityBench;
1388  s_visualCategories[OsmTag("amenity", "car_wash")] = GeoDataPlacemark::AmenityCarWash;
1389  s_visualCategories[OsmTag("amenity", "charging_station")] = GeoDataPlacemark::AmenityChargingStation;
1390  s_visualCategories[OsmTag("amenity", "cinema")] = GeoDataPlacemark::AmenityCinema;
1391  s_visualCategories[OsmTag("amenity", "community_centre")] = GeoDataPlacemark::AmenityCommunityCentre;
1392  s_visualCategories[OsmTag("amenity", "courthouse")] = GeoDataPlacemark::AmenityCourtHouse;
1393  s_visualCategories[OsmTag("amenity", "drinking_water")] = GeoDataPlacemark::AmenityDrinkingWater;
1394  s_visualCategories[OsmTag("amenity", "embassy")] = GeoDataPlacemark::AmenityEmbassy;
1395  s_visualCategories[OsmTag("amenity", "fire_station")] = GeoDataPlacemark::AmenityFireStation;
1396  s_visualCategories[OsmTag("amenity", "fountain")] = GeoDataPlacemark::AmenityFountain;
1397  s_visualCategories[OsmTag("amenity", "graveyard")] = GeoDataPlacemark::AmenityGraveyard;
1398  s_visualCategories[OsmTag("amenity", "hunting_stand")] = GeoDataPlacemark::AmenityHuntingStand;
1399  s_visualCategories[OsmTag("amenity", "nightclub")] = GeoDataPlacemark::AmenityNightClub;
1400  s_visualCategories[OsmTag("amenity", "police")] = GeoDataPlacemark::AmenityPolice;
1401  s_visualCategories[OsmTag("amenity", "post_box")] = GeoDataPlacemark::AmenityPostBox;
1402  s_visualCategories[OsmTag("amenity", "post_office")] = GeoDataPlacemark::AmenityPostOffice;
1403  s_visualCategories[OsmTag("amenity", "prison")] = GeoDataPlacemark::AmenityPrison;
1404  s_visualCategories[OsmTag("amenity", "recycling")] = GeoDataPlacemark::AmenityRecycling;
1405  s_visualCategories[OsmTag("amenity", "shelter")] = GeoDataPlacemark::AmenityShelter;
1406  s_visualCategories[OsmTag("amenity", "social_facility")] = GeoDataPlacemark::AmenitySocialFacility;
1407  s_visualCategories[OsmTag("amenity", "telephone")] = GeoDataPlacemark::AmenityTelephone;
1408  s_visualCategories[OsmTag("amenity", "theatre")] = GeoDataPlacemark::AmenityTheatre;
1409  s_visualCategories[OsmTag("amenity", "toilets")] = GeoDataPlacemark::AmenityToilets;
1410  s_visualCategories[OsmTag("amenity", "townhall")] = GeoDataPlacemark::AmenityTownHall;
1411  s_visualCategories[OsmTag("amenity", "waste_basket")] = GeoDataPlacemark::AmenityWasteBasket;
1412  s_visualCategories[OsmTag("emergency", "phone")] = GeoDataPlacemark::AmenityEmergencyPhone;
1413  s_visualCategories[OsmTag("amenity", "mountain_rescue")] = GeoDataPlacemark::AmenityMountainRescue;
1414  s_visualCategories[OsmTag("amenity", "dentist")] = GeoDataPlacemark::HealthDentist;
1415  s_visualCategories[OsmTag("amenity", "doctors")] = GeoDataPlacemark::HealthDoctors;
1416  s_visualCategories[OsmTag("amenity", "hospital")] = GeoDataPlacemark::HealthHospital;
1417  s_visualCategories[OsmTag("amenity", "pharmacy")] = GeoDataPlacemark::HealthPharmacy;
1418  s_visualCategories[OsmTag("amenity", "veterinary")] = GeoDataPlacemark::HealthVeterinary;
1419 
1420  s_visualCategories[OsmTag("amenity", "place_of_worship")] = GeoDataPlacemark::ReligionPlaceOfWorship;
1421 
1422  s_visualCategories[OsmTag("tourism", "information")] = GeoDataPlacemark::TourismInformation;
1423 
1424  s_visualCategories[OsmTag("natural", "cave_entrance")] = GeoDataPlacemark::NaturalCave;
1425  s_visualCategories[OsmTag("natural", "peak")] = GeoDataPlacemark::NaturalPeak;
1426  s_visualCategories[OsmTag("natural", "tree")] = GeoDataPlacemark::NaturalTree;
1427  s_visualCategories[OsmTag("natural", "volcano")] = GeoDataPlacemark::NaturalVolcano;
1428 
1429  s_visualCategories[OsmTag("shop", "alcohol")] = GeoDataPlacemark::ShopAlcohol;
1430  s_visualCategories[OsmTag("shop", "art")] = GeoDataPlacemark::ShopArt;
1431  s_visualCategories[OsmTag("shop", "bag")] = GeoDataPlacemark::ShopBag;
1432  s_visualCategories[OsmTag("shop", "bakery")] = GeoDataPlacemark::ShopBakery;
1433  s_visualCategories[OsmTag("shop", "beauty")] = GeoDataPlacemark::ShopBeauty;
1434  s_visualCategories[OsmTag("shop", "beverages")] = GeoDataPlacemark::ShopBeverages;
1435  s_visualCategories[OsmTag("shop", "bicycle")] = GeoDataPlacemark::ShopBicycle;
1436  s_visualCategories[OsmTag("shop", "books")] = GeoDataPlacemark::ShopBook;
1437  s_visualCategories[OsmTag("shop", "butcher")] = GeoDataPlacemark::ShopButcher;
1438  s_visualCategories[OsmTag("shop", "car")] = GeoDataPlacemark::ShopCar;
1439  s_visualCategories[OsmTag("shop", "car_parts")] = GeoDataPlacemark::ShopCarParts;
1440  s_visualCategories[OsmTag("shop", "car_repair")] = GeoDataPlacemark::ShopCarRepair;
1441  s_visualCategories[OsmTag("shop", "chemist")] = GeoDataPlacemark::ShopChemist;
1442  s_visualCategories[OsmTag("shop", "clothes")] = GeoDataPlacemark::ShopClothes;
1443  s_visualCategories[OsmTag("shop", "confectionery")] = GeoDataPlacemark::ShopConfectionery;
1444  s_visualCategories[OsmTag("shop", "convenience")] = GeoDataPlacemark::ShopConvenience;
1445  s_visualCategories[OsmTag("shop", "copy")] = GeoDataPlacemark::ShopCopy;
1446  s_visualCategories[OsmTag("shop", "cosmetics")] = GeoDataPlacemark::ShopCosmetics;
1447  s_visualCategories[OsmTag("shop", "deli")] = GeoDataPlacemark::ShopDeli;
1448  s_visualCategories[OsmTag("shop", "department_store")] = GeoDataPlacemark::ShopDepartmentStore;
1449  s_visualCategories[OsmTag("shop", "doityourself")] = GeoDataPlacemark::ShopDoitYourself;
1450  s_visualCategories[OsmTag("shop", "electronics")] = GeoDataPlacemark::ShopElectronics;
1451  s_visualCategories[OsmTag("shop", "fashion")] = GeoDataPlacemark::ShopFashion;
1452  s_visualCategories[OsmTag("shop", "florist")] = GeoDataPlacemark::ShopFlorist;
1453  s_visualCategories[OsmTag("shop", "furniture")] = GeoDataPlacemark::ShopFurniture;
1454  s_visualCategories[OsmTag("shop", "gift")] = GeoDataPlacemark::ShopGift;
1455  s_visualCategories[OsmTag("shop", "greengrocer")] = GeoDataPlacemark::ShopGreengrocer;
1456  s_visualCategories[OsmTag("shop", "hairdresser")] = GeoDataPlacemark::ShopHairdresser;
1457  s_visualCategories[OsmTag("shop", "hardware")] = GeoDataPlacemark::ShopHardware;
1458  s_visualCategories[OsmTag("shop", "hifi")] = GeoDataPlacemark::ShopHifi;
1459  s_visualCategories[OsmTag("shop", "jewelry")] = GeoDataPlacemark::ShopJewelry;
1460  s_visualCategories[OsmTag("shop", "kiosk")] = GeoDataPlacemark::ShopKiosk;
1461  s_visualCategories[OsmTag("shop", "laundry")] = GeoDataPlacemark::ShopLaundry;
1462  s_visualCategories[OsmTag("shop", "mobile_phone")] = GeoDataPlacemark::ShopMobilePhone;
1463  s_visualCategories[OsmTag("shop", "motorcycle")] = GeoDataPlacemark::ShopMotorcycle;
1464  s_visualCategories[OsmTag("shop", "musical_instrument")] = GeoDataPlacemark::ShopMusicalInstrument;
1465  s_visualCategories[OsmTag("shop", "optician")] = GeoDataPlacemark::ShopOptician;
1466  s_visualCategories[OsmTag("shop", "outdoor")] = GeoDataPlacemark::ShopOutdoor;
1467  s_visualCategories[OsmTag("shop", "perfumery")] = GeoDataPlacemark::ShopPerfumery;
1468  s_visualCategories[OsmTag("shop", "pet")] = GeoDataPlacemark::ShopPet;
1469  s_visualCategories[OsmTag("shop", "photo")] = GeoDataPlacemark::ShopPhoto;
1470  s_visualCategories[OsmTag("shop", "seafood")] = GeoDataPlacemark::ShopSeafood;
1471  s_visualCategories[OsmTag("shop", "shoes")] = GeoDataPlacemark::ShopShoes;
1472  s_visualCategories[OsmTag("shop", "sports")] = GeoDataPlacemark::ShopSports;
1473  s_visualCategories[OsmTag("shop", "stationery")] = GeoDataPlacemark::ShopStationery;
1474  s_visualCategories[OsmTag("shop", "supermarket")] = GeoDataPlacemark::ShopSupermarket;
1475  s_visualCategories[OsmTag("shop", "tea")] = GeoDataPlacemark::ShopTea;
1476  s_visualCategories[OsmTag("shop", "computer")] = GeoDataPlacemark::ShopComputer;
1477  s_visualCategories[OsmTag("shop", "garden_centre")] = GeoDataPlacemark::ShopGardenCentre;
1478  s_visualCategories[OsmTag("shop", "tobacco")] = GeoDataPlacemark::ShopTobacco;
1479  s_visualCategories[OsmTag("shop", "toys")] = GeoDataPlacemark::ShopToys;
1480  s_visualCategories[OsmTag("shop", "travel_agency")] = GeoDataPlacemark::ShopTravelAgency;
1481  s_visualCategories[OsmTag("shop", "variety_store")] = GeoDataPlacemark::ShopVarietyStore;
1482 
1483 
1484  // Default for all other shops
1485  for (const QString &value: shopValues()) {
1486  s_visualCategories[OsmTag("shop", value)] = GeoDataPlacemark::Shop;
1487  }
1488 
1489  s_visualCategories[OsmTag("man_made", "bridge")] = GeoDataPlacemark::ManmadeBridge;
1490  s_visualCategories[OsmTag("man_made", "lighthouse")] = GeoDataPlacemark::ManmadeLighthouse;
1491  s_visualCategories[OsmTag("man_made", "pier")] = GeoDataPlacemark::ManmadePier;
1492  s_visualCategories[OsmTag("man_made", "water_tower")] = GeoDataPlacemark::ManmadeWaterTower;
1493  s_visualCategories[OsmTag("man_made", "windmill")] = GeoDataPlacemark::ManmadeWindMill;
1494  s_visualCategories[OsmTag("man_made", "communications_tower")] = GeoDataPlacemark::ManmadeCommunicationsTower;
1495  s_visualCategories[OsmTag("tower:type", "communication")] = GeoDataPlacemark::ManmadeCommunicationsTower;
1496 
1497  s_visualCategories[OsmTag("religion", "")] = GeoDataPlacemark::ReligionPlaceOfWorship;
1498  s_visualCategories[OsmTag("religion", "bahai")] = GeoDataPlacemark::ReligionBahai;
1499  s_visualCategories[OsmTag("religion", "buddhist")] = GeoDataPlacemark::ReligionBuddhist;
1500  s_visualCategories[OsmTag("religion", "christian")] = GeoDataPlacemark::ReligionChristian;
1501  s_visualCategories[OsmTag("religion", "hindu")] = GeoDataPlacemark::ReligionHindu;
1502  s_visualCategories[OsmTag("religion", "jain")] = GeoDataPlacemark::ReligionJain;
1503  s_visualCategories[OsmTag("religion", "jewish")] = GeoDataPlacemark::ReligionJewish;
1504  s_visualCategories[OsmTag("religion", "muslim")] = GeoDataPlacemark::ReligionMuslim;
1505  s_visualCategories[OsmTag("religion", "shinto")] = GeoDataPlacemark::ReligionShinto;
1506  s_visualCategories[OsmTag("religion", "sikh")] = GeoDataPlacemark::ReligionSikh;
1507  s_visualCategories[OsmTag("religion", "taoist")] = GeoDataPlacemark::ReligionTaoist;
1508 
1509  s_visualCategories[OsmTag("tourism", "camp_site")] = GeoDataPlacemark::AccomodationCamping;
1510  s_visualCategories[OsmTag("tourism", "guest_house")] = GeoDataPlacemark::AccomodationGuestHouse;
1511  s_visualCategories[OsmTag("tourism", "hostel")] = GeoDataPlacemark::AccomodationHostel;
1512  s_visualCategories[OsmTag("tourism", "hotel")] = GeoDataPlacemark::AccomodationHotel;
1513  s_visualCategories[OsmTag("tourism", "motel")] = GeoDataPlacemark::AccomodationMotel;
1514 
1515  s_visualCategories[OsmTag("tourism", "alpine_hut")] = GeoDataPlacemark::TourismAlpineHut;
1516  s_visualCategories[OsmTag("tourism", "artwork")] = GeoDataPlacemark::TourismArtwork;
1517  s_visualCategories[OsmTag("tourism", "attraction")] = GeoDataPlacemark::TourismAttraction;
1518  s_visualCategories[OsmTag("tourism", "museum")] = GeoDataPlacemark::TourismMuseum;
1519  s_visualCategories[OsmTag("tourism", "theme_park")] = GeoDataPlacemark::TourismThemePark;
1520  s_visualCategories[OsmTag("tourism", "viewpoint")] = GeoDataPlacemark::TourismViewPoint;
1521  s_visualCategories[OsmTag("tourism", "wilderness_hut")] = GeoDataPlacemark::TourismWildernessHut;
1522  s_visualCategories[OsmTag("tourism", "zoo")] = GeoDataPlacemark::TourismZoo;
1523 
1524  s_visualCategories[OsmTag("barrier", "city_wall")] = GeoDataPlacemark::BarrierCityWall;
1525  s_visualCategories[OsmTag("barrier", "gate")] = GeoDataPlacemark::BarrierGate;
1526  s_visualCategories[OsmTag("barrier", "lift_gate")] = GeoDataPlacemark::BarrierLiftGate;
1527  s_visualCategories[OsmTag("barrier", "wall")] = GeoDataPlacemark::BarrierWall;
1528 
1529  s_visualCategories[OsmTag("highway", "traffic_signals")] = GeoDataPlacemark::HighwayTrafficSignals;
1530  s_visualCategories[OsmTag("highway", "elevator")] = GeoDataPlacemark::HighwayElevator;
1531 
1532  s_visualCategories[OsmTag("highway", "cycleway")] = GeoDataPlacemark::HighwayCycleway;
1533  s_visualCategories[OsmTag("highway", "footway")] = GeoDataPlacemark::HighwayFootway;
1534  s_visualCategories[OsmTag("highway", "living_street")] = GeoDataPlacemark::HighwayLivingStreet;
1535  s_visualCategories[OsmTag("highway", "motorway")] = GeoDataPlacemark::HighwayMotorway;
1536  s_visualCategories[OsmTag("highway", "motorway_link")] = GeoDataPlacemark::HighwayMotorwayLink;
1537  s_visualCategories[OsmTag("highway", "path")] = GeoDataPlacemark::HighwayPath;
1538  s_visualCategories[OsmTag("highway", "pedestrian")] = GeoDataPlacemark::HighwayPedestrian;
1539  s_visualCategories[OsmTag("highway", "primary")] = GeoDataPlacemark::HighwayPrimary;
1540  s_visualCategories[OsmTag("highway", "primary_link")] = GeoDataPlacemark::HighwayPrimaryLink;
1541  s_visualCategories[OsmTag("highway", "raceway")] = GeoDataPlacemark::HighwayRaceway;
1542  s_visualCategories[OsmTag("highway", "residential")] = GeoDataPlacemark::HighwayResidential;
1543  s_visualCategories[OsmTag("highway", "road")] = GeoDataPlacemark::HighwayRoad;
1544  s_visualCategories[OsmTag("highway", "secondary")] = GeoDataPlacemark::HighwaySecondary;
1545  s_visualCategories[OsmTag("highway", "secondary_link")] = GeoDataPlacemark::HighwaySecondaryLink;
1546  s_visualCategories[OsmTag("highway", "service")] = GeoDataPlacemark::HighwayService;
1547  s_visualCategories[OsmTag("highway", "steps")] = GeoDataPlacemark::HighwaySteps;
1548  s_visualCategories[OsmTag("highway", "tertiary")] = GeoDataPlacemark::HighwayTertiary;
1549  s_visualCategories[OsmTag("highway", "tertiary_link")] = GeoDataPlacemark::HighwayTertiaryLink;
1550  s_visualCategories[OsmTag("highway", "track")] = GeoDataPlacemark::HighwayTrack;
1551  s_visualCategories[OsmTag("highway", "trunk")] = GeoDataPlacemark::HighwayTrunk;
1552  s_visualCategories[OsmTag("highway", "trunk_link")] = GeoDataPlacemark::HighwayTrunkLink;
1553  s_visualCategories[OsmTag("highway", "unclassified")] = GeoDataPlacemark::HighwayUnclassified;
1554  s_visualCategories[OsmTag("highway", "unknown")] = GeoDataPlacemark::HighwayUnknown;
1555  s_visualCategories[OsmTag("highway", "corridor")] = GeoDataPlacemark::HighwayCorridor;
1556 
1557  s_visualCategories[OsmTag("natural", "bay")] = GeoDataPlacemark::NaturalWater;
1558  s_visualCategories[OsmTag("natural", "coastline")] = GeoDataPlacemark::NaturalWater;
1559  s_visualCategories[OsmTag("natural", "reef")] = GeoDataPlacemark::NaturalReef;
1560  s_visualCategories[OsmTag("natural", "water")] = GeoDataPlacemark::NaturalWater;
1561 
1562  s_visualCategories[OsmTag("waterway", "canal")] = GeoDataPlacemark::WaterwayCanal;
1563  s_visualCategories[OsmTag("waterway", "ditch")] = GeoDataPlacemark::WaterwayDitch;
1564  s_visualCategories[OsmTag("waterway", "drain")] = GeoDataPlacemark::WaterwayDrain;
1565  s_visualCategories[OsmTag("waterway", "river")] = GeoDataPlacemark::WaterwayRiver;
1566  s_visualCategories[OsmTag("waterway", "riverbank")] = GeoDataPlacemark::NaturalWater;
1567  s_visualCategories[OsmTag("waterway", "weir")] = GeoDataPlacemark::WaterwayWeir;
1568  s_visualCategories[OsmTag("waterway", "stream")] = GeoDataPlacemark::WaterwayStream;
1569 
1570  s_visualCategories[OsmTag("natural", "beach")] = GeoDataPlacemark::NaturalBeach;
1571  s_visualCategories[OsmTag("natural", "cliff")] = GeoDataPlacemark::NaturalCliff;
1572  s_visualCategories[OsmTag("natural", "glacier")] = GeoDataPlacemark::NaturalGlacier;
1573  s_visualCategories[OsmTag("glacier:type", "shelf")] = GeoDataPlacemark::NaturalIceShelf;
1574  s_visualCategories[OsmTag("natural", "scrub")] = GeoDataPlacemark::NaturalScrub;
1575  s_visualCategories[OsmTag("natural", "wetland")] = GeoDataPlacemark::NaturalWetland;
1576  s_visualCategories[OsmTag("natural", "wood")] = GeoDataPlacemark::NaturalWood;
1577 
1578  s_visualCategories[OsmTag("military", "danger_area")] = GeoDataPlacemark::MilitaryDangerArea;
1579 
1580  s_visualCategories[OsmTag("landuse", "allotments")] = GeoDataPlacemark::LanduseAllotments;
1581  s_visualCategories[OsmTag("landuse", "basin")] = GeoDataPlacemark::LanduseBasin;
1582  s_visualCategories[OsmTag("landuse", "brownfield")] = GeoDataPlacemark::LanduseConstruction;
1583  s_visualCategories[OsmTag("landuse", "cemetery")] = GeoDataPlacemark::LanduseCemetery;
1584  s_visualCategories[OsmTag("landuse", "commercial")] = GeoDataPlacemark::LanduseCommercial;
1585  s_visualCategories[OsmTag("landuse", "construction")] = GeoDataPlacemark::LanduseConstruction;
1586  s_visualCategories[OsmTag("landuse", "farm")] = GeoDataPlacemark::LanduseFarmland;
1587  s_visualCategories[OsmTag("landuse", "farmland")] = GeoDataPlacemark::LanduseFarmland;
1588  s_visualCategories[OsmTag("landuse", "farmyard")] = GeoDataPlacemark::LanduseFarmland;
1589  s_visualCategories[OsmTag("landuse", "forest")] = GeoDataPlacemark::NaturalWood;
1590  s_visualCategories[OsmTag("landuse", "garages")] = GeoDataPlacemark::LanduseGarages;
1591  s_visualCategories[OsmTag("landuse", "grass")] = GeoDataPlacemark::LanduseGrass;
1592  s_visualCategories[OsmTag("landuse", "greenfield")] = GeoDataPlacemark::LanduseConstruction;
1593  s_visualCategories[OsmTag("landuse", "greenhouse_horticulture")] = GeoDataPlacemark::LanduseFarmland;
1594  s_visualCategories[OsmTag("landuse", "industrial")] = GeoDataPlacemark::LanduseIndustrial;
1595  s_visualCategories[OsmTag("landuse", "landfill")] = GeoDataPlacemark::LanduseLandfill;
1596  s_visualCategories[OsmTag("landuse", "meadow")] = GeoDataPlacemark::LanduseMeadow;
1597  s_visualCategories[OsmTag("landuse", "military")] = GeoDataPlacemark::LanduseMilitary;
1598  s_visualCategories[OsmTag("landuse", "orchard")] = GeoDataPlacemark::LanduseFarmland;
1599  s_visualCategories[OsmTag("landuse", "orchard")] = GeoDataPlacemark::LanduseOrchard;
1600  s_visualCategories[OsmTag("landuse", "quarry")] = GeoDataPlacemark::LanduseQuarry;
1601  s_visualCategories[OsmTag("landuse", "railway")] = GeoDataPlacemark::LanduseRailway;
1602  s_visualCategories[OsmTag("landuse", "recreation_ground")] = GeoDataPlacemark::LeisurePark;
1603  s_visualCategories[OsmTag("landuse", "reservoir")] = GeoDataPlacemark::LanduseReservoir;
1604  s_visualCategories[OsmTag("landuse", "residential")] = GeoDataPlacemark::LanduseResidential;
1605  s_visualCategories[OsmTag("landuse", "retail")] = GeoDataPlacemark::LanduseRetail;
1606  s_visualCategories[OsmTag("landuse", "village_green")] = GeoDataPlacemark::LanduseGrass;
1607  s_visualCategories[OsmTag("landuse", "vineyard")] = GeoDataPlacemark::LanduseVineyard;
1608 
1609  s_visualCategories[OsmTag("leisure", "common")] = GeoDataPlacemark::LanduseGrass;
1610  s_visualCategories[OsmTag("leisure", "garden")] = GeoDataPlacemark::LanduseGrass;
1611 
1612  s_visualCategories[OsmTag("leisure", "golf_course")] = GeoDataPlacemark::LeisureGolfCourse;
1613  s_visualCategories[OsmTag("leisure", "marina")] = GeoDataPlacemark::LeisureMarina;
1614  s_visualCategories[OsmTag("leisure", "miniature_golf")] = GeoDataPlacemark::LeisureMinigolfCourse;
1615  s_visualCategories[OsmTag("leisure", "park")] = GeoDataPlacemark::LeisurePark;
1616  s_visualCategories[OsmTag("leisure", "pitch")] = GeoDataPlacemark::LeisurePitch;
1617  s_visualCategories[OsmTag("leisure", "playground")] = GeoDataPlacemark::LeisurePlayground;
1618  s_visualCategories[OsmTag("leisure", "sports_centre")] = GeoDataPlacemark::LeisureSportsCentre;
1619  s_visualCategories[OsmTag("leisure", "stadium")] = GeoDataPlacemark::LeisureStadium;
1620  s_visualCategories[OsmTag("leisure", "swimming_pool")] = GeoDataPlacemark::LeisureSwimmingPool;
1621  s_visualCategories[OsmTag("leisure", "track")] = GeoDataPlacemark::LeisureTrack;
1622  s_visualCategories[OsmTag("leisure", "water_park")] = GeoDataPlacemark::LeisureWaterPark;
1623 
1624  s_visualCategories[OsmTag("railway", "abandoned")] = GeoDataPlacemark::RailwayAbandoned;
1625  s_visualCategories[OsmTag("railway", "construction")] = GeoDataPlacemark::RailwayConstruction;
1626  s_visualCategories[OsmTag("railway", "disused")] = GeoDataPlacemark::RailwayAbandoned;
1627  s_visualCategories[OsmTag("railway", "funicular")] = GeoDataPlacemark::RailwayFunicular;
1628  s_visualCategories[OsmTag("railway", "halt")] = GeoDataPlacemark::TransportTrainStation;
1629  s_visualCategories[OsmTag("railway", "light_rail")] = GeoDataPlacemark::RailwayLightRail;
1630  s_visualCategories[OsmTag("railway", "miniature")] = GeoDataPlacemark::RailwayMiniature;
1631  s_visualCategories[OsmTag("railway", "monorail")] = GeoDataPlacemark::RailwayMonorail;
1632  s_visualCategories[OsmTag("railway", "narrow_gauge")] = GeoDataPlacemark::RailwayNarrowGauge;
1633  s_visualCategories[OsmTag("railway", "platform")] = GeoDataPlacemark::TransportPlatform;
1634  s_visualCategories[OsmTag("railway", "preserved")] = GeoDataPlacemark::RailwayPreserved;
1635  s_visualCategories[OsmTag("railway", "rail")] = GeoDataPlacemark::RailwayRail;
1636  s_visualCategories[OsmTag("railway", "razed")] = GeoDataPlacemark::RailwayAbandoned;
1637  s_visualCategories[OsmTag("railway", "station")] = GeoDataPlacemark::TransportTrainStation;
1638  s_visualCategories[OsmTag("public_transport", "station")] = GeoDataPlacemark::TransportTrainStation;
1639  s_visualCategories[OsmTag("railway", "subway")] = GeoDataPlacemark::RailwaySubway;
1640  s_visualCategories[OsmTag("railway", "tram")] = GeoDataPlacemark::RailwayTram;
1641 
1642  s_visualCategories[OsmTag("power", "tower")] = GeoDataPlacemark::PowerTower;
1643 
1644  s_visualCategories[OsmTag("aeroway", "aerodrome")] = GeoDataPlacemark::TransportAerodrome;
1645  s_visualCategories[OsmTag("aeroway", "apron")] = GeoDataPlacemark::TransportAirportApron;
1646  s_visualCategories[OsmTag("aeroway", "gate")] = GeoDataPlacemark::TransportAirportGate;
1647  s_visualCategories[OsmTag("aeroway", "helipad")] = GeoDataPlacemark::TransportHelipad;
1648  s_visualCategories[OsmTag("aeroway", "runway")] = GeoDataPlacemark::TransportAirportRunway;
1649  s_visualCategories[OsmTag("aeroway", "taxiway")] = GeoDataPlacemark::TransportAirportTaxiway;
1650  s_visualCategories[OsmTag("aeroway", "terminal")] = GeoDataPlacemark::TransportAirportTerminal;
1651 
1652  s_visualCategories[OsmTag("piste:type", "downhill")] = GeoDataPlacemark::PisteDownhill;
1653  s_visualCategories[OsmTag("piste:type", "nordic")] = GeoDataPlacemark::PisteNordic;
1654  s_visualCategories[OsmTag("piste:type", "skitour")] = GeoDataPlacemark::PisteSkitour;
1655  s_visualCategories[OsmTag("piste:type", "sled")] = GeoDataPlacemark::PisteSled;
1656  s_visualCategories[OsmTag("piste:type", "hike")] = GeoDataPlacemark::PisteHike;
1657  s_visualCategories[OsmTag("piste:type", "sleigh")] = GeoDataPlacemark::PisteSleigh;
1658  s_visualCategories[OsmTag("piste:type", "ice_skate")] = GeoDataPlacemark::PisteIceSkate;
1659  s_visualCategories[OsmTag("piste:type", "snow_park")] = GeoDataPlacemark::PisteSnowPark;
1660  s_visualCategories[OsmTag("piste:type", "playground")] = GeoDataPlacemark::PistePlayground;
1661  s_visualCategories[OsmTag("piste:type", "ski_jump")] = GeoDataPlacemark::PisteSkiJump;
1662 
1663  s_visualCategories[OsmTag("amenity", "bicycle_parking")] = GeoDataPlacemark::TransportBicycleParking;
1664  s_visualCategories[OsmTag("amenity", "bicycle_rental")] = GeoDataPlacemark::TransportRentalBicycle;
1665  s_visualCategories[OsmTag("rental", "bicycle")] = GeoDataPlacemark::TransportRentalBicycle;
1666  s_visualCategories[OsmTag("amenity", "car_rental")] = GeoDataPlacemark::TransportRentalCar;
1667  s_visualCategories[OsmTag("rental", "car")] = GeoDataPlacemark::TransportRentalCar;
1668  s_visualCategories[OsmTag("amenity", "ski_rental")] = GeoDataPlacemark::TransportRentalSki;
1669  s_visualCategories[OsmTag("rental", "ski")] = GeoDataPlacemark::TransportRentalSki;
1670  s_visualCategories[OsmTag("amenity", "motorcycle_parking")] = GeoDataPlacemark::TransportMotorcycleParking;
1671  s_visualCategories[OsmTag("amenity", "taxi")] = GeoDataPlacemark::TransportTaxiRank;
1672  s_visualCategories[OsmTag("highway", "bus_stop")] = GeoDataPlacemark::TransportBusStop;
1673  s_visualCategories[OsmTag("highway", "speed_camera")] = GeoDataPlacemark::TransportSpeedCamera;
1674  s_visualCategories[OsmTag("public_transport", "platform")] = GeoDataPlacemark::TransportPlatform;
1675  s_visualCategories[OsmTag("railway", "subway_entrance")] = GeoDataPlacemark::TransportSubwayEntrance;
1676  s_visualCategories[OsmTag("railway", "tram_stop")] = GeoDataPlacemark::TransportTramStop;
1677 
1678  s_visualCategories[OsmTag("place", "city")] = GeoDataPlacemark::PlaceCity;
1679  s_visualCategories[OsmTag("place", "hamlet")] = GeoDataPlacemark::PlaceHamlet;
1680  s_visualCategories[OsmTag("place", "locality")] = GeoDataPlacemark::PlaceLocality;
1681  s_visualCategories[OsmTag("place", "suburb")] = GeoDataPlacemark::PlaceSuburb;
1682  s_visualCategories[OsmTag("place", "town")] = GeoDataPlacemark::PlaceTown;
1683  s_visualCategories[OsmTag("place", "village")] = GeoDataPlacemark::PlaceVillage;
1684 
1685  s_visualCategories[OsmTag("aerialway", "station")] = GeoDataPlacemark::AerialwayStation;
1686  s_visualCategories[OsmTag("aerialway", "pylon")] = GeoDataPlacemark::AerialwayPylon;
1687  s_visualCategories[OsmTag("aerialway", "cable_car")] = GeoDataPlacemark::AerialwayCableCar;
1688  s_visualCategories[OsmTag("aerialway", "gondola")] = GeoDataPlacemark::AerialwayGondola;
1689  s_visualCategories[OsmTag("aerialway", "chair_lift")] = GeoDataPlacemark::AerialwayChairLift;
1690  s_visualCategories[OsmTag("aerialway", "mixed_lift")] = GeoDataPlacemark::AerialwayMixedLift;
1691  s_visualCategories[OsmTag("aerialway", "drag_lift")] = GeoDataPlacemark::AerialwayDragLift;
1692  s_visualCategories[OsmTag("aerialway", "t-bar")] = GeoDataPlacemark::AerialwayTBar;
1693  s_visualCategories[OsmTag("aerialway", "j-bar")] = GeoDataPlacemark::AerialwayJBar;
1694  s_visualCategories[OsmTag("aerialway", "platter")] = GeoDataPlacemark::AerialwayPlatter;
1695  s_visualCategories[OsmTag("aerialway", "rope_tow")] = GeoDataPlacemark::AerialwayRopeTow;
1696  s_visualCategories[OsmTag("aerialway", "magic_carpet")] = GeoDataPlacemark::AerialwayMagicCarpet;
1697  s_visualCategories[OsmTag("aerialway", "zip_line")] = GeoDataPlacemark::AerialwayZipLine;
1698  s_visualCategories[OsmTag("aerialway", "goods")] = GeoDataPlacemark::AerialwayGoods;
1699 
1700  s_visualCategories[OsmTag("indoor", "door")] = GeoDataPlacemark::IndoorDoor;
1701  s_visualCategories[OsmTag("indoor", "wall")] = GeoDataPlacemark::IndoorWall;
1702  s_visualCategories[OsmTag("indoor", "room")] = GeoDataPlacemark::IndoorRoom;
1703 
1704  //Custom Marble OSM Tags
1705  s_visualCategories[OsmTag("marble_land", "landmass")] = GeoDataPlacemark::Landmass;
1706  s_visualCategories[OsmTag("settlement", "yes")] = GeoDataPlacemark::UrbanArea;
1707  s_visualCategories[OsmTag("marble_line", "date")] = GeoDataPlacemark::InternationalDateLine;
1708  s_visualCategories[OsmTag("marble:feature", "bathymetry")] = GeoDataPlacemark::Bathymetry;
1709 
1710  // Default for buildings
1711  for (const auto &tag: buildingTags()) {
1712  s_visualCategories[tag] = GeoDataPlacemark::Building;
1713  }
1714 }
1715 
1716 void StyleBuilder::Private::initializeMinimumZoomLevels()
1717 {
1718  if (s_defaultMinZoomLevelsInitialized) {
1719  return;
1720  }
1721 
1722  s_defaultMinZoomLevelsInitialized = true;
1723  for (int i = 0; i < GeoDataPlacemark::LastIndex; i++) {
1724  s_defaultMinZoomLevels[i] = -1;
1725  }
1726 
1727  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel10] = 8;
1728  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel11] = 8;
1729  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel1] = 0;
1730  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel2] = 1;
1731  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel3] = 1;
1732  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel4] = 2;
1733  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel5] = 4;
1734  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel6] = 5;
1735  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel7] = 5;
1736  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel8] = 7;
1737  s_defaultMinZoomLevels[GeoDataPlacemark::AdminLevel9] = 7;
1738 
1739  s_defaultMinZoomLevels[GeoDataPlacemark::HistoricArchaeologicalSite] = 16;
1740  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityBench] = 19;
1741  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityFountain] = 17;
1742  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityGraveyard] = 16;
1743  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityTelephone] = 17;
1744  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityKindergarten] = 16;
1745  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityLibrary] = 16;
1746  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityWasteBasket] = 19;
1747  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityToilets] = 17;
1748  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityTownHall] = 15;
1749  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureWaterPark] = 15;
1750  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityDrinkingWater] = 17;
1751  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityEmbassy] = 15;
1752  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityEmergencyPhone] = 17;
1753  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityMountainRescue] = 16;
1754  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCommunityCentre] = 17;
1755  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityFountain] = 17;
1756  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityNightClub] = 16;
1757  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCourtHouse] = 16;
1758  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityFireStation] = 16;
1759  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityHuntingStand] = 17;
1760  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPolice] = 16;
1761  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPostBox] = 17;
1762  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPostOffice] = 17;
1763  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityPrison] = 17;
1764  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityRecycling] = 17;
1765  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityShelter] = 17;
1766  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityChargingStation] = 17;
1767  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCarWash] = 17;
1768  s_defaultMinZoomLevels[GeoDataPlacemark::AmenitySocialFacility] = 17;
1769 
1770  s_defaultMinZoomLevels[GeoDataPlacemark::BarrierCityWall] = 15;
1771  s_defaultMinZoomLevels[GeoDataPlacemark::BarrierGate] = 17;
1772  s_defaultMinZoomLevels[GeoDataPlacemark::BarrierLiftGate] = 17;
1773  s_defaultMinZoomLevels[GeoDataPlacemark::BarrierWall] = 17;
1774 
1775  s_defaultMinZoomLevels[GeoDataPlacemark::Bathymetry] = 1;
1776 
1777  s_defaultMinZoomLevels[GeoDataPlacemark::BoundaryMaritime] = 1;
1778 
1779  s_defaultMinZoomLevels[GeoDataPlacemark::Building] = 17;
1780 
1781  s_defaultMinZoomLevels[GeoDataPlacemark::Default] = 1;
1782 
1783  s_defaultMinZoomLevels[GeoDataPlacemark::EducationCollege] = 15;
1784  s_defaultMinZoomLevels[GeoDataPlacemark::EducationSchool] = 15;
1785  s_defaultMinZoomLevels[GeoDataPlacemark::EducationUniversity] = 15;
1786 
1787  s_defaultMinZoomLevels[GeoDataPlacemark::FoodBar] = 16;
1788  s_defaultMinZoomLevels[GeoDataPlacemark::FoodBiergarten] = 16;
1789  s_defaultMinZoomLevels[GeoDataPlacemark::FoodCafe] = 16;
1790  s_defaultMinZoomLevels[GeoDataPlacemark::FoodFastFood] = 16;
1791  s_defaultMinZoomLevels[GeoDataPlacemark::FoodPub] = 16;
1792  s_defaultMinZoomLevels[GeoDataPlacemark::FoodRestaurant] = 16;
1793 
1794  s_defaultMinZoomLevels[GeoDataPlacemark::HealthHospital] = 15;
1795  s_defaultMinZoomLevels[GeoDataPlacemark::HealthPharmacy] = 17;
1796  s_defaultMinZoomLevels[GeoDataPlacemark::HealthDentist] = 17;
1797  s_defaultMinZoomLevels[GeoDataPlacemark::HealthDoctors] = 17;
1798  s_defaultMinZoomLevels[GeoDataPlacemark::HealthVeterinary] = 17;
1799 
1800  s_defaultMinZoomLevels[GeoDataPlacemark::HistoricMemorial] = 17;
1801 
1802  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayCycleway] = 16;
1803  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayFootway] = 17;
1804  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayLivingStreet] = 15;
1805  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayMotorwayLink] = 10;
1806  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayMotorway] = 6;
1807  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPath] = 13;
1808  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPedestrian] = 13;
1809  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPrimaryLink] = 10;
1810  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayPrimary] = 8;
1811  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayRaceway] = 12;
1812  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayResidential] = 14;
1813  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayRoad] = 13;
1814  s_defaultMinZoomLevels[GeoDataPlacemark::HighwaySecondaryLink] = 10;
1815  s_defaultMinZoomLevels[GeoDataPlacemark::HighwaySecondary] = 9;
1816  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayService] = 15;
1817  s_defaultMinZoomLevels[GeoDataPlacemark::HighwaySteps] = 15;
1818  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTertiaryLink] = 10;
1819  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTertiary] = 10;
1820  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrack] = 15;
1821  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrunkLink] = 10;
1822  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrunk] = 7;
1823  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayUnknown] = 16;
1824  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayUnclassified] = 16;
1825  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayTrafficSignals] = 17;
1826  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayCorridor] = 18;
1827  s_defaultMinZoomLevels[GeoDataPlacemark::HighwayElevator] = 17;
1828 
1829  s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationCamping] = 16;
1830  s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationHostel] = 16;
1831  s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationHotel] = 16;
1832  s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationMotel] = 16;
1833  s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationYouthHostel] = 16;
1834  s_defaultMinZoomLevels[GeoDataPlacemark::AccomodationGuestHouse] = 16;
1835 
1836  s_defaultMinZoomLevels[GeoDataPlacemark::InternationalDateLine] = 1;
1837 
1838  s_defaultMinZoomLevels[GeoDataPlacemark::Landmass] = 0;
1839 
1840  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseAllotments] = 11;
1841  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseBasin] = 11;
1842  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseCemetery] = 11;
1843  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseCommercial] = 13;
1844  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseConstruction] = 11;
1845  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseFarmland] = 13;
1846  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseFarmyard] = 13;
1847  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseGarages] = 11;
1848  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseGrass] = 13;
1849  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseIndustrial] = 13;
1850  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseLandfill] = 11;
1851  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseMeadow] = 13;
1852  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseMilitary] = 11;
1853  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseOrchard] = 14;
1854  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseQuarry] = 11;
1855  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseRailway] = 11;
1856  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseReservoir] = 11;
1857  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseResidential] = 11;
1858  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseRetail] = 13;
1859  s_defaultMinZoomLevels[GeoDataPlacemark::LanduseVineyard] = 14;
1860 
1861  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureGolfCourse] = 15;
1862  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureMarina] = 13;
1863  s_defaultMinZoomLevels[GeoDataPlacemark::LeisurePark] = 11;
1864  s_defaultMinZoomLevels[GeoDataPlacemark::LeisurePlayground] = 17;
1865  s_defaultMinZoomLevels[GeoDataPlacemark::LeisurePitch] = 15;
1866  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureStadium] = 13;
1867  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureSwimmingPool] = 17;
1868  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureSportsCentre] = 15;
1869  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureTrack] = 16;
1870  s_defaultMinZoomLevels[GeoDataPlacemark::LeisureMinigolfCourse] = 16;
1871 
1872  s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeBridge] = 15;
1873  s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeLighthouse] = 15;
1874  s_defaultMinZoomLevels[GeoDataPlacemark::ManmadePier] = 15;
1875  s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeWaterTower] = 15;
1876  s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeWindMill] = 15;
1877  s_defaultMinZoomLevels[GeoDataPlacemark::ManmadeCommunicationsTower] = 15;
1878 
1879  s_defaultMinZoomLevels[GeoDataPlacemark::MilitaryDangerArea] = 11;
1880 
1881  s_defaultMinZoomLevels[GeoDataPlacemark::MoneyAtm] = 16;
1882  s_defaultMinZoomLevels[GeoDataPlacemark::MoneyBank] = 16;
1883 
1884  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalBeach] = 13;
1885  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalCliff] = 15;
1886  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalGlacier] = 3;
1887  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalHeath] = 13;
1888  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalIceShelf] = 3;
1889  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalVolcano] = 13;
1890  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalPeak] = 11;
1891  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalReef] = 3;
1892  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalScrub] = 13;
1893  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalTree] = 17;
1894  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalCave] = 16;
1895  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalWater] = 3;
1896  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalWetland] = 10;
1897  s_defaultMinZoomLevels[GeoDataPlacemark::NaturalWood] = 8;
1898 
1899  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceCityNationalCapital] = 9;
1900  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceCityCapital] = 9;
1901  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceCity] = 9;
1902  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceHamlet] = 15;
1903  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceLocality] = 15;
1904  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceSuburb] = 13;
1905  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceTownNationalCapital] = 11;
1906  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceTownCapital] = 11;
1907  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceTown] = 11;
1908  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceVillageNationalCapital] = 13;
1909  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceVillageCapital] = 13;
1910  s_defaultMinZoomLevels[GeoDataPlacemark::PlaceVillage] = 13;
1911 
1912  s_defaultMinZoomLevels[GeoDataPlacemark::PowerTower] = 18;
1913 
1914  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayAbandoned] = 10;
1915  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayConstruction] = 10;
1916  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayFunicular] = 13;
1917  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayLightRail] = 12;
1918  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayMiniature] = 16;
1919  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayMonorail] = 12;
1920  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayNarrowGauge] = 6;
1921  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayPreserved] = 13;
1922  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayRail] = 6;
1923  s_defaultMinZoomLevels[GeoDataPlacemark::RailwaySubway] = 13;
1924  s_defaultMinZoomLevels[GeoDataPlacemark::RailwayTram] = 14;
1925 
1926  s_defaultMinZoomLevels[GeoDataPlacemark::Satellite] = 0;
1927 
1928  for (int shop = GeoDataPlacemark::ShopBeverages; shop <= GeoDataPlacemark::Shop; ++shop) {
1929  s_defaultMinZoomLevels[shop] = 17;
1930  }
1931  s_defaultMinZoomLevels[GeoDataPlacemark::ShopSupermarket] = 16;
1932  s_defaultMinZoomLevels[GeoDataPlacemark::ShopDepartmentStore] = 16;
1933  s_defaultMinZoomLevels[GeoDataPlacemark::ShopDoitYourself] = 16;
1934 
1935  s_defaultMinZoomLevels[GeoDataPlacemark::TourismAlpineHut] = 13;
1936  s_defaultMinZoomLevels[GeoDataPlacemark::TourismWildernessHut] = 13;
1937  s_defaultMinZoomLevels[GeoDataPlacemark::TourismAttraction] = 17;
1938  s_defaultMinZoomLevels[GeoDataPlacemark::TourismArtwork] = 17;
1939  s_defaultMinZoomLevels[GeoDataPlacemark::HistoricCastle] = 15;
1940  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityCinema] = 16;
1941  s_defaultMinZoomLevels[GeoDataPlacemark::TourismMuseum] = 16;
1942  s_defaultMinZoomLevels[GeoDataPlacemark::HistoricRuins] = 16;
1943  s_defaultMinZoomLevels[GeoDataPlacemark::AmenityTheatre] = 16;
1944  s_defaultMinZoomLevels[GeoDataPlacemark::TourismThemePark] = 15;
1945  s_defaultMinZoomLevels[GeoDataPlacemark::TourismViewPoint] = 15;
1946  s_defaultMinZoomLevels[GeoDataPlacemark::TourismZoo] = 15;
1947  s_defaultMinZoomLevels[GeoDataPlacemark::HistoricMonument] = 16;
1948  s_defaultMinZoomLevels[GeoDataPlacemark::TourismInformation] = 17;
1949  s_defaultMinZoomLevels[GeoDataPlacemark::TransportAerodrome] = 9;
1950  s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportApron] = 15;
1951  s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportRunway] = 15;
1952  s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportTaxiway] = 15;
1953  s_defaultMinZoomLevels[GeoDataPlacemark::TransportBusStation] = 15;
1954  s_defaultMinZoomLevels[GeoDataPlacemark::TransportCarShare] = 16;
1955  s_defaultMinZoomLevels[GeoDataPlacemark::TransportFuel] = 16;
1956  s_defaultMinZoomLevels[GeoDataPlacemark::TransportHelipad] = 16;
1957  s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportTerminal] = 17;
1958  s_defaultMinZoomLevels[GeoDataPlacemark::TransportAirportGate] = 17;
1959  s_defaultMinZoomLevels[GeoDataPlacemark::TransportPlatform] = 16;
1960  s_defaultMinZoomLevels[GeoDataPlacemark::TransportSpeedCamera] = 16;
1961  s_defaultMinZoomLevels[GeoDataPlacemark::TransportRentalCar] = 16;
1962  s_defaultMinZoomLevels[GeoDataPlacemark::TransportRentalBicycle] = 17;
1963  s_defaultMinZoomLevels[GeoDataPlacemark::TransportRentalSki] = 17;
1964  s_defaultMinZoomLevels[GeoDataPlacemark::TransportTaxiRank] = 16;
1965  s_defaultMinZoomLevels[GeoDataPlacemark::TransportParking] = 16;
1966  s_defaultMinZoomLevels[GeoDataPlacemark::TransportBusStop] = 16;
1967  s_defaultMinZoomLevels[GeoDataPlacemark::TransportTrainStation] = 13;
1968  s_defaultMinZoomLevels[GeoDataPlacemark::TransportTramStop] = 15;
1969  s_defaultMinZoomLevels[GeoDataPlacemark::TransportParkingSpace] = 17;
1970  s_defaultMinZoomLevels[GeoDataPlacemark::TransportBicycleParking] = 17;
1971  s_defaultMinZoomLevels[GeoDataPlacemark::TransportMotorcycleParking] = 17;
1972  s_defaultMinZoomLevels[GeoDataPlacemark::TransportSubwayEntrance] = 17;
1973 
1974  for (int religion = GeoDataPlacemark::ReligionPlaceOfWorship; religion <= GeoDataPlacemark::ReligionTaoist; ++religion) {
1975  s_defaultMinZoomLevels[religion] = 17;
1976  }
1977 
1978  s_defaultMinZoomLevels[GeoDataPlacemark::UrbanArea] = 3;
1979 
1980  s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayCanal] = 15;
1981  s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayDitch] = 17;
1982  s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayDrain] = 17;
1983  s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayStream] = 15;
1984  s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayRiver] = 3;
1985  s_defaultMinZoomLevels[GeoDataPlacemark::WaterwayWeir] = 17;
1986 
1987  s_defaultMinZoomLevels[GeoDataPlacemark::CrossingIsland] = 18;
1988  s_defaultMinZoomLevels[GeoDataPlacemark::CrossingRailway] = 18;
1989  s_defaultMinZoomLevels[GeoDataPlacemark::CrossingSignals] = 18;
1990  s_defaultMinZoomLevels[GeoDataPlacemark::CrossingZebra] = 18;
1991 
1992  s_defaultMinZoomLevels[GeoDataPlacemark::PisteDownhill] = 15;
1993  s_defaultMinZoomLevels[GeoDataPlacemark::PisteNordic] = 15;
1994  s_defaultMinZoomLevels[GeoDataPlacemark::PisteSkitour] = 15;
1995  s_defaultMinZoomLevels[GeoDataPlacemark::PisteSled] = 15;
1996  s_defaultMinZoomLevels[GeoDataPlacemark::PisteHike] = 15;
1997  s_defaultMinZoomLevels[GeoDataPlacemark::PisteSleigh] = 15;
1998  s_defaultMinZoomLevels[GeoDataPlacemark::PisteIceSkate] = 15;
1999  s_defaultMinZoomLevels[GeoDataPlacemark::PisteSnowPark] = 15;
2000  s_defaultMinZoomLevels[GeoDataPlacemark::PistePlayground] = 15;
2001  s_defaultMinZoomLevels[GeoDataPlacemark::PisteSkiJump] = 15;
2002 
2003  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayStation] = 15;
2004  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayPylon] = 16;
2005  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayCableCar] = 15;
2006  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayGondola] = 15;
2007  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayChairLift] = 15;
2008  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayMixedLift] = 15;
2009  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayDragLift] = 15;
2010  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayTBar] = 15;
2011  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayJBar] = 15;
2012  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayPlatter] = 15;
2013  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayRopeTow] = 15;
2014  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayMagicCarpet] = 15;
2015  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayZipLine] = 15;
2016  s_defaultMinZoomLevels[GeoDataPlacemark::AerialwayGoods] = 15;
2017 
2018  s_defaultMinZoomLevels[GeoDataPlacemark::IndoorDoor] = 17;
2019  s_defaultMinZoomLevels[GeoDataPlacemark::IndoorWall] = 17;
2020  s_defaultMinZoomLevels[GeoDataPlacemark::IndoorRoom] = 17;
2021 
2022  for (int i = GeoDataPlacemark::PlaceCity; i < GeoDataPlacemark::LastIndex; i++) {
2023  if (s_defaultMinZoomLevels[i] < 0) {
2024  qDebug() << "Missing default min zoom level for GeoDataPlacemark::GeoDataVisualCategory " << i;
2025  Q_ASSERT(false && "StyleBuilder::Private::initializeMinimumZoomLevels is incomplete");
2026  s_defaultMinZoomLevels[i] = 15;
2027  }
2028  }
2029 
2030 }
2031 
2032 StyleBuilder::StyleBuilder() :
2033  d(new Private)
2034 {
2035  // nothing to do
2036 }
2037 
2038 StyleBuilder::~StyleBuilder()
2039 {
2040  delete d;
2041 }
2042 
2043 QFont StyleBuilder::defaultFont() const
2044 {
2045  return d->m_defaultFont;
2046 }
2047 
2048 void StyleBuilder::setDefaultFont(const QFont& font)
2049 {
2050  d->m_defaultFont = font;
2051  reset();
2052 }
2053 
2054 QColor StyleBuilder::defaultLabelColor() const
2055 {
2056  return d->m_defaultLabelColor;
2057 }
2058 
2059 void StyleBuilder::setDefaultLabelColor(const QColor& color)
2060 {
2061  d->m_defaultLabelColor = color;
2062  reset();
2063 }
2064 
2065 GeoDataStyle::ConstPtr StyleBuilder::createStyle(const StyleParameters &parameters) const
2066 {
2067  const GeoDataPlacemark *const placemark = parameters.placemark;
2068 
2069  if (!placemark) {
2070  Q_ASSERT(false && "Must not pass a null placemark to StyleBuilder::createStyle");
2071  return GeoDataStyle::Ptr();
2072  }
2073 
2074  if (placemark->customStyle()) {
2075  return placemark->customStyle();
2076  }
2077 
2078  if (parameters.relation) {
2079  auto style = d->createRelationStyle(parameters);
2080  if (style) {
2081  return style;
2082  }
2083  }
2084 
2085  return d->createPlacemarkStyle(parameters);
2086 }
2087 
2088 GeoDataStyle::ConstPtr StyleBuilder::Private::presetStyle(GeoDataPlacemark::GeoDataVisualCategory visualCategory) const
2089 {
2090  if (!m_defaultStyleInitialized) {
2091  const_cast<StyleBuilder::Private *>(this)->initializeDefaultStyles(); // const cast due to lazy initialization
2092  }
2093 
2094  if (visualCategory != GeoDataPlacemark::None && m_defaultStyle[visualCategory]) {
2095  return m_defaultStyle[visualCategory];
2096  } else {
2097  return m_defaultStyle[GeoDataPlacemark::Default];
2098  }
2099 }
2100 
2101 
2102 QStringList StyleBuilder::renderOrder() const
2103 {
2104  static QStringList paintLayerOrder;
2105 
2106  if (paintLayerOrder.isEmpty()) {
2107  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::Landmass);
2108  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::UrbanArea);
2109  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseResidential);
2110  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseAllotments);
2111  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseBasin);
2112  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseCemetery);
2113  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseCommercial);
2114  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseConstruction);
2115  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseFarmland);
2116  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseFarmyard);
2117  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseGarages);
2118  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseIndustrial);
2119  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseLandfill);
2120  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseMeadow);
2121  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseMilitary);
2122  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseQuarry);
2123  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseRailway);
2124  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseReservoir);
2125  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseRetail);
2126  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseOrchard);
2127  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseVineyard);
2128 
2129  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::Bathymetry);
2130  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureGolfCourse);
2131  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureMinigolfCourse);
2132  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalBeach);
2133  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalWetland);
2134  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalGlacier);
2135  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalIceShelf);
2136  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalVolcano);
2137  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalCliff);
2138  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalPeak);
2139  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::MilitaryDangerArea);
2140  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisurePark);
2141  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisurePitch);
2142  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureSportsCentre);
2143  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureStadium);
2144  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalWood);
2145  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LanduseGrass);
2146  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::HighwayPedestrian);
2147  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisurePlayground);
2148  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalScrub);
2149  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureTrack);
2150  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportParking);
2151  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportParkingSpace);
2152  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::ManmadeBridge);
2153  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::BarrierCityWall);
2154 
2155  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::AmenityGraveyard);
2156 
2157  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::AmenityKindergarten);
2158  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::EducationCollege);
2159  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::EducationSchool);
2160  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::EducationUniversity);
2161  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::HealthHospital);
2162  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureSwimmingPool);
2163 
2164  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::Landmass);
2165 
2166  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::NaturalWater);
2167  for (int i = GeoDataPlacemark::WaterwayCanal; i <= GeoDataPlacemark::WaterwayStream; ++i) {
2168  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "outline");
2169  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "inline");
2170  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "label");
2171  }
2172 
2173  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::NaturalReef, "outline");
2174  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::NaturalReef, "inline");
2175  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::NaturalReef, "label");
2176  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::LeisureMarina);
2177  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::ManmadePier);
2178  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::ManmadePier, "outline");
2179  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::ManmadePier, "inline");
2180  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::ManmadePier, "label");
2181 
2182  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportAirportApron);
2183 
2184  for (int i = GeoDataPlacemark::HighwaySteps; i <= GeoDataPlacemark::HighwayMotorway; i++) {
2185  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "outline");
2186  }
2187  for (int i = GeoDataPlacemark::HighwaySteps; i <= GeoDataPlacemark::HighwayMotorway; i++) {
2188  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "inline");
2189  }
2190  for (int i = GeoDataPlacemark::RailwayRail; i <= GeoDataPlacemark::RailwayFunicular; i++) {
2191  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "outline");
2192  }
2193  for (int i = GeoDataPlacemark::RailwayRail; i <= GeoDataPlacemark::RailwayFunicular; i++) {
2194  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "inline");
2195  }
2196  // Highway labels shall appear on top of railways, hence here and not already above
2197  for (int i = GeoDataPlacemark::HighwaySteps; i <= GeoDataPlacemark::HighwayMotorway; i++) {
2198  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "label");
2199  }
2200  for (int i = GeoDataPlacemark::RailwayRail; i <= GeoDataPlacemark::RailwayFunicular; i++) {
2201  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "label");
2202  }
2203 
2204  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::TransportPlatform);
2205  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::TransportPlatform, "outline");
2206  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::TransportPlatform, "inline");
2207  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::TransportPlatform, "label");
2208 
2209  for (int i = GeoDataPlacemark::PisteDownhill; i <= GeoDataPlacemark::PisteSkiJump; ++i) {
2210  paintLayerOrder << Private::createPaintLayerItem("Polygon", GeoDataPlacemark::GeoDataVisualCategory(i));
2211  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "outline");
2212  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "inline");
2213  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "label");
2214  }
2215  for (int i = GeoDataPlacemark::AerialwayCableCar; i <= GeoDataPlacemark::AerialwayGoods; ++i) {
2216  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "outline");
2217  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "inline");
2218  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "label");
2219  }
2220 
2221  for (int i = GeoDataPlacemark::AdminLevel1; i <= GeoDataPlacemark::AdminLevel11; i++) {
2222  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "outline");
2223  }
2224  for (int i = GeoDataPlacemark::AdminLevel1; i <= GeoDataPlacemark::AdminLevel11; i++) {
2225  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "inline");
2226  }
2227  for (int i = GeoDataPlacemark::AdminLevel1; i <= GeoDataPlacemark::AdminLevel11; i++) {
2228  paintLayerOrder << Private::createPaintLayerItem("LineString", GeoDataPlacemark::GeoDataVisualCategory(i), "label");
2229  }
2230 
2231  paintLayerOrder << QStringLiteral("Polygon/Building/frame");
2232  paintLayerOrder << QStringLiteral("Polygon/Building/roof");
2233 
2234  paintLayerOrder << QStringLiteral("Photo");
2235 
2236  Q_ASSERT(QSet<QString>::fromList(paintLayerOrder).size() == paintLayerOrder.size());
2237  }
2238 
2239  return paintLayerOrder;
2240 }
2241 
2242 void StyleBuilder::reset()
2243 {
2244  d->m_defaultStyleInitialized = false;
2245 }
2246 
2247 int StyleBuilder::minimumZoomLevel(const GeoDataPlacemark &placemark) const
2248 {
2249  Q_ASSERT(Private::s_defaultMinZoomLevelsInitialized);
2250  return Private::s_defaultMinZoomLevels[placemark.visualCategory()];
2251 }
2252 
2253 int StyleBuilder::minimumZoomLevel(const GeoDataPlacemark::GeoDataVisualCategory &visualCategory)
2254 {
2255  Private::initializeMinimumZoomLevels();
2256  return Private::s_defaultMinZoomLevels[visualCategory];
2257 }
2258 
2259 qint64 StyleBuilder::popularity(const GeoDataPlacemark *placemark)
2260 {
2261  qint64 const defaultValue = 100;
2262  int const offset = 10;
2263  if (StyleBuilder::Private::s_popularities.isEmpty()) {
2264  QVector<GeoDataPlacemark::GeoDataVisualCategory> popularities;
2265  popularities << GeoDataPlacemark::PlaceCityNationalCapital;
2266  popularities << GeoDataPlacemark::PlaceTownNationalCapital;
2267  popularities << GeoDataPlacemark::PlaceCityCapital;
2268  popularities << GeoDataPlacemark::PlaceTownCapital;
2269  popularities << GeoDataPlacemark::PlaceCity;
2270  popularities << GeoDataPlacemark::PlaceTown;
2271  popularities << GeoDataPlacemark::PlaceSuburb;
2272  popularities << GeoDataPlacemark::PlaceVillageNationalCapital;
2273  popularities << GeoDataPlacemark::PlaceVillageCapital;
2274  popularities << GeoDataPlacemark::PlaceVillage;
2275  popularities << GeoDataPlacemark::PlaceHamlet;
2276  popularities << GeoDataPlacemark::PlaceLocality;
2277 
2278  popularities << GeoDataPlacemark::AmenityEmergencyPhone;
2279  popularities << GeoDataPlacemark::AmenityMountainRescue;
2280  popularities << GeoDataPlacemark::HealthHospital;
2281  popularities << GeoDataPlacemark::AmenityToilets;
2282  popularities << GeoDataPlacemark::MoneyAtm;
2283  popularities << GeoDataPlacemark::TransportSpeedCamera;
2284 
2285  popularities << GeoDataPlacemark::NaturalPeak;
2286  popularities << GeoDataPlacemark::NaturalVolcano;
2287 
2288  popularities << GeoDataPlacemark::AccomodationHotel;
2289  popularities << GeoDataPlacemark::AccomodationMotel;
2290  popularities << GeoDataPlacemark::AccomodationGuestHouse;
2291  popularities << GeoDataPlacemark::AccomodationYouthHostel;
2292  popularities << GeoDataPlacemark::AccomodationHostel;
2293  popularities << GeoDataPlacemark::AccomodationCamping;
2294 
2295  popularities << GeoDataPlacemark::HealthDentist;
2296  popularities << GeoDataPlacemark::HealthDoctors;
2297  popularities << GeoDataPlacemark::HealthPharmacy;
2298  popularities << GeoDataPlacemark::HealthVeterinary;
2299 
2300  popularities << GeoDataPlacemark::AmenityLibrary;
2301  popularities << GeoDataPlacemark::EducationCollege;
2302  popularities << GeoDataPlacemark::EducationSchool;
2303  popularities << GeoDataPlacemark::EducationUniversity;
2304 
2305  popularities << GeoDataPlacemark::FoodBar;
2306  popularities << GeoDataPlacemark::FoodBiergarten;
2307  popularities << GeoDataPlacemark::FoodCafe;
2308  popularities << GeoDataPlacemark::FoodFastFood;
2309  popularities << GeoDataPlacemark::FoodPub;
2310  popularities << GeoDataPlacemark::FoodRestaurant;
2311 
2312  popularities << GeoDataPlacemark::MoneyBank;
2313 
2314  popularities << GeoDataPlacemark::HistoricArchaeologicalSite;
2315  popularities << GeoDataPlacemark::AmenityCarWash;
2316  popularities << GeoDataPlacemark::AmenityEmbassy;
2317  popularities << GeoDataPlacemark::LeisureWaterPark;
2318  popularities << GeoDataPlacemark::AmenityCommunityCentre;
2319  popularities << GeoDataPlacemark::AmenityFountain;
2320  popularities << GeoDataPlacemark::AmenityNightClub;
2321  popularities << GeoDataPlacemark::AmenityCourtHouse;
2322  popularities << GeoDataPlacemark::AmenityFireStation;
2323  popularities << GeoDataPlacemark::AmenityShelter;
2324  popularities << GeoDataPlacemark::AmenityHuntingStand;
2325  popularities << GeoDataPlacemark::AmenityPolice;
2326  popularities << GeoDataPlacemark::AmenityPostBox;
2327  popularities << GeoDataPlacemark::AmenityPostOffice;
2328  popularities << GeoDataPlacemark::AmenityPrison;
2329  popularities << GeoDataPlacemark::AmenityRecycling;
2330  popularities << GeoDataPlacemark::AmenitySocialFacility;
2331  popularities << GeoDataPlacemark::AmenityTelephone;
2332  popularities << GeoDataPlacemark::AmenityTownHall;
2333  popularities << GeoDataPlacemark::AmenityDrinkingWater;
2334  popularities << GeoDataPlacemark::AmenityGraveyard;
2335 
2336  popularities << GeoDataPlacemark::ManmadeBridge;
2337  popularities << GeoDataPlacemark::ManmadeLighthouse;
2338  popularities << GeoDataPlacemark::ManmadePier;
2339  popularities << GeoDataPlacemark::ManmadeWaterTower;
2340  popularities << GeoDataPlacemark::ManmadeWindMill;
2341  popularities << GeoDataPlacemark::ManmadeCommunicationsTower;
2342 
2343  popularities << GeoDataPlacemark::TourismAttraction;
2344  popularities << GeoDataPlacemark::TourismArtwork;
2345  popularities << GeoDataPlacemark::HistoricCastle;
2346  popularities << GeoDataPlacemark::AmenityCinema;
2347  popularities << GeoDataPlacemark::TourismInformation;
2348  popularities << GeoDataPlacemark::HistoricMonument;
2349  popularities << GeoDataPlacemark::TourismMuseum;
2350  popularities << GeoDataPlacemark::HistoricRuins;
2351  popularities << GeoDataPlacemark::AmenityTheatre;
2352  popularities << GeoDataPlacemark::TourismThemePark;
2353  popularities << GeoDataPlacemark::TourismViewPoint;
2354  popularities << GeoDataPlacemark::TourismZoo;
2355  popularities << GeoDataPlacemark::TourismAlpineHut;
2356  popularities << GeoDataPlacemark::TourismWildernessHut;
2357 
2358  popularities << GeoDataPlacemark::HistoricMemorial;
2359 
2360  popularities << GeoDataPlacemark::TransportAerodrome;
2361  popularities << GeoDataPlacemark::TransportHelipad;
2362  popularities << GeoDataPlacemark::TransportAirportTerminal;
2363  popularities << GeoDataPlacemark::TransportBusStation;
2364  popularities << GeoDataPlacemark::TransportBusStop;
2365  popularities << GeoDataPlacemark::TransportCarShare;
2366  popularities << GeoDataPlacemark::TransportFuel;
2367  popularities << GeoDataPlacemark::TransportParking;
2368  popularities << GeoDataPlacemark::TransportParkingSpace;
2369  popularities << GeoDataPlacemark::TransportPlatform;
2370  popularities << GeoDataPlacemark::TransportRentalBicycle;
2371  popularities << GeoDataPlacemark::TransportRentalCar;
2372  popularities << GeoDataPlacemark::TransportRentalSki;
2373  popularities << GeoDataPlacemark::TransportTaxiRank;
2374  popularities << GeoDataPlacemark::TransportTrainStation;
2375  popularities << GeoDataPlacemark::TransportTramStop;
2376  popularities << GeoDataPlacemark::TransportBicycleParking;
2377  popularities << GeoDataPlacemark::TransportMotorcycleParking;
2378  popularities << GeoDataPlacemark::TransportSubwayEntrance;
2379  popularities << GeoDataPlacemark::AerialwayStation;
2380 
2381  popularities << GeoDataPlacemark::ShopBeverages;
2382  popularities << GeoDataPlacemark::ShopHifi;
2383  popularities << GeoDataPlacemark::ShopSupermarket;
2384  popularities << GeoDataPlacemark::ShopAlcohol;
2385  popularities << GeoDataPlacemark::ShopBakery;
2386  popularities << GeoDataPlacemark::ShopButcher;
2387  popularities << GeoDataPlacemark::ShopConfectionery;
2388  popularities << GeoDataPlacemark::ShopConvenience;
2389  popularities << GeoDataPlacemark::ShopGreengrocer;
2390  popularities << GeoDataPlacemark::ShopSeafood;
2391  popularities << GeoDataPlacemark::ShopDepartmentStore;
2392  popularities << GeoDataPlacemark::ShopKiosk;
2393  popularities << GeoDataPlacemark::ShopBag;
2394  popularities << GeoDataPlacemark::ShopClothes;
2395  popularities << GeoDataPlacemark::ShopFashion;
2396  popularities << GeoDataPlacemark::ShopJewelry;
2397  popularities << GeoDataPlacemark::ShopShoes;
2398  popularities << GeoDataPlacemark::ShopVarietyStore;
2399  popularities << GeoDataPlacemark::ShopBeauty;
2400  popularities << GeoDataPlacemark::ShopChemist;
2401  popularities << GeoDataPlacemark::ShopCosmetics;
2402  popularities << GeoDataPlacemark::ShopHairdresser;
2403  popularities << GeoDataPlacemark::ShopOptician;
2404  popularities << GeoDataPlacemark::ShopPerfumery;
2405  popularities << GeoDataPlacemark::ShopDoitYourself;
2406  popularities << GeoDataPlacemark::ShopFlorist;
2407  popularities << GeoDataPlacemark::ShopHardware;
2408  popularities << GeoDataPlacemark::ShopFurniture;
2409  popularities << GeoDataPlacemark::ShopElectronics;
2410  popularities << GeoDataPlacemark::ShopMobilePhone;
2411  popularities << GeoDataPlacemark::ShopBicycle;
2412  popularities << GeoDataPlacemark::ShopCar;
2413  popularities << GeoDataPlacemark::ShopCarRepair;
2414  popularities << GeoDataPlacemark::ShopCarParts;
2415  popularities << GeoDataPlacemark::ShopMotorcycle;
2416  popularities << GeoDataPlacemark::ShopOutdoor;
2417  popularities << GeoDataPlacemark::ShopSports;
2418  popularities << GeoDataPlacemark::ShopCopy;
2419  popularities << GeoDataPlacemark::ShopArt;
2420  popularities << GeoDataPlacemark::ShopMusicalInstrument;
2421  popularities << GeoDataPlacemark::ShopPhoto;
2422  popularities << GeoDataPlacemark::ShopBook;
2423  popularities << GeoDataPlacemark::ShopGift;
2424  popularities << GeoDataPlacemark::ShopStationery;
2425  popularities << GeoDataPlacemark::ShopLaundry;
2426  popularities << GeoDataPlacemark::ShopPet;
2427  popularities << GeoDataPlacemark::ShopToys;
2428  popularities << GeoDataPlacemark::ShopTravelAgency;
2429  popularities << GeoDataPlacemark::ShopDeli;
2430  popularities << GeoDataPlacemark::ShopTobacco;
2431  popularities << GeoDataPlacemark::ShopTea;
2432  popularities << GeoDataPlacemark::ShopComputer;
2433  popularities << GeoDataPlacemark::ShopGardenCentre;
2434  popularities << GeoDataPlacemark::Shop;
2435 
2436  popularities << GeoDataPlacemark::LeisureGolfCourse;
2437  popularities << GeoDataPlacemark::LeisureMinigolfCourse;
2438  popularities << GeoDataPlacemark::LeisurePark;
2439  popularities << GeoDataPlacemark::LeisurePlayground;
2440  popularities << GeoDataPlacemark::LeisurePitch;
2441  popularities << GeoDataPlacemark::LeisureSportsCentre;
2442  popularities << GeoDataPlacemark::LeisureStadium;
2443  popularities << GeoDataPlacemark::LeisureTrack;
2444  popularities << GeoDataPlacemark::LeisureSwimmingPool;
2445 
2446  popularities << GeoDataPlacemark::CrossingIsland;
2447  popularities << GeoDataPlacemark::CrossingRailway;
2448  popularities << GeoDataPlacemark::CrossingSignals;
2449  popularities << GeoDataPlacemark::CrossingZebra;
2450  popularities << GeoDataPlacemark::HighwayTrafficSignals;
2451  popularities << GeoDataPlacemark::HighwayElevator;
2452 
2453  popularities << GeoDataPlacemark::BarrierGate;
2454  popularities << GeoDataPlacemark::BarrierLiftGate;
2455  popularities << GeoDataPlacemark::AmenityBench;
2456  popularities << GeoDataPlacemark::NaturalTree;
2457  popularities << GeoDataPlacemark::NaturalCave;
2458  popularities << GeoDataPlacemark::AmenityWasteBasket;
2459  popularities << GeoDataPlacemark::AerialwayPylon;
2460  popularities << GeoDataPlacemark::PowerTower;
2461 
2462  int value = defaultValue + offset * popularities.size();
2463  for (auto popularity : popularities) {
2464  StyleBuilder::Private::s_popularities[popularity] = value;
2465  value -= offset;
2466  }
2467  }
2468 
2469  bool const isPrivate = placemark->osmData().containsTag(QStringLiteral("access"), QStringLiteral("private"));
2470  int const base = defaultValue + (isPrivate ? 0 : offset * StyleBuilder::Private::s_popularities.size());
2471  return base + StyleBuilder::Private::s_popularities.value(placemark->visualCategory(), defaultValue);
2472 }
2473 
2474 int StyleBuilder::maximumZoomLevel() const
2475 {
2476  return d->m_maximumZoomLevel;
2477 }
2478 
2479 QString StyleBuilder::visualCategoryName(GeoDataPlacemark::GeoDataVisualCategory category)
2480 {
2481  static QHash<GeoDataPlacemark::GeoDataVisualCategory, QString> visualCategoryNames;
2482 
2483  if (visualCategoryNames.isEmpty()) {
2484  visualCategoryNames[GeoDataPlacemark::None] = "None";
2485  visualCategoryNames[GeoDataPlacemark::Default] = "Default";
2486  visualCategoryNames[GeoDataPlacemark::Unknown] = "Unknown";
2487  visualCategoryNames[GeoDataPlacemark::SmallCity] = "SmallCity";
2488  visualCategoryNames[GeoDataPlacemark::SmallCountyCapital] = "SmallCountyCapital";
2489  visualCategoryNames[GeoDataPlacemark::SmallStateCapital] = "SmallStateCapital";
2490  visualCategoryNames[GeoDataPlacemark::SmallNationCapital] = "SmallNationCapital";
2491  visualCategoryNames[GeoDataPlacemark::MediumCity] = "MediumCity";
2492  visualCategoryNames[GeoDataPlacemark::MediumCountyCapital] = "MediumCountyCapital";
2493  visualCategoryNames[GeoDataPlacemark::MediumStateCapital] = "MediumStateCapital";
2494  visualCategoryNames[GeoDataPlacemark::MediumNationCapital] = "MediumNationCapital";
2495  visualCategoryNames[GeoDataPlacemark::BigCity] = "BigCity";
2496  visualCategoryNames[GeoDataPlacemark::BigCountyCapital] = "BigCountyCapital";
2497  visualCategoryNames[GeoDataPlacemark::BigStateCapital] = "BigStateCapital";
2498  visualCategoryNames[GeoDataPlacemark::BigNationCapital] = "BigNationCapital";
2499  visualCategoryNames[GeoDataPlacemark::LargeCity] = "LargeCity";
2500  visualCategoryNames[GeoDataPlacemark::LargeCountyCapital] = "LargeCountyCapital";
2501  visualCategoryNames[GeoDataPlacemark::LargeStateCapital] = "LargeStateCapital";
2502  visualCategoryNames[GeoDataPlacemark::LargeNationCapital] = "LargeNationCapital";
2503  visualCategoryNames[GeoDataPlacemark::Nation] = "Nation";
2504  visualCategoryNames[GeoDataPlacemark::PlaceCity] = "PlaceCity";
2505  visualCategoryNames[GeoDataPlacemark::PlaceCityCapital] = "PlaceCityCapital";
2506  visualCategoryNames[GeoDataPlacemark::PlaceCityNationalCapital] = "PlaceCityNationalCapital";
2507  visualCategoryNames[GeoDataPlacemark::PlaceSuburb] = "PlaceSuburb";
2508  visualCategoryNames[GeoDataPlacemark::PlaceHamlet] = "PlaceHamlet";
2509  visualCategoryNames[GeoDataPlacemark::PlaceLocality] = "PlaceLocality";
2510  visualCategoryNames[GeoDataPlacemark::PlaceTown] = "PlaceTown";
2511  visualCategoryNames[GeoDataPlacemark::PlaceTownCapital] = "PlaceTownCapital";
2512  visualCategoryNames[GeoDataPlacemark::PlaceTownNationalCapital] = "PlaceTownNationalCapital";
2513  visualCategoryNames[GeoDataPlacemark::PlaceVillage] = "PlaceVillage";
2514  visualCategoryNames[GeoDataPlacemark::PlaceVillageCapital] = "PlaceVillageCapital";
2515  visualCategoryNames[GeoDataPlacemark::PlaceVillageNationalCapital] = "PlaceVillageNationalCapital";
2516  visualCategoryNames[GeoDataPlacemark::Mountain] = "Mountain";
2517  visualCategoryNames[GeoDataPlacemark::Volcano] = "Volcano";
2518  visualCategoryNames[GeoDataPlacemark::Mons] = "Mons";
2519  visualCategoryNames[GeoDataPlacemark::Valley] = "Valley";
2520  visualCategoryNames[GeoDataPlacemark::Continent] = "Continent";
2521  visualCategoryNames[GeoDataPlacemark::Ocean] = "Ocean";
2522  visualCategoryNames[GeoDataPlacemark::OtherTerrain] = "OtherTerrain";
2523  visualCategoryNames[GeoDataPlacemark::Crater] = "Crater";
2524  visualCategoryNames[GeoDataPlacemark::Mare] = "Mare";
2525  visualCategoryNames[GeoDataPlacemark::GeographicPole] = "GeographicPole";
2526  visualCategoryNames[GeoDataPlacemark::MagneticPole] = "MagneticPole";
2527  visualCategoryNames[GeoDataPlacemark::ShipWreck] = "ShipWreck";
2528  visualCategoryNames[GeoDataPlacemark::AirPort] = "AirPort";
2529  visualCategoryNames[GeoDataPlacemark::Observatory] = "Observatory";
2530  visualCategoryNames[GeoDataPlacemark::MilitaryDangerArea] = "MilitaryDangerArea";
2531  visualCategoryNames[GeoDataPlacemark::OsmSite] = "OsmSite";
2532  visualCategoryNames[GeoDataPlacemark::Coordinate] = "Coordinate";
2533  visualCategoryNames[GeoDataPlacemark::MannedLandingSite] = "MannedLandingSite";
2534  visualCategoryNames[GeoDataPlacemark::RoboticRover] = "RoboticRover";
2535  visualCategoryNames[GeoDataPlacemark::UnmannedSoftLandingSite] = "UnmannedSoftLandingSite";
2536  visualCategoryNames[GeoDataPlacemark::UnmannedHardLandingSite] = "UnmannedHardLandingSite";
2537  visualCategoryNames[GeoDataPlacemark::Bookmark] = "Bookmark";
2538  visualCategoryNames[GeoDataPlacemark::NaturalWater] = "NaturalWater";
2539  visualCategoryNames[GeoDataPlacemark::NaturalReef] = "NaturalReef";
2540  visualCategoryNames[GeoDataPlacemark::NaturalWood] = "NaturalWood";
2541  visualCategoryNames[GeoDataPlacemark::NaturalBeach] = "NaturalBeach";
2542  visualCategoryNames[GeoDataPlacemark::NaturalWetland] = "NaturalWetland";
2543  visualCategoryNames[GeoDataPlacemark::NaturalGlacier] = "NaturalGlacier";
2544  visualCategoryNames[GeoDataPlacemark::NaturalIceShelf] = "NaturalIceShelf";
2545  visualCategoryNames[GeoDataPlacemark::NaturalScrub] = "NaturalScrub";
2546  visualCategoryNames[GeoDataPlacemark::NaturalCliff] = "NaturalCliff";
2547  visualCategoryNames[GeoDataPlacemark::NaturalHeath] = "NaturalHeath";
2548  visualCategoryNames[GeoDataPlacemark::HighwayTrafficSignals] = "HighwayTrafficSignals";
2549  visualCategoryNames[GeoDataPlacemark::HighwaySteps] = "HighwaySteps";
2550  visualCategoryNames[GeoDataPlacemark::HighwayUnknown] = "HighwayUnknown";
2551  visualCategoryNames[GeoDataPlacemark::HighwayPath] = "HighwayPath";
2552  visualCategoryNames[GeoDataPlacemark::HighwayFootway] = "HighwayFootway";
2553  visualCategoryNames[GeoDataPlacemark::HighwayTrack] = "HighwayTrack";
2554  visualCategoryNames[GeoDataPlacemark::HighwayPedestrian] = "HighwayPedestrian";
2555  visualCategoryNames[GeoDataPlacemark::HighwayCycleway] = "HighwayCycleway";
2556  visualCategoryNames[GeoDataPlacemark::HighwayService] = "HighwayService";
2557  visualCategoryNames[GeoDataPlacemark::HighwayRoad] = "HighwayRoad";
2558  visualCategoryNames[GeoDataPlacemark::HighwayResidential] = "HighwayResidential";
2559  visualCategoryNames[GeoDataPlacemark::HighwayLivingStreet] = "HighwayLivingStreet";
2560  visualCategoryNames[GeoDataPlacemark::HighwayUnclassified] = "HighwayUnclassified";
2561  visualCategoryNames[GeoDataPlacemark::HighwayTertiaryLink] = "HighwayTertiaryLink";
2562  visualCategoryNames[GeoDataPlacemark::HighwayTertiary] = "HighwayTertiary";
2563  visualCategoryNames[GeoDataPlacemark::HighwaySecondaryLink] = "HighwaySecondaryLink";
2564  visualCategoryNames[GeoDataPlacemark::HighwaySecondary] = "HighwaySecondary";
2565  visualCategoryNames[GeoDataPlacemark::HighwayPrimaryLink] = "HighwayPrimaryLink";
2566  visualCategoryNames[GeoDataPlacemark::HighwayPrimary] = "HighwayPrimary";
2567  visualCategoryNames[GeoDataPlacemark::HighwayRaceway] = "HighwayRaceway";
2568  visualCategoryNames[GeoDataPlacemark::HighwayTrunkLink] = "HighwayTrunkLink";
2569  visualCategoryNames[GeoDataPlacemark::HighwayTrunk] = "HighwayTrunk";
2570  visualCategoryNames[GeoDataPlacemark::HighwayMotorwayLink] = "HighwayMotorwayLink";
2571  visualCategoryNames[GeoDataPlacemark::HighwayMotorway] = "HighwayMotorway";
2572  visualCategoryNames[GeoDataPlacemark::HighwayCorridor] = "HighwayCorridor";
2573  visualCategoryNames[GeoDataPlacemark::HighwayElevator] = "HighwayElevator";
2574  visualCategoryNames[GeoDataPlacemark::Building] = "Building";
2575  visualCategoryNames[GeoDataPlacemark::AccomodationCamping] = "AccomodationCamping";
2576  visualCategoryNames[GeoDataPlacemark::AccomodationHostel] = "AccomodationHostel";
2577  visualCategoryNames[GeoDataPlacemark::AccomodationHotel] = "AccomodationHotel";
2578  visualCategoryNames[GeoDataPlacemark::AccomodationMotel] = "AccomodationMotel";
2579  visualCategoryNames[GeoDataPlacemark::AccomodationYouthHostel] = "AccomodationYouthHostel";
2580  visualCategoryNames[GeoDataPlacemark::AccomodationGuestHouse] = "AccomodationGuestHouse";
2581  visualCategoryNames[GeoDataPlacemark::AmenityLibrary] = "AmenityLibrary";
2582  visualCategoryNames[GeoDataPlacemark::AmenityKindergarten] = "AmenityKindergarten";
2583  visualCategoryNames[GeoDataPlacemark::EducationCollege] = "EducationCollege";
2584  visualCategoryNames[GeoDataPlacemark::EducationSchool] = "EducationSchool";
2585  visualCategoryNames[GeoDataPlacemark::EducationUniversity] = "EducationUniversity";
2586  visualCategoryNames[GeoDataPlacemark::FoodBar] = "FoodBar";
2587  visualCategoryNames[GeoDataPlacemark::FoodBiergarten] = "FoodBiergarten";
2588  visualCategoryNames[GeoDataPlacemark::FoodCafe] = "FoodCafe";
2589  visualCategoryNames[GeoDataPlacemark::FoodFastFood] = "FoodFastFood";
2590  visualCategoryNames[GeoDataPlacemark::FoodPub] = "FoodPub";
2591  visualCategoryNames[GeoDataPlacemark::FoodRestaurant] = "FoodRestaurant";
2592  visualCategoryNames[GeoDataPlacemark::HealthDentist] = "HealthDentist";
2593  visualCategoryNames[GeoDataPlacemark::HealthDoctors] = "HealthDoctors";
2594  visualCategoryNames[GeoDataPlacemark::HealthHospital] = "HealthHospital";
2595  visualCategoryNames[GeoDataPlacemark::HealthPharmacy] = "HealthPharmacy";
2596  visualCategoryNames[GeoDataPlacemark::HealthVeterinary] = "HealthVeterinary";
2597  visualCategoryNames[GeoDataPlacemark::MoneyAtm] = "MoneyAtm";
2598  visualCategoryNames[GeoDataPlacemark::MoneyBank] = "MoneyBank";
2599  visualCategoryNames[GeoDataPlacemark::AmenityEmbassy] = "AmenityEmbassy";
2600  visualCategoryNames[GeoDataPlacemark::AmenityEmergencyPhone] = "AmenityEmergencyPhone";
2601  visualCategoryNames[GeoDataPlacemark::AmenityMountainRescue] = "AmenityMountainRescue";
2602  visualCategoryNames[GeoDataPlacemark::LeisureWaterPark] = "LeisureWaterPark";
2603  visualCategoryNames[GeoDataPlacemark::AmenityCommunityCentre] = "AmenityCommunityCentre";
2604  visualCategoryNames[GeoDataPlacemark::AmenityFountain] = "AmenityFountain";
2605  visualCategoryNames[GeoDataPlacemark::AmenityNightClub] = "AmenityNightClub";
2606  visualCategoryNames[GeoDataPlacemark::AmenityBench] = "AmenityBench";
2607  visualCategoryNames[GeoDataPlacemark::AmenityCourtHouse] = "AmenityCourtHouse";
2608  visualCategoryNames[GeoDataPlacemark::AmenityFireStation] = "AmenityFireStation";
2609  visualCategoryNames[GeoDataPlacemark::AmenityHuntingStand] = "AmenityHuntingStand";
2610  visualCategoryNames[GeoDataPlacemark::AmenityPolice] = "AmenityPolice";
2611  visualCategoryNames[GeoDataPlacemark::AmenityPostBox] = "AmenityPostBox";
2612  visualCategoryNames[GeoDataPlacemark::AmenityPostOffice] = "AmenityPostOffice";
2613  visualCategoryNames[GeoDataPlacemark::AmenityPrison] = "AmenityPrison";
2614  visualCategoryNames[GeoDataPlacemark::AmenityRecycling] = "AmenityRecycling";
2615  visualCategoryNames[GeoDataPlacemark::AmenityShelter] = "AmenityShelter";
2616  visualCategoryNames[GeoDataPlacemark::AmenityTelephone] = "AmenityTelephone";
2617  visualCategoryNames[GeoDataPlacemark::AmenityToilets] = "AmenityToilets";
2618  visualCategoryNames[GeoDataPlacemark::AmenityTownHall] = "AmenityTownHall";
2619  visualCategoryNames[GeoDataPlacemark::AmenityWasteBasket] = "AmenityWasteBasket";
2620  visualCategoryNames[GeoDataPlacemark::AmenityDrinkingWater] = "AmenityDrinkingWater";
2621  visualCategoryNames[GeoDataPlacemark::AmenityGraveyard] = "AmenityGraveyard";
2622  visualCategoryNames[GeoDataPlacemark::AmenityChargingStation] = "ChargingStation";
2623  visualCategoryNames[GeoDataPlacemark::AmenityCarWash] = "CarWash";
2624  visualCategoryNames[GeoDataPlacemark::AmenitySocialFacility] = "SocialFacility";
2625  visualCategoryNames[GeoDataPlacemark::BarrierCityWall] = "BarrierCityWall";
2626  visualCategoryNames[GeoDataPlacemark::BarrierGate] = "BarrierGate";
2627  visualCategoryNames[GeoDataPlacemark::BarrierLiftGate] = "BarrierLiftGate";
2628  visualCategoryNames[GeoDataPlacemark::BarrierWall] = "BarrierWall";
2629  visualCategoryNames[GeoDataPlacemark::NaturalVolcano] = "NaturalVolcano";
2630  visualCategoryNames[GeoDataPlacemark::NaturalPeak] = "NaturalPeak";
2631  visualCategoryNames[GeoDataPlacemark::NaturalTree] = "NaturalTree";
2632  visualCategoryNames[GeoDataPlacemark::NaturalCave] = "NaturalCave";
2633  visualCategoryNames[GeoDataPlacemark::ShopBeverages] = "ShopBeverages";
2634  visualCategoryNames[GeoDataPlacemark::ShopHifi] = "ShopHifi";
2635  visualCategoryNames[GeoDataPlacemark::ShopSupermarket] = "ShopSupermarket";
2636  visualCategoryNames[GeoDataPlacemark::ShopAlcohol] = "ShopAlcohol";
2637  visualCategoryNames[GeoDataPlacemark::ShopBakery] = "ShopBakery";
2638  visualCategoryNames[GeoDataPlacemark::ShopButcher] = "ShopButcher";
2639  visualCategoryNames[GeoDataPlacemark::ShopConfectionery] = "ShopConfectionery";
2640  visualCategoryNames[GeoDataPlacemark::ShopConvenience] = "ShopConvenience";
2641  visualCategoryNames[GeoDataPlacemark::ShopGreengrocer] = "ShopGreengrocer";
2642  visualCategoryNames[GeoDataPlacemark::ShopSeafood] = "ShopSeafood";
2643  visualCategoryNames[GeoDataPlacemark::ShopDepartmentStore] = "ShopDepartmentStore";
2644  visualCategoryNames[GeoDataPlacemark::ShopKiosk] = "ShopKiosk";
2645  visualCategoryNames[GeoDataPlacemark::ShopBag] = "ShopBag";
2646  visualCategoryNames[GeoDataPlacemark::ShopClothes] = "ShopClothes";
2647  visualCategoryNames[GeoDataPlacemark::ShopFashion] = "ShopFashion";
2648  visualCategoryNames[GeoDataPlacemark::ShopJewelry] = "ShopJewelry";
2649  visualCategoryNames[GeoDataPlacemark::ShopShoes] = "ShopShoes";
2650  visualCategoryNames[GeoDataPlacemark::ShopVarietyStore] = "ShopVarietyStore";
2651  visualCategoryNames[GeoDataPlacemark::ShopBeauty] = "ShopBeauty";
2652  visualCategoryNames[GeoDataPlacemark::ShopChemist] = "ShopChemist";
2653  visualCategoryNames[GeoDataPlacemark::ShopCosmetics] = "ShopCosmetics";
2654  visualCategoryNames[GeoDataPlacemark::ShopHairdresser] = "ShopHairdresser";
2655  visualCategoryNames[GeoDataPlacemark::ShopOptician] = "ShopOptician";
2656  visualCategoryNames[GeoDataPlacemark::ShopPerfumery] = "ShopPerfumery";
2657  visualCategoryNames[GeoDataPlacemark::ShopDoitYourself] = "ShopDoitYourself";
2658  visualCategoryNames[GeoDataPlacemark::ShopFlorist] = "ShopFlorist";
2659  visualCategoryNames[GeoDataPlacemark::ShopHardware] = "ShopHardware";
2660  visualCategoryNames[GeoDataPlacemark::ShopFurniture] = "ShopFurniture";
2661  visualCategoryNames[GeoDataPlacemark::ShopElectronics] = "ShopElectronics";
2662  visualCategoryNames[GeoDataPlacemark::ShopMobilePhone] = "ShopMobilePhone";
2663  visualCategoryNames[GeoDataPlacemark::ShopBicycle] = "ShopBicycle";
2664  visualCategoryNames[GeoDataPlacemark::ShopCar] = "ShopCar";
2665  visualCategoryNames[GeoDataPlacemark::ShopCarRepair] = "ShopCarRepair";
2666  visualCategoryNames[GeoDataPlacemark::ShopCarParts] = "ShopCarParts";
2667  visualCategoryNames[GeoDataPlacemark::ShopMotorcycle] = "ShopMotorcycle";
2668  visualCategoryNames[GeoDataPlacemark::ShopOutdoor] = "ShopOutdoor";
2669  visualCategoryNames[GeoDataPlacemark::ShopSports] = "ShopSports";
2670  visualCategoryNames[GeoDataPlacemark::ShopCopy] = "ShopCopy";
2671  visualCategoryNames[GeoDataPlacemark::ShopArt] = "ShopArt";
2672  visualCategoryNames[GeoDataPlacemark::ShopMusicalInstrument] = "ShopMusicalInstrument";
2673  visualCategoryNames[GeoDataPlacemark::ShopPhoto] = "ShopPhoto";
2674  visualCategoryNames[GeoDataPlacemark::ShopBook] = "ShopBook";
2675  visualCategoryNames[GeoDataPlacemark::ShopGift] = "ShopGift";
2676  visualCategoryNames[GeoDataPlacemark::ShopStationery] = "ShopStationery";
2677  visualCategoryNames[GeoDataPlacemark::ShopLaundry] = "ShopLaundry";
2678  visualCategoryNames[GeoDataPlacemark::ShopPet] = "ShopPet";
2679  visualCategoryNames[GeoDataPlacemark::ShopToys] = "ShopToys";
2680  visualCategoryNames[GeoDataPlacemark::ShopTravelAgency] = "ShopTravelAgency";
2681  visualCategoryNames[GeoDataPlacemark::ShopDeli] = "ShopDeli";
2682  visualCategoryNames[GeoDataPlacemark::ShopTobacco] = "ShopTobacco";
2683  visualCategoryNames[GeoDataPlacemark::ShopTea] = "ShopTea";
2684  visualCategoryNames[GeoDataPlacemark::ShopComputer] = "ShopComputer";
2685  visualCategoryNames[GeoDataPlacemark::ShopGardenCentre] = "ShopGardenCentre";
2686  visualCategoryNames[GeoDataPlacemark::Shop] = "Shop";
2687  visualCategoryNames[GeoDataPlacemark::ManmadeBridge] = "ManmadeBridge";
2688  visualCategoryNames[GeoDataPlacemark::ManmadeLighthouse] = "ManmadeLighthouse";
2689  visualCategoryNames[GeoDataPlacemark::ManmadePier] = "ManmadePier";
2690  visualCategoryNames[GeoDataPlacemark::ManmadeWaterTower] = "ManmadeWaterTower";
2691  visualCategoryNames[GeoDataPlacemark::ManmadeWindMill] = "ManmadeWindMill";
2692  visualCategoryNames[GeoDataPlacemark::ManmadeCommunicationsTower] = "ManmadeCommunicationsTower";
2693  visualCategoryNames[GeoDataPlacemark::TourismAttraction] = "TouristAttraction";
2694  visualCategoryNames[GeoDataPlacemark::TourismArtwork] = "TouristArtwork";
2695  visualCategoryNames[GeoDataPlacemark::HistoricArchaeologicalSite] = "HistoricArchaeologicalSite";
2696  visualCategoryNames[GeoDataPlacemark::HistoricCastle] = "HistoricCastle";
2697  visualCategoryNames[GeoDataPlacemark::HistoricMemorial] = "HistoricMemorial";
2698  visualCategoryNames[GeoDataPlacemark::HistoricMonument] = "HistoricMonument";
2699  visualCategoryNames[GeoDataPlacemark::AmenityCinema] = "TouristCinema";
2700  visualCategoryNames[GeoDataPlacemark::TourismInformation] = "TouristInformation";
2701  visualCategoryNames[GeoDataPlacemark::TourismMuseum] = "TouristMuseum";
2702  visualCategoryNames[GeoDataPlacemark::HistoricRuins] = "TouristRuin";
2703  visualCategoryNames[GeoDataPlacemark::AmenityTheatre] = "TouristTheatre";
2704  visualCategoryNames[GeoDataPlacemark::TourismThemePark] = "TouristThemePark";
2705  visualCategoryNames[GeoDataPlacemark::TourismViewPoint] = "TouristViewPoint";
2706  visualCategoryNames[GeoDataPlacemark::TourismZoo] = "TouristZoo";
2707  visualCategoryNames[GeoDataPlacemark::TourismAlpineHut] = "TouristAlpineHut";
2708  visualCategoryNames[GeoDataPlacemark::TourismWildernessHut] = "TouristWildernessHut";
2709  visualCategoryNames[GeoDataPlacemark::TransportAerodrome] = "TransportAerodrome";
2710  visualCategoryNames[GeoDataPlacemark::TransportHelipad] = "TransportHelipad";
2711  visualCategoryNames[GeoDataPlacemark::TransportAirportTerminal] = "TransportAirportTerminal";
2712  visualCategoryNames[GeoDataPlacemark::TransportAirportGate] = "TransportAirportGate";
2713  visualCategoryNames[GeoDataPlacemark::TransportAirportRunway] = "TransportAirportRunway";
2714  visualCategoryNames[GeoDataPlacemark::TransportAirportTaxiway] = "TransportAirportTaxiway";
2715  visualCategoryNames[GeoDataPlacemark::TransportAirportApron] = "TransportAirportApron";
2716  visualCategoryNames[GeoDataPlacemark::TransportBusStation] = "TransportBusStation";
2717  visualCategoryNames[GeoDataPlacemark::TransportBusStop] = "TransportBusStop";
2718  visualCategoryNames[GeoDataPlacemark::TransportCarShare] = "TransportCarShare";
2719  visualCategoryNames[GeoDataPlacemark::TransportFuel] = "TransportFuel";
2720  visualCategoryNames[GeoDataPlacemark::TransportParking] = "TransportParking";
2721  visualCategoryNames[GeoDataPlacemark::TransportParkingSpace] = "TransportParkingSpace";
2722  visualCategoryNames[GeoDataPlacemark::TransportPlatform] = "TransportPlatform";
2723  visualCategoryNames[GeoDataPlacemark::TransportRentalBicycle] = "TransportRentalBicycle";
2724  visualCategoryNames[GeoDataPlacemark::TransportRentalCar] = "TransportRentalCar";
2725  visualCategoryNames[GeoDataPlacemark::TransportRentalSki] = "TransportRentalSki";
2726  visualCategoryNames[GeoDataPlacemark::TransportTaxiRank] = "TransportTaxiRank";
2727  visualCategoryNames[GeoDataPlacemark::TransportTrainStation] = "TransportTrainStation";
2728  visualCategoryNames[GeoDataPlacemark::TransportTramStop] = "TransportTramStop";
2729  visualCategoryNames[GeoDataPlacemark::TransportSpeedCamera] = "TransportSpeedCamera";
2730  visualCategoryNames[GeoDataPlacemark::TransportBicycleParking] = "TransportBicycleParking";
2731  visualCategoryNames[GeoDataPlacemark::TransportMotorcycleParking] = "TransportMotorcycleParking";
2732  visualCategoryNames[GeoDataPlacemark::TransportSubwayEntrance] = "TransportSubwayEntrance";
2733  visualCategoryNames[GeoDataPlacemark::ReligionPlaceOfWorship] = "ReligionPlaceOfWorship";
2734  visualCategoryNames[GeoDataPlacemark::ReligionBahai] = "ReligionBahai";
2735  visualCategoryNames[GeoDataPlacemark::ReligionBuddhist] = "ReligionBuddhist";
2736  visualCategoryNames[GeoDataPlacemark::ReligionChristian] = "ReligionChristian";
2737  visualCategoryNames[GeoDataPlacemark::ReligionMuslim] = "ReligionMuslim";
2738  visualCategoryNames[GeoDataPlacemark::ReligionHindu] = "ReligionHindu";
2739  visualCategoryNames[GeoDataPlacemark::ReligionJain] = "ReligionJain";
2740  visualCategoryNames[GeoDataPlacemark::ReligionJewish] = "ReligionJewish";
2741  visualCategoryNames[GeoDataPlacemark::ReligionShinto] = "ReligionShinto";
2742  visualCategoryNames[GeoDataPlacemark::ReligionSikh] = "ReligionSikh";
2743  visualCategoryNames[GeoDataPlacemark::ReligionTaoist] = "ReligionTaoist";
2744  visualCategoryNames[GeoDataPlacemark::LeisureGolfCourse] = "LeisureGolfCourse";
2745  visualCategoryNames[GeoDataPlacemark::LeisureMarina] = "LeisureMarina";
2746  visualCategoryNames[GeoDataPlacemark::LeisurePark] = "LeisurePark";
2747  visualCategoryNames[GeoDataPlacemark::LeisurePlayground] = "LeisurePlayground";
2748  visualCategoryNames[GeoDataPlacemark::LeisurePitch] = "LeisurePitch";
2749  visualCategoryNames[GeoDataPlacemark::LeisureSportsCentre] = "LeisureSportsCentre";
2750  visualCategoryNames[GeoDataPlacemark::LeisureStadium] = "LeisureStadium";
2751  visualCategoryNames[GeoDataPlacemark::LeisureTrack] = "LeisureTrack";
2752  visualCategoryNames[GeoDataPlacemark::LeisureSwimmingPool] = "LeisureSwimmingPool";
2753  visualCategoryNames[GeoDataPlacemark::LeisureMinigolfCourse] = "LeisureMinigolfCourse";
2754  visualCategoryNames[GeoDataPlacemark::LanduseAllotments] = "LanduseAllotments";
2755  visualCategoryNames[GeoDataPlacemark::LanduseBasin] = "LanduseBasin";
2756  visualCategoryNames[GeoDataPlacemark::LanduseCemetery] = "LanduseCemetery";
2757  visualCategoryNames[GeoDataPlacemark::LanduseCommercial] = "LanduseCommercial";
2758  visualCategoryNames[GeoDataPlacemark::LanduseConstruction] = "LanduseConstruction";
2759  visualCategoryNames[GeoDataPlacemark::LanduseFarmland] = "LanduseFarmland";
2760  visualCategoryNames[GeoDataPlacemark::LanduseFarmyard] = "LanduseFarmyard";
2761  visualCategoryNames[GeoDataPlacemark::LanduseGarages] = "LanduseGarages";
2762  visualCategoryNames[GeoDataPlacemark::LanduseGrass] = "LanduseGrass";
2763  visualCategoryNames[GeoDataPlacemark::LanduseIndustrial] = "LanduseIndustrial";
2764  visualCategoryNames[GeoDataPlacemark::LanduseLandfill] = "LanduseLandfill";
2765  visualCategoryNames[GeoDataPlacemark::LanduseMeadow] = "LanduseMeadow";
2766  visualCategoryNames[GeoDataPlacemark::LanduseMilitary] = "LanduseMilitary";
2767  visualCategoryNames[GeoDataPlacemark::LanduseQuarry] = "LanduseQuarry";
2768  visualCategoryNames[GeoDataPlacemark::LanduseRailway] = "LanduseRailway";
2769  visualCategoryNames[GeoDataPlacemark::LanduseReservoir] = "LanduseReservoir";
2770  visualCategoryNames[GeoDataPlacemark::LanduseResidential] = "LanduseResidential";
2771  visualCategoryNames[GeoDataPlacemark::LanduseRetail] = "LanduseRetail";
2772  visualCategoryNames[GeoDataPlacemark::LanduseOrchard] = "LanduseOrchard";
2773  visualCategoryNames[GeoDataPlacemark::LanduseVineyard] = "LanduseVineyard";
2774  visualCategoryNames[GeoDataPlacemark::RailwayRail] = "RailwayRail";
2775  visualCategoryNames[GeoDataPlacemark::RailwayNarrowGauge] = "RailwayNarrowGauge";
2776  visualCategoryNames[GeoDataPlacemark::RailwayTram] = "RailwayTram";
2777  visualCategoryNames[GeoDataPlacemark::RailwayLightRail] = "RailwayLightRail";
2778  visualCategoryNames[GeoDataPlacemark::RailwayAbandoned] = "RailwayAbandoned";
2779  visualCategoryNames[GeoDataPlacemark::RailwaySubway] = "RailwaySubway";
2780  visualCategoryNames[GeoDataPlacemark::RailwayPreserved] = "RailwayPreserved";
2781  visualCategoryNames[GeoDataPlacemark::RailwayMiniature] = "RailwayMiniature";
2782  visualCategoryNames[GeoDataPlacemark::RailwayConstruction] = "RailwayConstruction";
2783  visualCategoryNames[GeoDataPlacemark::RailwayMonorail] = "RailwayMonorail";
2784  visualCategoryNames[GeoDataPlacemark::RailwayFunicular] = "RailwayFunicular";
2785  visualCategoryNames[GeoDataPlacemark::PowerTower] = "PowerTower";
2786  visualCategoryNames[GeoDataPlacemark::AerialwayStation] = "AerialwayStation";
2787  visualCategoryNames[GeoDataPlacemark::AerialwayPylon] = "AerialwayPylon";
2788  visualCategoryNames[GeoDataPlacemark::AerialwayCableCar] = "AerialwayCableCar";
2789  visualCategoryNames[GeoDataPlacemark::AerialwayGondola] = "AerialwayGondola";
2790  visualCategoryNames[GeoDataPlacemark::AerialwayChairLift] = "AerialwayChairLift";
2791  visualCategoryNames[GeoDataPlacemark::AerialwayMixedLift] = "AerialwayMixedLift";
2792  visualCategoryNames[GeoDataPlacemark::AerialwayDragLift] = "AerialwayDragLift";
2793  visualCategoryNames[GeoDataPlacemark::AerialwayTBar] = "AerialwayTBar";
2794  visualCategoryNames[GeoDataPlacemark::AerialwayJBar] = "AerialwayJBar";
2795  visualCategoryNames[GeoDataPlacemark::AerialwayPlatter] = "AerialwayPlatter";
2796  visualCategoryNames[GeoDataPlacemark::AerialwayRopeTow] = "AerialwayRopeTow";
2797  visualCategoryNames[GeoDataPlacemark::AerialwayMagicCarpet] = "AerialwayMagicCarpet";
2798  visualCategoryNames[GeoDataPlacemark::AerialwayZipLine] = "AerialwayZipLine";
2799  visualCategoryNames[GeoDataPlacemark::AerialwayGoods] = "AerialwayGoods";
2800  visualCategoryNames[GeoDataPlacemark::PisteDownhill] = "PisteDownhill";
2801  visualCategoryNames[GeoDataPlacemark::PisteNordic] = "PisteNordic";
2802  visualCategoryNames[GeoDataPlacemark::PisteSkitour] = "PisteSkitour";
2803  visualCategoryNames[GeoDataPlacemark::PisteSled] = "PisteSled";
2804  visualCategoryNames[GeoDataPlacemark::PisteHike] = "PisteHike";
2805  visualCategoryNames[GeoDataPlacemark::PisteSleigh] = "PisteSleigh";
2806  visualCategoryNames[GeoDataPlacemark::PisteIceSkate] = "PisteIceSkate";
2807  visualCategoryNames[GeoDataPlacemark::PisteSnowPark] = "PisteSnowPark";
2808  visualCategoryNames[GeoDataPlacemark::PistePlayground] = "PistePlayground";
2809  visualCategoryNames[GeoDataPlacemark::PisteSkiJump] = "PisteSkiJump";
2810  visualCategoryNames[GeoDataPlacemark::Satellite] = "Satellite";
2811  visualCategoryNames[GeoDataPlacemark::Landmass] = "Landmass";
2812  visualCategoryNames[GeoDataPlacemark::UrbanArea] = "UrbanArea";
2813  visualCategoryNames[GeoDataPlacemark::InternationalDateLine] = "InternationalDateLine";
2814  visualCategoryNames[GeoDataPlacemark::Bathymetry] = "Bathymetry";
2815  visualCategoryNames[GeoDataPlacemark::AdminLevel1] = "AdminLevel1";
2816  visualCategoryNames[GeoDataPlacemark::AdminLevel2] = "AdminLevel2";
2817  visualCategoryNames[GeoDataPlacemark::AdminLevel3] = "AdminLevel3";
2818  visualCategoryNames[GeoDataPlacemark::AdminLevel4] = "AdminLevel4";
2819  visualCategoryNames[GeoDataPlacemark::AdminLevel5] = "AdminLevel5";
2820  visualCategoryNames[GeoDataPlacemark::AdminLevel6] = "AdminLevel6";
2821  visualCategoryNames[GeoDataPlacemark::AdminLevel7] = "AdminLevel7";
2822  visualCategoryNames[GeoDataPlacemark::AdminLevel8] = "AdminLevel8";
2823  visualCategoryNames[GeoDataPlacemark::AdminLevel9] = "AdminLevel9";
2824  visualCategoryNames[GeoDataPlacemark::AdminLevel10] = "AdminLevel10";
2825  visualCategoryNames[GeoDataPlacemark::AdminLevel11] = "AdminLevel11";
2826  visualCategoryNames[GeoDataPlacemark::BoundaryMaritime] = "BoundaryMaritime";
2827  visualCategoryNames[GeoDataPlacemark::WaterwayCanal] = "WaterwayCanal";
2828  visualCategoryNames[GeoDataPlacemark::WaterwayDitch] = "WaterwayDitch";
2829  visualCategoryNames[GeoDataPlacemark::WaterwayDrain] = "WaterwayDrain";
2830  visualCategoryNames[GeoDataPlacemark::WaterwayStream] = "WaterwayStream";
2831  visualCategoryNames[GeoDataPlacemark::WaterwayRiver] = "WaterwayRiver";
2832  visualCategoryNames[GeoDataPlacemark::WaterwayWeir] = "WaterwayWeir";
2833  visualCategoryNames[GeoDataPlacemark::CrossingIsland] = "CrossingIsland";
2834  visualCategoryNames[GeoDataPlacemark::CrossingRailway] = "CrossingRailway";
2835  visualCategoryNames[GeoDataPlacemark::CrossingSignals] = "CrossingSignals";
2836  visualCategoryNames[GeoDataPlacemark::CrossingZebra] = "CrossingZebra";
2837  visualCategoryNames[GeoDataPlacemark::IndoorDoor] = "IndoorDoor";
2838  visualCategoryNames[GeoDataPlacemark::IndoorWall] = "IndoorWall";
2839  visualCategoryNames[GeoDataPlacemark::IndoorRoom] = "IndoorRoom";
2840  visualCategoryNames[GeoDataPlacemark::LastIndex] = "LastIndex";
2841  }
2842 
2843  Q_ASSERT(visualCategoryNames.contains(category));
2844  return visualCategoryNames[category];
2845 }
2846 
2847 QHash<StyleBuilder::OsmTag, GeoDataPlacemark::GeoDataVisualCategory> StyleBuilder::osmTagMapping()
2848 {
2849  Private::initializeOsmVisualCategories();
2850  return Private::s_visualCategories;
2851 }
2852 
2853 QStringList StyleBuilder::shopValues()
2854 {
2855  // from https://taginfo.openstreetmap.org/keys/building#values
2856  static const QStringList osmShopValues = QStringList()
2857  << "cheese" << "chocolate" << "coffee" << "dairy" << "farm"
2858  << "pasta" << "pastry" << "wine" << "general" << "mall"
2859  << "baby_goods" << "boutique" << "fabric" << "leather" << "tailor" << "watches"
2860  << "charity" << "second_hand" << "erotic" << "hearing_aids" << "herbalist" << "massage"
2861  << "medical_supply" << "tattoo" << "bathroom_furnishing" << "electrical" << "energy" << "furnace"
2862  << "garden_furniture" << "gas" << "glaziery" << "houseware" << "locksmith"
2863  << "paint" << "trade" << "antiques" << "bed" << "candles" << "carpet"
2864  << "curtain" << "interior_decoration" << "kitchen" << "lamps" << "window_blind"
2865  << "radiotechnics" << "vacuum_cleaner" << "fishing" << "free_flying" << "hunting" << "outdoor"
2866  << "scuba_diving" << "sports" << "tyres" << "swimming_pool" << "art" << "craft"
2867  << "frame" << "games" << "model" << "music" << "trophy" << "video"
2868  << "video_games" << "anime" << "ticket" << "copyshop" << "dry_cleaning" << "e-cigarette"
2869  << "funeral_directors" << "money_lender" << "pawnbroker" << "pyrotechnics" << "religion" << "storage_rental"
2870  << "weapons" << "user defined";
2871 
2872  return osmShopValues;
2873 }
2874 
2875 QSet<StyleBuilder::OsmTag> StyleBuilder::buildingTags()
2876 {
2877  static const QString building = QStringLiteral("building");
2878  // from https://taginfo.openstreetmap.org/keys/building#values
2879  static const QSet<OsmTag> osmBuildingTags = QSet<OsmTag>()
2880  << OsmTag(building, "yes")
2881  << OsmTag(building, "house")
2882  << OsmTag(building, "residential")
2883  << OsmTag(building, "garage")
2884  << OsmTag(building, "apartments")
2885  << OsmTag(building, "hut")
2886  << OsmTag(building, "industrial")
2887  << OsmTag(building, "detached")
2888  << OsmTag(building, "roof")
2889  << OsmTag(building, "garages")
2890  << OsmTag(building, "commercial")
2891  << OsmTag(building, "terrace")
2892  << OsmTag(building, "shed")
2893  << OsmTag(building, "school")
2894  << OsmTag(building, "retail")
2895  << OsmTag(building, "farm_auxiliary")
2896  << OsmTag(building, "church")
2897  << OsmTag(building, "cathedral")
2898  << OsmTag(building, "greenhouse")
2899  << OsmTag(building, "barn")
2900  << OsmTag(building, "service")
2901  << OsmTag(building, "manufacture")
2902  << OsmTag(building, "construction")
2903  << OsmTag(building, "cabin")
2904  << OsmTag(building, "farm")
2905  << OsmTag(building, "warehouse")
2906  << OsmTag(building, "House")
2907  << OsmTag(building, "office")
2908  << OsmTag(building, "civic")
2909  << OsmTag(building, "Residential")
2910  << OsmTag(building, "hangar")
2911  << OsmTag(building, "public")
2912  << OsmTag(building, "university")
2913  << OsmTag(building, "hospital")
2914  << OsmTag(building, "chapel")
2915  << OsmTag(building, "hotel")
2916  << OsmTag(building, "train_station")
2917  << OsmTag(building, "dormitory")
2918  << OsmTag(building, "kindergarten")
2919  << OsmTag(building, "stable")
2920  << OsmTag(building, "storage_tank")
2921  << OsmTag(building, "shop")
2922  << OsmTag(building, "college")
2923  << OsmTag(building, "supermarket")
2924  << OsmTag(building, "factory")
2925  << OsmTag(building, "bungalow")
2926  << OsmTag(building, "tower")
2927  << OsmTag(building, "silo")
2928  << OsmTag(building, "storage")
2929  << OsmTag(building, "station")
2930  << OsmTag(building, "education")
2931  << OsmTag(building, "carport")
2932  << OsmTag(building, "houseboat")
2933  << OsmTag(building, "castle")
2934  << OsmTag(building, "social_facility")
2935  << OsmTag(building, "water_tower")
2936  << OsmTag(building, "container")
2937  << OsmTag(building, "exhibition_hall")
2938  << OsmTag(building, "monastery")
2939  << OsmTag(building, "bunker")
2940  << OsmTag(building, "shelter")
2941  << OsmTag("building:part", "yes")
2942  << OsmTag("building:part", "antenna");
2943 
2944  return osmBuildingTags;
2945 }
2946 
2947 GeoDataPlacemark::GeoDataVisualCategory StyleBuilder::determineVisualCategory(const OsmPlacemarkData &osmData)
2948 {
2949  QString const yes(QStringLiteral("yes"));
2950  if (osmData.containsTagKey(QStringLiteral("area:highway")) || // Not supported yet
2951  osmData.containsTag(QStringLiteral("boundary"), QStringLiteral("protected_area")) || // Not relevant for the default map
2952  osmData.containsTag(QStringLiteral("boundary"), QStringLiteral("postal_code")) ||
2953  osmData.containsTag(QStringLiteral("boundary"), QStringLiteral("aerial_views")) || // Created by OSM editor(s) application for digitalization
2954  osmData.containsTagKey(QStringLiteral("closed:highway")) ||
2955  osmData.containsTagKey(QStringLiteral("abandoned:highway")) ||
2956  osmData.containsTagKey(QStringLiteral("abandoned:natural")) ||
2957  osmData.containsTagKey(QStringLiteral("abandoned:building")) ||
2958  osmData.containsTagKey(QStringLiteral("abandoned:leisure")) ||
2959  osmData.containsTagKey(QStringLiteral("disused:highway")) ||
2960  osmData.containsTag(QStringLiteral("highway"), QStringLiteral("razed")) ||
2961  osmData.containsTag(QStringLiteral("piste:abandoned"), yes)) {
2962  return GeoDataPlacemark::None;
2963  }
2964 
2965  if (osmData.containsTag(QStringLiteral("building"), yes)) {
2966  return GeoDataPlacemark::Building;
2967  }
2968 
2969  if (osmData.containsTag(QStringLiteral("historic"), QStringLiteral("castle")) && osmData.containsTag(QStringLiteral("castle_type"), QStringLiteral("kremlin"))) {
2970  return GeoDataPlacemark::None;
2971  }
2972 
2973  if (osmData.containsTag(QStringLiteral("natural"), QStringLiteral("glacier")) && osmData.containsTag(QStringLiteral("glacier:type"), QStringLiteral("shelf"))) {
2974  return GeoDataPlacemark::NaturalIceShelf;
2975  }
2976 
2977  if (osmData.containsTag(QStringLiteral("highway"), QStringLiteral("crossing"))) {
2978  QStringList const crossings = osmData.tagValue(QStringLiteral("crossing")).split(';');
2979  QString const crossingRef = osmData.tagValue(QStringLiteral("crossing_ref"));
2980  if (crossingRef == QStringLiteral("zebra") ||
2981  crossingRef == QStringLiteral("tiger") ||
2982  crossings.contains(QStringLiteral("zebra")) ||
2983  crossings.contains(QStringLiteral("tiger"))) {
2984  return GeoDataPlacemark::CrossingZebra;
2985  } else if (crossingRef == QStringLiteral("toucan") ||
2986  crossingRef == QStringLiteral("pelican") ||
2987  crossings.contains(QStringLiteral("traffic_signals")) ||
2988  crossings.contains(QStringLiteral("toucan")) ||
2989  crossings.contains(QStringLiteral("pelican"))) {
2990  return GeoDataPlacemark::CrossingSignals;
2991  } else if (crossings.contains(QStringLiteral("island"))) {
2992  return GeoDataPlacemark::CrossingIsland;
2993  }
2994  }
2995  if (osmData.containsTag(QStringLiteral("railway"), QStringLiteral("crossing")) ||
2996  osmData.containsTag(QStringLiteral("railway"), QStringLiteral("level_crossing"))) {
2997  return GeoDataPlacemark::CrossingRailway;
2998  }
2999 
3000  Private::initializeOsmVisualCategories();
3001 
3002  auto const pisteType = osmData.tagValue(QStringLiteral("piste:type"));
3003  if (!pisteType.isEmpty()) {
3004  auto const tag = OsmTag(QStringLiteral("piste:type"), pisteType);
3005  auto category = Private::s_visualCategories.value(tag, GeoDataPlacemark::None);
3006  if (category != GeoDataPlacemark::None) {
3007  return category;
3008  }
3009  }
3010 
3011  QString const capital(QStringLiteral("capital"));
3012  QString const admin_level(QStringLiteral("admin_level"));
3013  // National capitals have admin_level=2
3014  // More at https://wiki.openstreetmap.org/wiki/Key:capital#Using_relations_for_capitals
3015  QString const national_level(QStringLiteral("2"));
3016 
3017  for (auto iter = osmData.tagsBegin(), end = osmData.tagsEnd(); iter != end; ++iter) {
3018  const auto tag = OsmTag(iter.key(), iter.value());
3019  GeoDataPlacemark::GeoDataVisualCategory category = Private::s_visualCategories.value(tag, GeoDataPlacemark::None);
3020  if (category != GeoDataPlacemark::None) {
3021  if (category == GeoDataPlacemark::PlaceCity && osmData.containsTag(admin_level, national_level)) {
3022  category = GeoDataPlacemark::PlaceCityNationalCapital;
3023  } else if (category == GeoDataPlacemark::PlaceCity && osmData.containsTag(capital, yes)) {
3024  category = GeoDataPlacemark::PlaceCityCapital;
3025  } else if (category == GeoDataPlacemark::PlaceTown && osmData.containsTag(admin_level, national_level)) {
3026  category = GeoDataPlacemark::PlaceTownNationalCapital;
3027  } else if (category == GeoDataPlacemark::PlaceTown && osmData.containsTag(capital, yes)) {
3028  category = GeoDataPlacemark::PlaceTownCapital;
3029  } else if (category == GeoDataPlacemark::PlaceVillage && osmData.containsTag(admin_level, national_level)) {
3030  category = GeoDataPlacemark::PlaceVillageNationalCapital;
3031  } else if (category == GeoDataPlacemark::PlaceVillage && osmData.containsTag(capital, yes)) {
3032  category = GeoDataPlacemark::PlaceVillageCapital;
3033  }
3034  }
3035 
3036  if (category != GeoDataPlacemark::None) {
3037  return category;
3038  }
3039  }
3040 
3041  return GeoDataPlacemark::None;
3042 }
3043 
3044 StyleParameters::StyleParameters(const GeoDataPlacemark *placemark_, int tileLevel_) :
3045  placemark(placemark_),
3046  tileLevel(tileLevel_),
3047  relation(nullptr)
3048 {
3049  // nothing to do
3050 }
3051 
3052 }
Marble::StyleBuilder::setDefaultLabelColor
void setDefaultLabelColor(const QColor &color)
Definition: StyleBuilder.cpp:2059
Marble::GeoDataPlacemark::CrossingZebra
Definition: GeoDataPlacemark.h:497
Marble::GeoDataPlacemark::HighwayUnclassified
Definition: GeoDataPlacemark.h:199
Marble::GeoDataRelation::RouteRoad
Definition: GeoDataRelation.h:27
Marble::GeoDataPlacemark::NaturalScrub
Definition: GeoDataPlacemark.h:179
Marble::GeoDataPlacemark::IndoorDoor
Definition: GeoDataPlacemark.h:515
Marble::GeoDataPlacemark::Crater
Definition: GeoDataPlacemark.h:128
Marble::StyleBuilder::defaultLabelColor
QColor defaultLabelColor() const
Definition: StyleBuilder.cpp:2054
Marble::GeoDataPlacemark::BigCity
Definition: GeoDataPlacemark.h:108
Marble::GeoDataPlacemark::PisteDownhill
Definition: GeoDataPlacemark.h:476
Marble::GeoDataRelation::RouteTrain
Definition: GeoDataRelation.h:30
Marble::GeoDataPlacemark::LargeStateCapital
Definition: GeoDataPlacemark.h:114
Marble::GeoDataPlacemark::LanduseGarages
Definition: GeoDataPlacemark.h:429
Marble::GeoDataPlacemark::Shop
Definition: GeoDataPlacemark.h:343
Marble::GeoDataPlacemark::HighwayElevator
Definition: GeoDataPlacemark.h:184
QFont::setPointSize
void setPointSize(int pointSize)
Marble::GeoDataPlacemark::AmenityShelter
Definition: GeoDataPlacemark.h:266
Marble::GeoDataPlacemark::ShopTravelAgency
Definition: GeoDataPlacemark.h:337
Marble::GeoDataRelation::RouteSkitour
Definition: GeoDataRelation.h:43
Marble::GeoDataPlacemark::ShopComputer
Definition: GeoDataPlacemark.h:341
Marble::GeoDataPlacemark::TourismViewPoint
Definition: GeoDataPlacemark.h:358
Marble::GeoDataPlacemark::RailwayAbandoned
Definition: GeoDataPlacemark.h:447
QColor::darker
QColor darker(int factor) const
Marble::GeoDataPlacemark::TransportBusStop
Definition: GeoDataPlacemark.h:379
Marble::StyleParameters::relation
const GeoDataRelation * relation
Definition: StyleBuilder.h:36
Marble::GeoDataFeature::customStyle
QSharedPointer< const GeoDataStyle > customStyle() const
Return the style assigned to the placemark with setStyle (can be 0)
Definition: GeoDataFeature.cpp:430
Marble::GeoDataRelation::RouteDetour
Definition: GeoDataRelation.h:28
Marble::GeoDataPlacemark::TransportTramStop
Definition: GeoDataPlacemark.h:390
Marble::GeoDataPlacemark::AmenityLibrary
Definition: GeoDataPlacemark.h:248
Marble::GeoDataPlacemark::OtherTerrain
Definition: GeoDataPlacemark.h:125
Marble::GeoDataPlacemark::AerialwayPlatter
Definition: GeoDataPlacemark.h:469
Marble::GeoDataRelation::RouteBicycle
Definition: GeoDataRelation.h:35
Marble::GeoDataPlacemark::AmenityEmergencyPhone
Definition: GeoDataPlacemark.h:251
Marble::GeoDataPlacemark::ShopPhoto
Definition: GeoDataPlacemark.h:330
Marble::GeoDataPlacemark::PisteSled
Definition: GeoDataPlacemark.h:479
Marble::GeoDataPlacemark::HighwayTrack
Definition: GeoDataPlacemark.h:191
Marble::OsmPlacemarkData
This class is used to encapsulate the osm data fields kept within a placemark's extendedData.
Definition: OsmPlacemarkData.h:50
Marble::GeoDataPlacemark::AmenityChargingStation
Definition: GeoDataPlacemark.h:274
Marble::GeoDataPlacemark::NaturalWetland
Definition: GeoDataPlacemark.h:176
Marble::GeoDataPlacemark::TransportBusStation
Definition: GeoDataPlacemark.h:378
Marble::GeoDataPlacemark::SmallCountyCapital
Definition: GeoDataPlacemark.h:101
Marble::GeoDataPlacemark::HealthVeterinary
Definition: GeoDataPlacemark.h:241
Marble::GeoDataPlacemark::WaterwayRiver
Definition: GeoDataPlacemark.h:491
Marble::GeoDataPlacemark::TransportPlatform
Definition: GeoDataPlacemark.h:384
Marble::GeoDataPlacemark::TransportBicycleParking
Definition: GeoDataPlacemark.h:391
Marble::GeoDataPlacemark::CrossingRailway
Definition: GeoDataPlacemark.h:498
Marble::GeoDataPlacemark::ShopDoitYourself
Definition: GeoDataPlacemark.h:314
Marble::GeoDataPlacemark::HighwayTrafficSignals
Definition: GeoDataPlacemark.h:183
Marble::GeoDataPlacemark::ShopGift
Definition: GeoDataPlacemark.h:332
Marble::GeoDataPlacemark::AmenityEmbassy
Definition: GeoDataPlacemark.h:250
Marble::GeoDataRelation::RouteSkiDownhill
Definition: GeoDataRelation.h:41
Marble::MarbleDirs::path
static QString path(const QString &relativePath)
Definition: MarbleDirs.cpp:55
Marble::GeoDataPlacemark::Landmass
Definition: GeoDataPlacemark.h:520
Marble::GeoDataPlacemark::ShopOptician
Definition: GeoDataPlacemark.h:312
Marble::GeoDataPlacemark::HighwayTertiary
Definition: GeoDataPlacemark.h:201
Marble::OsmPlacemarkData::containsTagKey
bool containsTagKey(const QString &key) const
containsTagKey returns true if the tag hash contains an entry with the key as key ...
Definition: OsmPlacemarkData.cpp:137
Marble::GeoDataPlacemark::NaturalGlacier
Definition: GeoDataPlacemark.h:177
Marble::StyleBuilder::buildingTags
static QSet< OsmTag > buildingTags()
Definition: StyleBuilder.cpp:2875
GeoDataIconStyle.h
Marble::GeoDataPlacemark::NaturalIceShelf
Definition: GeoDataPlacemark.h:178
Marble::GeoDataPlacemark::ManmadeWaterTower
Definition: GeoDataPlacemark.h:348
Marble::GeoDataPlacemark::ShopArt
Definition: GeoDataPlacemark.h:328
Marble::GeoDataPlacemark::HealthDoctors
Definition: GeoDataPlacemark.h:238
Marble::GeoDataPlacemark::HighwaySecondary
Definition: GeoDataPlacemark.h:203
Marble::GeoDataPlacemark::ShopLaundry
Definition: GeoDataPlacemark.h:334
Marble::GeoDataPlacemark::ReligionJewish
Definition: GeoDataPlacemark.h:404
Marble::GeoDataPlacemark::ManmadeWindMill
Definition: GeoDataPlacemark.h:349
Marble::GeoDataRelation::RouteSled
Definition: GeoDataRelation.h:44
GeoDataPolygon.h
Marble::GeoDataPlacemark::ReligionShinto
Definition: GeoDataPlacemark.h:405
Marble::GeoDataPlacemark::MediumStateCapital
Definition: GeoDataPlacemark.h:106
Marble::GeoDataPlacemark::LanduseCommercial
Definition: GeoDataPlacemark.h:425
Marble::GeoDataPlacemark::MannedLandingSite
Definition: GeoDataPlacemark.h:146
Marble::GeoDataPlacemark::FoodBiergarten
Definition: GeoDataPlacemark.h:230
Marble::GeoDataPlacemark::MoneyAtm
Definition: GeoDataPlacemark.h:244
Marble::GeoDataPlacemark::SmallNationCapital
Definition: GeoDataPlacemark.h:103
Marble::GeoDataPlacemark::TransportAerodrome
Definition: GeoDataPlacemark.h:371
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
Marble::GeoDataPlacemark::FoodRestaurant
Definition: GeoDataPlacemark.h:234
Marble::GeoDataPlacemark::LeisureMarina
Definition: GeoDataPlacemark.h:411
Marble::GeoDataPlacemark::LeisureWaterPark
Definition: GeoDataPlacemark.h:412
QFont
Marble::GeoDataPlacemark::HighwayPath
Definition: GeoDataPlacemark.h:189
Marble::defaultSize
static const int defaultSize
Definition: GeoDataLabelStyle.cpp:25
Marble::GeoDataPlacemark::ShopPerfumery
Definition: GeoDataPlacemark.h:313
Marble::GeoDataPlacemark::TransportRentalBicycle
Definition: GeoDataPlacemark.h:385
Marble::GeoDataPlacemark::TransportAirportTerminal
Definition: GeoDataPlacemark.h:373
Marble::GeoDataPlacemark::ReligionChristian
Definition: GeoDataPlacemark.h:400
Marble::GeoDataPlacemark::TransportTaxiRank
Definition: GeoDataPlacemark.h:388
Marble::GeoDataPlacemark::PisteSleigh
Definition: GeoDataPlacemark.h:481
Marble::GeoDataPlacemark::HighwayMotorway
Definition: GeoDataPlacemark.h:210
Marble::GeoDataPlacemark::NaturalPeak
Definition: GeoDataPlacemark.h:284
Marble::GeoDataPlacemark::AerialwayJBar
Definition: GeoDataPlacemark.h:468
Marble::GeoDataPlacemark::BarrierWall
Definition: GeoDataPlacemark.h:282
Marble::GeoDataPlacemark::HighwayPrimary
Definition: GeoDataPlacemark.h:205
Marble::GeoDataPlacemark::LeisureStadium
Definition: GeoDataPlacemark.h:417
Marble::GeoDataStyle::Ptr
QSharedPointer< GeoDataStyle > Ptr
Definition: GeoDataStyle.h:58
Marble::GeoDataPlacemark::AdminLevel6
Definition: GeoDataPlacemark.h:506
Marble::GeoDataPlacemark::Coordinate
Definition: GeoDataPlacemark.h:143
OsmcSymbol
Definition: OsmcSymbol.h:19
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
Marble::GeoDataPlacemark::BoundaryMaritime
Definition: GeoDataPlacemark.h:513
QFont::setUnderline
void setUnderline(bool enable)
Marble::GeoDataPlacemark::NaturalReef
Definition: GeoDataPlacemark.h:173
Marble::GeoDataPlacemark::UrbanArea
Definition: GeoDataPlacemark.h:521
Marble::GeoDataPlacemark::HighwaySecondaryLink
Definition: GeoDataPlacemark.h:202
Marble::GeoDataPlacemark::HighwaySteps
Definition: GeoDataPlacemark.h:187
Marble::GeoDataPlacemark::SmallStateCapital
Definition: GeoDataPlacemark.h:102
Marble::GeoDataPlacemark::EducationSchool
Definition: GeoDataPlacemark.h:225
Marble::GeoDataPlacemark::ShopCopy
Definition: GeoDataPlacemark.h:327
Marble::GeoDataStyle::ConstPtr
QSharedPointer< const GeoDataStyle > ConstPtr
Definition: GeoDataStyle.h:59
Marble::GeoDataPlacemark::HealthPharmacy
Definition: GeoDataPlacemark.h:240
Marble::StyleParameters
Definition: StyleBuilder.h:29
Marble::GeoDataPlacemark::HighwayTrunk
Definition: GeoDataPlacemark.h:208
Marble::GeoDataRelation::UnknownType
Definition: GeoDataRelation.h:26
Marble::GeoDataPlacemark::ShopJewelry
Definition: GeoDataPlacemark.h:305
Marble::GeoDataPlacemark::BarrierGate
Definition: GeoDataPlacemark.h:280
Marble::GeoDataPlacemark::ShopFurniture
Definition: GeoDataPlacemark.h:317
Marble::GeoDataPlacemark::HighwayLivingStreet
Definition: GeoDataPlacemark.h:198
Marble::GeoDataPlacemark::ShopDeli
Definition: GeoDataPlacemark.h:338
Marble::GeoDataPlacemark::LanduseQuarry
Definition: GeoDataPlacemark.h:435
Marble::GeoDataPlacemark::LeisureSwimmingPool
Definition: GeoDataPlacemark.h:419
Marble::GeoDataPlacemark::ShopButcher
Definition: GeoDataPlacemark.h:295
Marble::GeoDataPlacemark::HighwayCycleway
Definition: GeoDataPlacemark.h:194
Marble::GeoDataPlacemark::TransportParking
Definition: GeoDataPlacemark.h:382
Marble::GeoDataPlacemark::ShopShoes
Definition: GeoDataPlacemark.h:306
Marble::GeoDataPlacemark::TransportFuel
Definition: GeoDataPlacemark.h:381
Marble::GeoDataPlacemark::LanduseReservoir
Definition: GeoDataPlacemark.h:437
Marble::GeoDataPlacemark::ReligionTaoist
Definition: GeoDataPlacemark.h:407
Marble::StyleBuilder::maximumZoomLevel
int maximumZoomLevel() const
Returns the maximum zoom level in the theme.
Definition: StyleBuilder.cpp:2474
Marble::GeoDataPlacemark::NaturalBeach
Definition: GeoDataPlacemark.h:175
Marble::GeoDataPlacemark::ShopSeafood
Definition: GeoDataPlacemark.h:299
QLocale::country
Country country() const
Marble::GeoDataPlacemark::LanduseCemetery
Definition: GeoDataPlacemark.h:424
Marble::GeoDataPlacemark::AccomodationMotel
Definition: GeoDataPlacemark.h:219
Marble::GeoDataPlacemark::MilitaryDangerArea
Definition: GeoDataPlacemark.h:139
Marble::GeoDataPlacemark::AmenityTelephone
Definition: GeoDataPlacemark.h:267
QString::remove
QString & remove(int position, int n)
Marble::GeoDataPlacemark::Ocean
Definition: GeoDataPlacemark.h:124
Marble::GeoDataPlacemark::PlaceCity
Definition: GeoDataPlacemark.h:159
Marble::StyleBuilder::popularity
static qint64 popularity(const GeoDataPlacemark *placemark)
Definition: StyleBuilder.cpp:2259
Marble::GeoDataPlacemark::ManmadeLighthouse
Definition: GeoDataPlacemark.h:346
Marble::GeoDataPlacemark::Bookmark
Definition: GeoDataPlacemark.h:151
Marble::StyleParameters::placemark
const GeoDataPlacemark * placemark
Definition: StyleBuilder.h:34
Marble::GeoDataPlacemark::ShopSports
Definition: GeoDataPlacemark.h:326
Marble::StyleBuilder::setDefaultFont
void setDefaultFont(const QFont &font)
Definition: StyleBuilder.cpp:2048
Marble::GeoDataPlacemark::AerialwayPylon
Definition: GeoDataPlacemark.h:460
QDate::month
int month() const
Marble::GeoDataPlacemark::TourismArtwork
Definition: GeoDataPlacemark.h:353
Marble::GeoDataPlacemark::ShopOutdoor
Definition: GeoDataPlacemark.h:325
GeoDataLineStyle.h
QColor::isValidColor
bool isValidColor(const QString &name)
Marble::GeoDataPlacemark::AerialwayGoods
Definition: GeoDataPlacemark.h:473
Marble::GeoDataPlacemark::LanduseIndustrial
Definition: GeoDataPlacemark.h:431
Marble::GeoDataPlacemark::MediumCity
Definition: GeoDataPlacemark.h:104
Marble::GeoDataPlacemark::EducationCollege
Definition: GeoDataPlacemark.h:224
Marble::GeoDataPlacemark::TransportCarShare
Definition: GeoDataPlacemark.h:380
Marble::GeoDataPlacemark::PlaceTownCapital
Definition: GeoDataPlacemark.h:166
Marble::GeoDataPlacemark::ShopMusicalInstrument
Definition: GeoDataPlacemark.h:329
Marble::GeoDataPlacemark::ReligionPlaceOfWorship
Definition: GeoDataPlacemark.h:397
Marble::GeoDataPlacemark::AdminLevel4
Definition: GeoDataPlacemark.h:504
Marble::GeoDataPlacemark::AmenityToilets
Definition: GeoDataPlacemark.h:269
Marble::GeoDataPlacemark::OsmSite
Definition: GeoDataPlacemark.h:142
Marble::GeoDataPlacemark::LanduseLandfill
Definition: GeoDataPlacemark.h:432
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:59
Marble::StyleBuilder::createStyle
GeoDataStyle::ConstPtr createStyle(const StyleParameters &parameters) const
Definition: StyleBuilder.cpp:2065
Marble::GeoDataRelation::RouteSkiNordic
Definition: GeoDataRelation.h:42
Marble::GeoDataPlacemark::ShopClothes
Definition: GeoDataPlacemark.h:303
Marble::GeoDataRelation::RouteMountainbike
Definition: GeoDataRelation.h:36
Marble::GeoDataPlacemark::WaterwayDrain
Definition: GeoDataPlacemark.h:490
Marble::GeoDataPlacemark::ShopStationery
Definition: GeoDataPlacemark.h:333
QList::size
int size() const
Marble::GeoDataPlacemark::ShopConvenience
Definition: GeoDataPlacemark.h:297
QLocale::system
QLocale system()
Marble::GeoDataPlacemark::HighwayPrimaryLink
Definition: GeoDataPlacemark.h:204
Marble::GeoDataPlacemark::HighwayRoad
Definition: GeoDataPlacemark.h:196
Marble::GeoDataPlacemark::ShopFashion
Definition: GeoDataPlacemark.h:304
QFont::setBold
void setBold(bool enable)
Marble::GeoDataPlacemark::TransportMotorcycleParking
Definition: GeoDataPlacemark.h:392
Marble::GeoDataPlacemark::Building
Definition: GeoDataPlacemark.h:213
Marble::GeoDataPlacemark::MagneticPole
Definition: GeoDataPlacemark.h:133
Marble::StyleBuilder::reset
void reset()
Definition: StyleBuilder.cpp:2242
Marble::GeoDataPlacemark::CrossingSignals
Definition: GeoDataPlacemark.h:495
Marble::GeoDataPlacemark::LanduseRailway
Definition: GeoDataPlacemark.h:436
Marble::GeoDataPlacemark::RailwayRail
Definition: GeoDataPlacemark.h:443
Marble::GeoDataPlacemark::ShopCarParts
Definition: GeoDataPlacemark.h:323
Marble::GeoDataPlacemark::ShopSupermarket
Definition: GeoDataPlacemark.h:292
Marble::GeoDataPlacemark::CrossingIsland
Definition: GeoDataPlacemark.h:496
Marble::GeoDataPlacemark::PisteHike
Definition: GeoDataPlacemark.h:480
Marble::GeoDataPlacemark::AmenityMountainRescue
Definition: GeoDataPlacemark.h:252
Marble::StyleBuilder::OsmTag
QPair< QString, QString > OsmTag
Definition: StyleBuilder.h:42
Marble::GeoDataPlacemark::LargeCountyCapital
Definition: GeoDataPlacemark.h:113
Marble::GeoDataPlacemark::PlaceHamlet
Definition: GeoDataPlacemark.h:163
Marble::GeoDataPlacemark::Observatory
Definition: GeoDataPlacemark.h:136
Marble::GeoDataPlacemark::AdminLevel7
Definition: GeoDataPlacemark.h:507
Marble::GeoDataPlacemark::AdminLevel9
Definition: GeoDataPlacemark.h:509
Marble::GeoDataPlacemark::HighwayService
Definition: GeoDataPlacemark.h:195
Marble::GeoDataPlacemark::LeisurePlayground
Definition: GeoDataPlacemark.h:414
Marble::GeoDataPlacemark::HistoricMonument
Definition: GeoDataPlacemark.h:367
Marble::GeoDataPlacemark::AerialwayRopeTow
Definition: GeoDataPlacemark.h:470
Marble::GeoDataPlacemark::HistoricMemorial
Definition: GeoDataPlacemark.h:366
Marble::GeoDataPlacemark::AmenityFountain
Definition: GeoDataPlacemark.h:255
Marble::GeoDataPlacemark::Mountain
Definition: GeoDataPlacemark.h:119
Marble::GeoDataPlacemark::TourismZoo
Definition: GeoDataPlacemark.h:359
Marble::GeoDataPlacemark::PisteNordic
Definition: GeoDataPlacemark.h:477
OsmcSymbol.h
Marble::GeoDataPlacemark::PlaceTownNationalCapital
Definition: GeoDataPlacemark.h:167
Marble::GeoDataPlacemark::RailwayMiniature
Definition: GeoDataPlacemark.h:450
Marble::GeoDataPlacemark::LeisureSportsCentre
Definition: GeoDataPlacemark.h:416
Marble::GeoDataPlacemark::ReligionHindu
Definition: GeoDataPlacemark.h:402
Marble::GeoDataPlacemark::TransportSpeedCamera
Definition: GeoDataPlacemark.h:394
Marble::GeoDataPlacemark::HighwayFootway
Definition: GeoDataPlacemark.h:190
Marble::GeoDataPlacemark::ShopAlcohol
Definition: GeoDataPlacemark.h:293
Marble::GeoDataPlacemark::AerialwayMagicCarpet
Definition: GeoDataPlacemark.h:471
Marble::GeoDataPlacemark::NaturalWood
Definition: GeoDataPlacemark.h:174
QSharedPointer
QHash
Marble::GeoDataPlacemark::HighwayMotorwayLink
Definition: GeoDataPlacemark.h:209
Marble::GeoDataPlacemark::TransportAirportApron
Definition: GeoDataPlacemark.h:377
Marble::GeoDataPlacemark::TourismThemePark
Definition: GeoDataPlacemark.h:357
Marble::GeoDataPlacemark::ShopMotorcycle
Definition: GeoDataPlacemark.h:324
StyleBuilder.h
Marble::GeoDataPlacemark::BarrierLiftGate
Definition: GeoDataPlacemark.h:281
GeoDataLabelStyle.h
Marble::GeoDataPlacemark::LeisurePark
Definition: GeoDataPlacemark.h:413
Marble::GeoDataPlacemark::TourismMuseum
Definition: GeoDataPlacemark.h:356
Marble::GeoDataPlacemark::NaturalWater
Definition: GeoDataPlacemark.h:172
Marble::GeoDataPlacemark::HighwayTertiaryLink
Definition: GeoDataPlacemark.h:200
Marble::GeoDataPlacemark::ReligionBahai
Definition: GeoDataPlacemark.h:398
Marble::GeoDataPlacemark::visualCategory
GeoDataVisualCategory visualCategory() const
Return the symbol index of the placemark.
Definition: GeoDataPlacemark.cpp:139
Marble::GeoDataPlacemark::RailwayPreserved
Definition: GeoDataPlacemark.h:449
QList::isEmpty
bool isEmpty() const
Marble::GeoDataRelation::RouteTrolleyBus
Definition: GeoDataRelation.h:34
Marble::GeoDataPlacemark::ShopBakery
Definition: GeoDataPlacemark.h:294
Marble::GeoDataPlacemark::ShopPet
Definition: GeoDataPlacemark.h:335
Marble::GeoDataPlacemark::PlaceSuburb
Definition: GeoDataPlacemark.h:162
Marble::GeoDataPlacemark::AmenityKindergarten
Definition: GeoDataPlacemark.h:249
MarbleDirs.h
Marble::GeoDataPlacemark::HealthHospital
Definition: GeoDataPlacemark.h:239
Marble::GeoDataPlacemark::AerialwayCableCar
Definition: GeoDataPlacemark.h:462
Marble::GeoDataPlacemark::NaturalCliff
Definition: GeoDataPlacemark.h:180
Marble::GeoDataPlacemark::PlaceLocality
Definition: GeoDataPlacemark.h:164
QString::isEmpty
bool isEmpty() const
Marble::GeoDataRelation::RouteFerry
Definition: GeoDataRelation.h:29
Marble::GeoDataPlacemark::Valley
Definition: GeoDataPlacemark.h:122
Marble::GeoDataPlacemark::BigNationCapital
Definition: GeoDataPlacemark.h:111
Marble::GeoDataPlacemark::AccomodationGuestHouse
Definition: GeoDataPlacemark.h:221
Marble::GeoDataPlacemark::EducationUniversity
Definition: GeoDataPlacemark.h:226
Marble::GeoDataPlacemark::AdminLevel8
Definition: GeoDataPlacemark.h:508
GeoDataLineString.h
Marble::GeoDataPlacemark::TourismWildernessHut
Definition: GeoDataPlacemark.h:361
Marble::GeoDataPlacemark::AmenityCinema
Definition: GeoDataPlacemark.h:254
Marble::GeoDataPlacemark::AccomodationCamping
Definition: GeoDataPlacemark.h:216
Marble::GeoDataPlacemark::Default
Definition: GeoDataPlacemark.h:95
Marble::GeoDataPlacemark::LanduseMeadow
Definition: GeoDataPlacemark.h:433
Marble::GeoDataPlacemark::AmenityCarWash
Definition: GeoDataPlacemark.h:275
Marble::GeoDataPlacemark::ReligionMuslim
Definition: GeoDataPlacemark.h:401
Marble::GeoDataPlacemark::TransportTrainStation
Definition: GeoDataPlacemark.h:389
Marble::GeoDataPlacemark::LanduseVineyard
Definition: GeoDataPlacemark.h:441
Marble::GeoDataPlacemark::TransportRentalCar
Definition: GeoDataPlacemark.h:386
Marble::GeoDataPlacemark::AccomodationYouthHostel
Definition: GeoDataPlacemark.h:220
Marble::GeoDataPlacemark::Bathymetry
Definition: GeoDataPlacemark.h:523
Marble::GeoDataPlacemark::SmallCity
Definition: GeoDataPlacemark.h:100
Marble::GeoDataPlacemark::ShopCosmetics
Definition: GeoDataPlacemark.h:310
QSet< QLocale::Country >
Marble::GeoDataPlacemark::ShopChemist
Definition: GeoDataPlacemark.h:309
Marble::GeoDataPlacemark::AmenityTownHall
Definition: GeoDataPlacemark.h:270
Marble::GeoDataPlacemark::ShopTobacco
Definition: GeoDataPlacemark.h:339
Marble::GeoDataPlacemark::AccomodationHotel
Definition: GeoDataPlacemark.h:218
OsmcSymbol::wayColor
QColor wayColor() const
Definition: OsmcSymbol.cpp:232
QString
Marble::GeoDataPlacemark::FoodPub
Definition: GeoDataPlacemark.h:233
Marble::GeoDataPlacemark::TransportHelipad
Definition: GeoDataPlacemark.h:372
Marble::GeoDataPlacemark::HistoricCastle
Definition: GeoDataPlacemark.h:365
QColor
Marble::IN2M
const qreal IN2M
Definition: MarbleGlobal.h:204
GeoDataPlacemark.h
Marble::GeoDataPlacemark::AmenityGraveyard
Definition: GeoDataPlacemark.h:273
Marble::GeoDataPlacemark::PisteSkitour
Definition: GeoDataPlacemark.h:478
Marble::GeoDataPlacemark::Unknown
Definition: GeoDataPlacemark.h:96
Marble::GeoDataPlacemark::ShopConfectionery
Definition: GeoDataPlacemark.h:296
Marble::GeoDataPlacemark::ShopGreengrocer
Definition: GeoDataPlacemark.h:298
Marble::GeoDataPlacemark::PlaceVillageNationalCapital
Definition: GeoDataPlacemark.h:170
Marble::GeoDataPlacemark::AdminLevel11
Definition: GeoDataPlacemark.h:511
Marble::GeoDataPlacemark::LanduseOrchard
Definition: GeoDataPlacemark.h:440
QStringList
Marble::GeoDataPlacemark::MoneyBank
Definition: GeoDataPlacemark.h:245
Marble::GeoDataPlacemark::AmenityTheatre
Definition: GeoDataPlacemark.h:268
Marble::GeoDataPlacemark::AdminLevel10
Definition: GeoDataPlacemark.h:510
Marble::GeoDataPlacemark::ShipWreck
Definition: GeoDataPlacemark.h:134
Marble::GeoDataPlacemark::ShopTea
Definition: GeoDataPlacemark.h:340
Marble::GeoDataPlacemark::LanduseFarmyard
Definition: GeoDataPlacemark.h:428