From 2803f48a21b57fff8fa18b939e74fce212244cc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Thu, 22 Nov 2018 21:57:21 +0100 Subject: [PATCH] Added support for symbol icons --- pbfplugin.pro | 6 +- pbfplugin.qrc | 2 + src/pbf.cpp | 11 +- src/sprites.cpp | 91 +++ src/sprites.h | 29 + src/style.cpp | 164 ++-- src/style.h | 56 +- src/text.cpp | 13 +- src/text.h | 29 +- src/textpointitem.cpp | 70 +- src/textpointitem.h | 9 +- src/tile.h | 8 +- style/sprite.json | 1682 +++++++++++++++++++++++++++++++++++++++++ style/sprite.png | Bin 0 -> 49086 bytes 14 files changed, 2060 insertions(+), 110 deletions(-) create mode 100644 src/sprites.cpp create mode 100644 src/sprites.h create mode 100644 style/sprite.json create mode 100644 style/sprite.png diff --git a/pbfplugin.pro b/pbfplugin.pro index 7badc33..7321506 100644 --- a/pbfplugin.pro +++ b/pbfplugin.pro @@ -19,7 +19,8 @@ HEADERS += src/pbfhandler.h \ src/textpathitem.h \ src/textpointitem.h \ src/font.h \ - src/textitem.h + src/textitem.h \ + src/sprites.h SOURCES += src/pbfplugin.cpp \ src/pbfhandler.cpp \ src/gzip.cpp \ @@ -30,7 +31,8 @@ SOURCES += src/pbfplugin.cpp \ src/function.cpp \ src/textpathitem.cpp \ src/textpointitem.cpp \ - src/font.cpp + src/font.cpp \ + src/sprites.cpp RESOURCES += pbfplugin.qrc unix:!macx{ diff --git a/pbfplugin.qrc b/pbfplugin.qrc index ed8fc7b..11c11d4 100644 --- a/pbfplugin.qrc +++ b/pbfplugin.qrc @@ -1,5 +1,7 @@ style/style.json + style/sprite.json + style/sprite.png diff --git a/src/pbf.cpp b/src/pbf.cpp index acc340e..971a441 100644 --- a/src/pbf.cpp +++ b/src/pbf.cpp @@ -116,7 +116,7 @@ static inline QPoint parameters(quint32 v1, quint32 v2) static void drawFeature(const Feature &feature, Style *style, int styleLayer, const QSizeF &factor, Tile &tile) { - if (!style->match(styleLayer, feature.tags())) + if (!style->match(tile.zoom(), styleLayer, feature.tags())) return; QPoint cursor; @@ -151,7 +151,7 @@ static void drawFeature(const Feature &feature, Style *style, int styleLayer, } } - style->drawFeature(styleLayer, path, feature.tags(), tile); + style->drawFeature(tile, styleLayer, path, feature.tags()); } static void drawLayer(const Layer &layer, Style *style, int styleLayer, @@ -163,7 +163,9 @@ static void drawLayer(const Layer &layer, Style *style, int styleLayer, QSizeF factor(tile.size().width() / scale.x() / (qreal)layer.data()->extent(), tile.size().height() / scale.y() / (qreal)layer.data()->extent()); - style->setPainter(styleLayer, tile); + style->setPainter(tile, styleLayer); + style->setTextProperties(tile, styleLayer); + for (int i = 0; i < layer.features().size(); i++) drawFeature(layer.features().at(i), style, styleLayer, factor, tile); } @@ -177,9 +179,8 @@ bool PBF::render(const QByteArray &data, int zoom, Style *style, return false; } - Tile t(image, scale); + Tile t(image, zoom, scale); - style->setZoom(zoom); style->drawBackground(t); // Prepare source layers diff --git a/src/sprites.cpp b/src/sprites.cpp new file mode 100644 index 0000000..69e8fc0 --- /dev/null +++ b/src/sprites.cpp @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include "sprites.h" + + +/* + Loading the sprites atlas image must be deferred until all image plugins + are loaded, otherwise reading the image will cause a deadlock! +*/ +static QImage &atlas(const QString &fileName) +{ + static QImage *img = new QImage(fileName); + return *img; +} + +Sprites::Sprite::Sprite(const QJsonObject &json) +{ + int x, y, width, height; + + if (json.contains("x") && json["x"].isDouble()) + x = json["x"].toInt(); + else + return; + if (json.contains("y") && json["y"].isDouble()) + y = json["y"].toInt(); + else + return; + if (json.contains("width") && json["width"].isDouble()) + width = json["width"].toInt(); + else + return; + if (json.contains("height") && json["height"].isDouble()) + height = json["height"].toInt(); + else + return; + + _rect = QRect(x, y, width, height); +} + +bool Sprites::load(const QString &jsonFile, const QString &imageFile) +{ + _imageFile = imageFile; + + QFile file(jsonFile); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qCritical() << jsonFile << ": error opening file"; + return false; + } + QByteArray ba(file.readAll()); + + QJsonParseError error; + QJsonDocument doc(QJsonDocument::fromJson(ba, &error)); + if (doc.isNull()) { + qCritical() << jsonFile << ":" << error.errorString(); + return false; + } + + QJsonObject json(doc.object()); + for (QJsonObject::const_iterator it = json.constBegin(); + it != json.constEnd(); it++) { + QJsonValue val(*it); + if (val.isObject()) + _sprites.insert(it.key(), Sprite(val.toObject())); + else + qWarning() << it.key() << ": invalid sprite definition"; + } + + return true; +} + +QImage Sprites::icon(const QString &name) const +{ + if (_imageFile.isNull()) + return QImage(); + const QImage &img = atlas(_imageFile); + if (img.isNull()) + return QImage(); + + QMap::const_iterator it = _sprites.find(name); + if (it == _sprites.constEnd()) + return QImage(); + + if (!img.rect().contains(it->rect())) { + qWarning() << it->rect() << ": invalid sprite rect"; + return QImage(); + } + + return img.copy(it->rect()); +} diff --git a/src/sprites.h b/src/sprites.h new file mode 100644 index 0000000..a029f58 --- /dev/null +++ b/src/sprites.h @@ -0,0 +1,29 @@ +#ifndef SPRITES_H +#define SPRITES_H + +#include +#include +#include + +class Sprites +{ +public: + bool load(const QString &jsonFile, const QString &imageFile); + + QImage icon(const QString &name) const; + +private: + class Sprite { + public: + Sprite(const QJsonObject &json); + const QRect &rect() const {return _rect;} + + private: + QRect _rect; + }; + + QMap _sprites; + QString _imageFile; +}; + +#endif // SPRITES_H diff --git a/src/style.cpp b/src/style.cpp index 87b7981..c591f98 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include #include "text.h" #include "color.h" @@ -168,6 +170,32 @@ bool Style::Layer::Filter::match(const QVariantHash &tags) const } } +Style::Layer::Template::Template(const QString &str) : _field(str) +{ + int pos = 0; + + while ((pos = _rx.indexIn(_field, pos)) != -1) { + QString match = _rx.capturedTexts().first(); + _keys.append(match.mid(1, match.size() - 2)); + pos += _rx.matchedLength(); + } +} + +QString Style::Layer::Template::value(const QVariantHash &tags) const +{ + QString text(_field); + + for (int i = 0; i < _keys.size(); i++) { + const QString &key = _keys.at(i); + const QVariant val = tags.value(key); + text.replace(QString("{%1}").arg(key), val.toString()); + } + + return text; +} + +QRegExp Style::Layer::Template::_rx = QRegExp("\\{[^\\}]*\\}"); + Style::Layer::Paint::Paint(const QJsonObject &json) : _fillOpacity(1.0), _lineOpacity(1.0), _lineWidth(1.0) { @@ -275,7 +303,7 @@ bool Style::Layer::Paint::antialias(Layer::Type type, int zoom) const Style::Layer::Layout::Layout(const QJsonObject &json) : _textSize(16), _textMaxWidth(10), _textMaxAngle(45), _lineCap(Qt::FlatCap), _lineJoin(Qt::MiterJoin), _font("Open Sans"), _capitalize(false), - _viewportAlignment(false) + _viewportAlignment(false), _textAnchor(Text::Center) { // line if (json.contains("line-cap") && json["line-cap"].isString()) { @@ -292,17 +320,8 @@ Style::Layer::Layout::Layout(const QJsonObject &json) } // text - if (!(json.contains("text-field") && json["text-field"].isString())) - return; - _textField = json["text-field"].toString(); - - QRegExp rx("\\{[^\\}]*\\}"); - int pos = 0; - while ((pos = rx.indexIn(_textField, pos)) != -1) { - QString match = rx.capturedTexts().first(); - _keys.append(match.mid(1, match.size() - 2)); - pos += rx.matchedLength(); - } + if (json.contains("text-field") && json["text-field"].isString()) + _text = Template(json["text-field"].toString()); jsonFloat(json, "text-size", _textSize); jsonFloat(json, "text-max-width", _textMaxWidth); @@ -311,11 +330,27 @@ Style::Layer::Layout::Layout(const QJsonObject &json) _font = Font::fromJsonArray(json["text-font"].toArray()); if (json.contains("text-transform") && json["text-transform"].isString()) _capitalize = json["text-transform"].toString() == "uppercase"; - if (json.contains("text-rotation-alignment") && json["text-rotation-alignment"].isString()) if (json["text-rotation-alignment"].toString() == "viewport") _viewportAlignment = true; + if (json.contains("text-anchor") && json["text-anchor"].isString()) { + QString anchor(json["text-anchor"].toString()); + if (anchor == "center") + _textAnchor = Text::Center; + else if (anchor == "left") + _textAnchor = Text::Left; + else if (anchor == "right") + _textAnchor = Text::Right; + else if (anchor == "top") + _textAnchor = Text::Top; + else if (anchor == "bottom") + _textAnchor = Text::Bottom; + } + + // icon + if (json.contains("icon-image") && json["icon-image"].isString()) + _icon = Template(json["icon-image"].toString()); } QFont Style::Layer::Layout::font(int zoom) const @@ -374,58 +409,61 @@ bool Style::Layer::match(int zoom, const QVariantHash &tags) const return _filter.match(tags); } -void Style::Layer::setPathPainter(int zoom, Tile &tile) const +void Style::Layer::setPathPainter(Tile &tile) const { - QPen pen(_paint.pen(_type, zoom)); - QBrush brush(_paint.brush(_type, zoom)); + QPen pen(_paint.pen(_type, tile.zoom())); + QBrush brush(_paint.brush(_type, tile.zoom())); pen.setJoinStyle(_layout.lineJoin()); pen.setCapStyle(_layout.lineCap()); QPainter &p = tile.painter(); - p.setRenderHint(QPainter::Antialiasing, _paint.antialias(_type, zoom)); + p.setRenderHint(QPainter::Antialiasing, _paint.antialias(_type, tile.zoom())); p.setPen(pen); p.setBrush(brush); - p.setOpacity(_paint.opacity(_type, zoom)); + p.setOpacity(_paint.opacity(_type, tile.zoom())); } -void Style::Layer::setSymbolPainter(int zoom, Tile &tile) const +void Style::Layer::setSymbolPainter(Tile &tile) const { - QPen pen(_paint.pen(_type, zoom)); - QFont font(_layout.font(zoom)); + QPen pen(_paint.pen(_type, tile.zoom())); + QFont font(_layout.font(tile.zoom())); QPainter &p = tile.painter(); p.setPen(pen); p.setFont(font); } -void Style::Layer::addSymbol(int zoom, const QPainterPath &path, - const QVariantHash &tags, Tile &tile) const +void Style::Layer::setTextProperties(Tile &tile) const { - if (_layout.keys().isEmpty()) - return; + Text::Properties prop; + prop.maxWidth = _layout.maxTextWidth(tile.zoom()); + prop.maxAngle = _layout.maxTextAngle(tile.zoom()); + prop.anchor = _layout.textAnchor(); - QString text(_layout.field()); - for (int i = 0; i < _layout.keys().size(); i++) { - const QString &key = _layout.keys().at(i); - const QVariant val = tags.value(key); - text.replace(QString("{%1}").arg(key), _layout.capitalize() - ? val.toString().toUpper() : val.toString()); - } + tile.text().setProperties(prop); +} +void Style::Layer::addSymbol(Tile &tile, const QPainterPath &path, + const QVariantHash &tags, const Sprites &sprites) const +{ + QString text = _layout.text().value(tags); QString tt(text.trimmed()); if (tt.isEmpty()) return; + if (_layout.capitalize()) + tt = tt.toUpper(); + + QString icon = _layout.icon().value(tags); if (_layout.viewportAlignment()) - tile.text().addLabel(tt, path.elementAt(0), tile.painter(), - _layout.maxTextWidth(zoom), false); + tile.text().addLabel(tt, path.elementAt(0), tile.painter(), false, + sprites.icon(icon)); else if (path.elementCount() == 1 && path.elementAt(0).isMoveTo()) - tile.text().addLabel(tt, path.elementAt(0), tile.painter(), - _layout.maxTextWidth(zoom), true); + tile.text().addLabel(tt, path.elementAt(0), tile.painter(), true, + sprites.icon(icon)); else - tile.text().addLabel(tt, path, tile.painter(), - _layout.maxTextAngle(zoom)); + tile.text().addLabel(tt, path, tile.painter()); } bool Style::load(const QString &fileName) @@ -450,53 +488,69 @@ bool Style::load(const QString &fileName) QJsonArray layers = json["layers"].toArray(); for (int i = 0; i < layers.size(); i++) if (layers[i].isObject()) - _styles.append(Layer(layers[i].toObject())); + _layers.append(Layer(layers[i].toObject())); } - for (int i = 0; i < _styles.size(); i++) - _sourceLayers.append(_styles.at(i).sourceLayer()); + for (int i = 0; i < _layers.size(); i++) + _sourceLayers.append(_layers.at(i).sourceLayer()); + + QDir styleDir = QFileInfo(fileName).absoluteDir(); + QString spritesJSON(styleDir.filePath("sprite.json")); + if (QFileInfo::exists(spritesJSON)) { + QString spritesImg(styleDir.filePath("sprite.png")); + if (QFileInfo::exists(spritesImg)) + _sprites.load(spritesJSON, spritesImg); + else + qCritical() << spritesImg << ": no such file"; + } return true; } -bool Style::match(int layer, const QVariantHash &tags) +bool Style::match(int zoom, int layer, const QVariantHash &tags) const { - return _styles.at(layer).match(_zoom, tags); + return _layers.at(layer).match(zoom, tags); } -void Style::setPainter(int layer, Tile &tile) +void Style::setTextProperties(Tile &tile, int layer) const { - const Layer &sl = _styles.at(layer); + const Layer &sl = _layers.at(layer); + sl.setTextProperties(tile); +} + +void Style::setPainter(Tile &tile, int layer) const +{ + const Layer &sl = _layers.at(layer); if (sl.isPath()) - sl.setPathPainter(_zoom, tile); + sl.setPathPainter(tile); else if (sl.isSymbol()) - sl.setSymbolPainter(_zoom, tile); + sl.setSymbolPainter(tile); } -void Style::drawFeature(int layer, const QPainterPath &path, - const QVariantHash &tags, Tile &tile) +void Style::drawFeature(Tile &tile, int layer, const QPainterPath &path, + const QVariantHash &tags) const { - const Layer &sl = _styles.at(layer); + const Layer &sl = _layers.at(layer); if (sl.isPath()) tile.painter().drawPath(path); else if (sl.isSymbol()) - sl.addSymbol(_zoom, path, tags, tile); + sl.addSymbol(tile, path, tags, _sprites); } -void Style::drawBackground(Tile &tile) +void Style::drawBackground(Tile &tile) const { QRectF rect(QPointF(0, 0), tile.size()); QPainterPath path; path.addRect(rect); - if (_styles.isEmpty()) { + if (_layers.isEmpty()) { tile.painter().setBrush(Qt::lightGray); tile.painter().setPen(Qt::NoPen); tile.painter().drawRect(rect); - } else if (_styles.first().isBackground()) { - _styles.first().setPathPainter(_zoom, tile); + } else if (_layers.first().isBackground()) { + _layers.first().setPathPainter(tile); tile.painter().drawPath(path); } diff --git a/src/style.h b/src/style.h index 1b84b25..1c292d3 100644 --- a/src/style.h +++ b/src/style.h @@ -9,7 +9,9 @@ #include #include #include +#include "text.h" #include "function.h" +#include "sprites.h" class QPainter; @@ -23,15 +25,15 @@ public: bool load(const QString &fileName); - void setZoom(int zoom) {_zoom = zoom;} - const QStringList &sourceLayers() const {return _sourceLayers;} - bool match(int layer, const QVariantHash &tags); - void drawBackground(Tile &tile); - void setPainter(int layer, Tile &tile); - void drawFeature(int layer, const QPainterPath &path, - const QVariantHash &tags, Tile &tile); + bool match(int zoom, int layer, const QVariantHash &tags) const; + + void drawBackground(Tile &tile) const; + void setPainter(Tile &tile, int layer) const; + void setTextProperties(Tile &tile, int layer) const; + void drawFeature(Tile &tile, int layer, const QPainterPath &path, + const QVariantHash &tags) const; private: class Layer { @@ -45,10 +47,11 @@ private: bool isSymbol() const {return (_type == Symbol);} bool match(int zoom, const QVariantHash &tags) const; - void setPathPainter(int zoom, Tile &tile) const; - void setSymbolPainter(int zoom, Tile &tile) const; - void addSymbol(int zoom, const QPainterPath &path, - const QVariantHash &tags, Tile &tile) const; + void setPathPainter(Tile &tile) const; + void setSymbolPainter(Tile &tile) const; + void setTextProperties(Tile &tile) const; + void addSymbol(Tile &tile, const QPainterPath &path, + const QVariantHash &tags, const Sprites &sprites) const; private: enum Type { @@ -80,12 +83,25 @@ private: QVector _filters; }; + class Template { + public: + Template() {} + Template(const QString &str); + + QString value(const QVariantHash &tags) const; + + private: + static QRegExp _rx; + QStringList _keys; + QString _field; + }; + class Layout { public: Layout() : _textSize(16), _textMaxWidth(10), _textMaxAngle(45), _lineCap(Qt::FlatCap), _lineJoin(Qt::MiterJoin), - _font("Open Sans"), _capitalize(false), _viewportAlignment(false) - {} + _font("Open Sans"), _capitalize(false), _viewportAlignment(false), + _textAnchor(Text::Center) {} Layout(const QJsonObject &json); bool capitalize() const {return _capitalize;} @@ -93,16 +109,17 @@ private: {return _textMaxWidth.value(zoom);} qreal maxTextAngle(int zoom) const {return _textMaxAngle.value(zoom);} - const QString &field() const {return _textField;} - const QStringList &keys() const {return _keys;} + const Template &text() const {return _text;} + const Template &icon() const {return _icon;} QFont font(int zoom) const; Qt::PenCapStyle lineCap() const {return _lineCap;} Qt::PenJoinStyle lineJoin() const {return _lineJoin;} bool viewportAlignment() const {return _viewportAlignment;} + Text::Anchor textAnchor() const {return _textAnchor;} private: - QStringList _keys; - QString _textField; + Template _text; + Template _icon; FunctionF _textSize; FunctionF _textMaxWidth; FunctionF _textMaxAngle; @@ -111,6 +128,7 @@ private: QFont _font; bool _capitalize; bool _viewportAlignment; + Text::Anchor _textAnchor; }; class Paint { @@ -144,9 +162,9 @@ private: Paint _paint; }; - int _zoom; - QVector _styles; + QVector _layers; QStringList _sourceLayers; + Sprites _sprites; }; #endif // STYLE_H diff --git a/src/text.cpp b/src/text.cpp index bbb5e52..4bcc202 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -150,28 +150,27 @@ void Text::render(QPainter *painter) const } void Text::addLabel(const QString &text, const QPointF &pos, - const QPainter &painter, qreal maxTextWidth, bool overlap) + const QPainter &painter, bool overlap, const QImage &icon) { if (text.isEmpty()) return; - TextPointItem *ti; - - ti = new TextPointItem(text, pos, painter.font(), maxTextWidth); + TextPointItem *ti = new TextPointItem(text, pos, painter.font(), + _properties, icon); if (!overlap && !_sceneRect.contains(ti->boundingRect())) { delete ti; return; } - ti->setPen(painter.pen()); addItem(ti); + QList ci = collidingItems(ti); for (int i = 0; i < ci.size(); i++) ci[i]->setVisible(false); } void Text::addLabel(const QString &text, const QPainterPath &path, - const QPainter &painter, qreal maxAngle) + const QPainter &painter) { if (path.isEmpty()) return; @@ -182,7 +181,7 @@ void Text::addLabel(const QString &text, const QPainterPath &path, if (textWidth > path.length()) return; - QPainterPath tp(textPath(path, textWidth, maxAngle, + QPainterPath tp(textPath(path, textWidth, _properties.maxAngle, painter.font().pixelSize() / 2, _sceneRect)); if (tp.isEmpty()) return; diff --git a/src/text.h b/src/text.h index 26c84a9..99c3107 100644 --- a/src/text.h +++ b/src/text.h @@ -1,20 +1,40 @@ #ifndef TEXT_H #define TEXT_H -#include "textitem.h" +#include + +class TextItem; class Text { public: + enum Anchor { + Center, + Left, + Right, + Top, + Bottom + }; + + struct Properties { + int maxWidth; + int maxAngle; + Anchor anchor; + }; + + Text(const QSize &size) : _sceneRect(QRectF(QPointF(0, 0), size)) {} ~Text(); - void render(QPainter *painter) const; + void setProperties(const Properties &prop) + {_properties = prop;} void addLabel(const QString &text, const QPointF &pos, - const QPainter &painter, qreal maxTextWidth, bool overlap); + const QPainter &painter, bool overlap, const QImage &icon); void addLabel(const QString &text, const QPainterPath &path, - const QPainter &painter, qreal maxAngle); + const QPainter &painter); + + void render(QPainter *painter) const; private: void addItem(TextItem *item) {_items.append(item);} @@ -22,6 +42,7 @@ private: QRectF _sceneRect; QList _items; + Properties _properties; }; #endif // TEXT_H diff --git a/src/textpointitem.cpp b/src/textpointitem.cpp index ac97bed..a663e43 100644 --- a/src/textpointitem.cpp +++ b/src/textpointitem.cpp @@ -1,13 +1,11 @@ -#include +#include #include #include "textpointitem.h" #define FLAGS (Qt::AlignCenter | Qt::TextWordWrap | Qt::TextDontClip) -#ifdef USE_EXACT_TEXT_RECT - -static QRectF textBoundingRect(const QString &str, const QFont &font, +static QRectF exactBoundingRect(const QString &str, const QFont &font, int maxTextWidth) { QFontMetrics fm(font); @@ -26,8 +24,7 @@ static QRectF textBoundingRect(const QString &str, const QFont &font, return br; } -#else // USE_EXACT_TEXT_RECT -static QRectF textBoundingRect(const QString &str, const QFont &font, +static QRectF fuzzyBoundingRect(const QString &str, const QFont &font, int maxTextWidth) { int limit = font.pixelSize() * maxTextWidth; @@ -67,23 +64,68 @@ static QRectF textBoundingRect(const QString &str, const QFont &font, return QRectF(0, 0, width, lines * lh); } -#endif // USE_EXACT_TEXT_RECT + + +QRectF TextPointItem::computeTextRect(BoundingRectFunction brf) const +{ + QRectF iconRect = _icon.isNull() ? QRectF() : _icon.rect(); + QRectF textRect = brf(text(), _font, _properties.maxWidth); + + switch (_properties.anchor) { + case Text::Center: + textRect.moveCenter(_pos); + break; + case Text::Left: + textRect.moveTopLeft(_pos - QPointF(-iconRect.width() / 2, + textRect.height() / 2)); + break; + case Text::Right: + textRect.moveTopRight(_pos - QPointF(iconRect.width() / 2, + textRect.height() / 2)); + break; + case Text::Bottom: + textRect.moveTopLeft(_pos - QPointF(textRect.width() / 2, + iconRect.height() / 2)); + break; + case Text::Top: + textRect.moveTopLeft(_pos - QPointF(textRect.width() / 2, + -iconRect.height() / 2)); + break; + } + + return textRect; +} TextPointItem::TextPointItem(const QString &text, const QPointF &pos, - const QFont &font, int maxTextWidth) : TextItem(text), _font(font) + const QFont &font, const Text::Properties &prop, const QImage &icon) + : TextItem(text), _pos(pos), _font(font), _icon(icon), _properties(prop) { - _boundingRect = textBoundingRect(text, font, maxTextWidth); + _boundingRect = computeTextRect(fuzzyBoundingRect); + + if (!_icon.isNull()) { + QRectF iconRect(_icon.rect()); + iconRect.moveCenter(pos); + _boundingRect |= iconRect; + } - _boundingRect.moveCenter(pos); _shape.addRect(_boundingRect); } void TextPointItem::paint(QPainter *painter) const { - painter->setFont(_font); - painter->setPen(_pen); - painter->drawText(_boundingRect, FLAGS, text()); - //painter->setPen(Qt::red); //painter->drawRect(_boundingRect); + + QRectF textRect; + + if (!_icon.isNull()) { + textRect = computeTextRect(exactBoundingRect); + painter->drawImage(_pos - QPointF(_icon.width() / 2, + _icon.height() / 2), _icon); + } else + textRect = computeTextRect(fuzzyBoundingRect); + + painter->setFont(_font); + painter->setPen(_pen); + painter->drawText(textRect, FLAGS, text()); } diff --git a/src/textpointitem.h b/src/textpointitem.h index 4a51fc3..a0f33f6 100644 --- a/src/textpointitem.h +++ b/src/textpointitem.h @@ -5,12 +5,13 @@ #include #include #include "textitem.h" +#include "text.h" class TextPointItem : public TextItem { public: TextPointItem(const QString &text, const QPointF &pos, const QFont &font, - int maxTextWidth); + const Text::Properties &prop, const QImage &icon); QRectF boundingRect() const {return _boundingRect;} QPainterPath shape() const {return _shape;} @@ -19,10 +20,16 @@ public: void setPen(const QPen &pen) {_pen = pen;} private: + typedef QRectF (*BoundingRectFunction)(const QString &, const QFont &, int); + QRectF computeTextRect(BoundingRectFunction brf) const; + + QPointF _pos; QPainterPath _shape; QRectF _boundingRect; QFont _font; QPen _pen; + QImage _icon; + Text::Properties _properties; }; #endif // TEXTPOINTITEM_H diff --git a/src/tile.h b/src/tile.h index 7aaa56b..1ba16e0 100644 --- a/src/tile.h +++ b/src/tile.h @@ -7,16 +7,18 @@ class Tile { public: - Tile(QImage *img, const QPointF &scale) - : _size(img->size()), _text(QSize(img->size().width() / scale.x(), - img->size().height() / scale.y())), _painter(img) + Tile(QImage *img, int zoom, const QPointF &scale) + : _zoom(zoom), _size(img->size()), _text(QSize(img->size().width() + / scale.x(), img->size().height() / scale.y())), _painter(img) {_painter.scale(scale.x(), scale.y());} + int zoom() const {return _zoom;} QSize size() const {return _size;} Text &text() {return _text;} QPainter &painter() {return _painter;} private: + int _zoom; QSize _size; Text _text; QPainter _painter; diff --git a/style/sprite.json b/style/sprite.json new file mode 100644 index 0000000..ffe03b5 --- /dev/null +++ b/style/sprite.json @@ -0,0 +1,1682 @@ +{ + "aerialway_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 284, + "y": 127 + }, + "aerialway_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 80, + "y": 190 + }, + "airfield_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 299, + "y": 127 + }, + "airfield_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 99, + "y": 190 + }, + "airport_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 314, + "y": 127 + }, + "airport_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 118, + "y": 190 + }, + "alcohol_shop_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 381, + "y": 210 + }, + "alcohol_shop_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 64, + "y": 0 + }, + "america_football_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 398, + "y": 210 + }, + "america_football_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 85, + "y": 0 + }, + "amusement_park_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 415, + "y": 210 + }, + "amusement_park_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 106, + "y": 0 + }, + "aquarium_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 432, + "y": 210 + }, + "aquarium_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 64 + }, + "art_gallery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 449, + "y": 210 + }, + "art_gallery_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 64 + }, + "attraction_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 466, + "y": 210 + }, + "attraction_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 64 + }, + "bakery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 483, + "y": 210 + }, + "bakery_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 64 + }, + "bank_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 227, + "y": 229 + }, + "bank_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 64 + }, + "bar_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 244, + "y": 229 + }, + "bar_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 64 + }, + "baseball_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 261, + "y": 229 + }, + "baseball_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 85 + }, + "basketball_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 278, + "y": 229 + }, + "basketball_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 85 + }, + "beer_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 295, + "y": 229 + }, + "beer_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 85 + }, + "bicycle_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 312, + "y": 229 + }, + "bicycle_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 85 + }, + "bicycle_rental_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 329, + "y": 229 + }, + "bicycle_rental_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 85 + }, + "building_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 329, + "y": 127 + }, + "building_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 137, + "y": 190 + }, + "bus_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 344, + "y": 127 + }, + "bus_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 156, + "y": 190 + }, + "butcher_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 346, + "y": 229 + }, + "butcher_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 85 + }, + "cafe_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 363, + "y": 229 + }, + "cafe_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 106 + }, + "campsite_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 380, + "y": 229 + }, + "campsite_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 106 + }, + "car_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 359, + "y": 127 + }, + "car_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 175, + "y": 190 + }, + "castle_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 397, + "y": 229 + }, + "castle_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 106 + }, + "cemetery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 414, + "y": 229 + }, + "cemetery_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 106 + }, + "cinema_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 431, + "y": 229 + }, + "cinema_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 106 + }, + "circle-stroked_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 374, + "y": 127 + }, + "circle-stroked_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 194, + "y": 190 + }, + "circle_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 389, + "y": 127 + }, + "circle_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 213, + "y": 190 + }, + "clothing_store_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 448, + "y": 229 + }, + "clothing_store_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 106 + }, + "college_11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 473, + "y": 106 + }, + "college_15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 0, + "y": 190 + }, + "commercial_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 404, + "y": 127 + }, + "commercial_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 232, + "y": 190 + }, + "cricket_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 465, + "y": 229 + }, + "cricket_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 64 + }, + "cross_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 419, + "y": 127 + }, + "cross_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 0, + "y": 210 + }, + "dam_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 434, + "y": 127 + }, + "dam_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 19, + "y": 210 + }, + "danger_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 482, + "y": 229 + }, + "danger_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 64 + }, + "default_1": { + "height": 18, + "pixelRatio": 1, + "width": 18, + "x": 152, + "y": 229 + }, + "default_2": { + "height": 18, + "pixelRatio": 1, + "width": 25, + "x": 170, + "y": 229 + }, + "default_3": { + "height": 18, + "pixelRatio": 1, + "width": 32, + "x": 195, + "y": 229 + }, + "default_4": { + "height": 18, + "pixelRatio": 1, + "width": 39, + "x": 247, + "y": 210 + }, + "default_5": { + "height": 18, + "pixelRatio": 1, + "width": 45, + "x": 286, + "y": 210 + }, + "default_6": { + "height": 18, + "pixelRatio": 1, + "width": 50, + "x": 331, + "y": 210 + }, + "dentist_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 251, + "y": 190 + }, + "dentist_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 64 + }, + "doctor_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 268, + "y": 190 + }, + "doctor_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 64 + }, + "dog_park_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 285, + "y": 190 + }, + "dog_park_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 64 + }, + "dot_10": { + "height": 10, + "pixelRatio": 1, + "width": 10, + "x": 499, + "y": 229 + }, + "dot_11": { + "height": 11, + "pixelRatio": 1, + "width": 11, + "x": 500, + "y": 210 + }, + "dot_9": { + "height": 9, + "pixelRatio": 1, + "width": 9, + "x": 477, + "y": 148 + }, + "drinking-water_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 302, + "y": 190 + }, + "drinking_water_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 64 + }, + "embassy_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 319, + "y": 190 + }, + "embassy_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 85 + }, + "entrance_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 449, + "y": 127 + }, + "entrance_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 38, + "y": 210 + }, + "fast_food_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 336, + "y": 190 + }, + "fast_food_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 85 + }, + "ferry_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 464, + "y": 127 + }, + "ferry_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 57, + "y": 210 + }, + "fire-station_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 353, + "y": 190 + }, + "fire-station_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 85 + }, + "fuel_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 479, + "y": 127 + }, + "fuel_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 76, + "y": 210 + }, + "garden_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 370, + "y": 190 + }, + "garden_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 85 + }, + "gift_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 387, + "y": 190 + }, + "gift_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 85 + }, + "golf_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 404, + "y": 190 + }, + "golf_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 85 + }, + "grocery_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 421, + "y": 190 + }, + "grocery_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 106 + }, + "hairdresser_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 438, + "y": 190 + }, + "hairdresser_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 106 + }, + "harbor_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 494, + "y": 127 + }, + "harbor_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 95, + "y": 210 + }, + "heart_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 455, + "y": 190 + }, + "heart_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 106 + }, + "heliport_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 252, + "y": 148 + }, + "heliport_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 114, + "y": 210 + }, + "hospital_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 472, + "y": 190 + }, + "hospital_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 106 + }, + "ice_cream_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 489, + "y": 190 + }, + "ice_cream_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 106 + }, + "industry_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 267, + "y": 148 + }, + "industry_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 133, + "y": 210 + }, + "information_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 252, + "y": 64 + }, + "information_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 106 + }, + "laundry_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 269, + "y": 64 + }, + "laundry_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 127, + "y": 0 + }, + "library_11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 489, + "y": 106 + }, + "library_15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 20, + "y": 190 + }, + "lighthouse_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 286, + "y": 64 + }, + "lighthouse_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 148, + "y": 0 + }, + "lodging_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 303, + "y": 64 + }, + "lodging_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 169, + "y": 0 + }, + "marker_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 282, + "y": 148 + }, + "marker_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 152, + "y": 210 + }, + "monument_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 320, + "y": 64 + }, + "monument_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 190, + "y": 0 + }, + "mountain_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 337, + "y": 64 + }, + "mountain_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 211, + "y": 0 + }, + "museum_11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 252, + "y": 127 + }, + "museum_15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 40, + "y": 190 + }, + "music_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 354, + "y": 64 + }, + "music_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 232, + "y": 0 + }, + "park_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 371, + "y": 64 + }, + "park_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 127 + }, + "parking_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 297, + "y": 148 + }, + "parking_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 171, + "y": 210 + }, + "parking_garage_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 312, + "y": 148 + }, + "parking_garage_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 190, + "y": 210 + }, + "pedestrian_polygon": { + "height": 64, + "pixelRatio": 1, + "width": 64, + "x": 0, + "y": 0 + }, + "pharmacy_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 388, + "y": 64 + }, + "pharmacy_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 127 + }, + "picnic_site_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 405, + "y": 64 + }, + "picnic_site_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 127 + }, + "pitch_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 422, + "y": 64 + }, + "pitch_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 127 + }, + "place_of_worship_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 439, + "y": 64 + }, + "place_of_worship_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 127 + }, + "playground_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 456, + "y": 64 + }, + "playground_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 127 + }, + "police_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 473, + "y": 64 + }, + "police_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 127 + }, + "post_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 490, + "y": 64 + }, + "post_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 127 + }, + "prison_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 252, + "y": 85 + }, + "prison_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 127 + }, + "railway_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 327, + "y": 148 + }, + "railway_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 209, + "y": 210 + }, + "railway_light_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 342, + "y": 148 + }, + "railway_light_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 228, + "y": 210 + }, + "railway_metro_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 357, + "y": 148 + }, + "railway_metro_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 0, + "y": 229 + }, + "ranger_station_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 269, + "y": 85 + }, + "ranger_station_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 127 + }, + "religious_christian_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 286, + "y": 85 + }, + "religious_christian_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 127 + }, + "religious_jewish_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 303, + "y": 85 + }, + "religious_jewish_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 127 + }, + "religious_muslim_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 320, + "y": 85 + }, + "religious_muslim_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 148 + }, + "restaurant_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 337, + "y": 85 + }, + "restaurant_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 148 + }, + "roadblock_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 354, + "y": 85 + }, + "roadblock_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 148 + }, + "rocket_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 371, + "y": 85 + }, + "rocket_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 148 + }, + "school_11": { + "height": 16, + "pixelRatio": 1, + "width": 16, + "x": 268, + "y": 127 + }, + "school_15": { + "height": 20, + "pixelRatio": 1, + "width": 20, + "x": 60, + "y": 190 + }, + "shelter_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 388, + "y": 85 + }, + "shelter_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 148 + }, + "shop_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 405, + "y": 85 + }, + "shop_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 148 + }, + "skiing_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 422, + "y": 85 + }, + "skiing_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 148 + }, + "soccer_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 439, + "y": 85 + }, + "soccer_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 148 + }, + "square-stroke_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 372, + "y": 148 + }, + "square-stroke_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 19, + "y": 229 + }, + "square_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 387, + "y": 148 + }, + "square_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 38, + "y": 229 + }, + "stadium_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 456, + "y": 85 + }, + "stadium_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 148 + }, + "star-stroke_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 402, + "y": 148 + }, + "star-stroke_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 57, + "y": 229 + }, + "star_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 417, + "y": 148 + }, + "star_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 76, + "y": 229 + }, + "suitcase_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 473, + "y": 85 + }, + "suitcase_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 148 + }, + "sushi_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 490, + "y": 85 + }, + "sushi_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 148 + }, + "swimming_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 252, + "y": 106 + }, + "swimming_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 148 + }, + "telephone_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 269, + "y": 106 + }, + "telephone_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 0, + "y": 169 + }, + "tennis_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 286, + "y": 106 + }, + "tennis_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 21, + "y": 169 + }, + "theatre_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 303, + "y": 106 + }, + "theatre_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 42, + "y": 169 + }, + "toilet_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 320, + "y": 106 + }, + "toilet_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 63, + "y": 169 + }, + "town-hall_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 337, + "y": 106 + }, + "town-hall_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 84, + "y": 169 + }, + "triangle_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 432, + "y": 148 + }, + "triangle_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 95, + "y": 229 + }, + "triangle_stroked_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 447, + "y": 148 + }, + "triangle_stroked_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 114, + "y": 229 + }, + "veterinary_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 354, + "y": 106 + }, + "veterinary_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 105, + "y": 169 + }, + "volcano_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 371, + "y": 106 + }, + "volcano_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 126, + "y": 169 + }, + "warehouse_11": { + "height": 15, + "pixelRatio": 1, + "width": 15, + "x": 462, + "y": 148 + }, + "warehouse_15": { + "height": 19, + "pixelRatio": 1, + "width": 19, + "x": 133, + "y": 229 + }, + "waste_basket_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 388, + "y": 106 + }, + "waste_basket_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 147, + "y": 169 + }, + "water_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 405, + "y": 106 + }, + "water_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 168, + "y": 169 + }, + "wetland_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 422, + "y": 106 + }, + "wetland_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 189, + "y": 169 + }, + "wheelchair_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 439, + "y": 106 + }, + "wheelchair_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 210, + "y": 169 + }, + "zoo_11": { + "height": 17, + "pixelRatio": 1, + "width": 17, + "x": 456, + "y": 106 + }, + "zoo_15": { + "height": 21, + "pixelRatio": 1, + "width": 21, + "x": 231, + "y": 169 + } +} \ No newline at end of file diff --git a/style/sprite.png b/style/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..762589d1e07a0ea2a7cf362a9dcb14bd71d7c843 GIT binary patch literal 49086 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

KMW^dAS<}KrS+8db?`$NCB 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 N;OXk;vd$@?2>>o9O`8A! literal 0 HcmV?d00001