#ifndef IMG_RASTERTILE_H #define IMG_RASTERTILE_H #include #include "mapdata.h" #include "map/projection.h" #include "map/transform.h" class QPainter; class IMGMap; class TextItem; namespace IMG { class Style; class RasterTile { public: RasterTile(const Projection &proj, const Transform &transform, MapData *data, int zoom, const QRect &rect, qreal ratio, const QString &key) : _proj(proj), _transform(transform), _data(data), _zoom(zoom), _rect(rect), _ratio(ratio), _key(key), _pixmap(rect.width() * ratio, rect.height() * ratio), _valid(false) {} const QString &key() const {return _key;} QPoint xy() const {return _rect.topLeft();} const QPixmap &pixmap() const {return _pixmap;} bool isValid() const {return _valid;} void render(); private: void fetchData(QList &polygons, QList &lines, QList &points); QPointF ll2xy(const Coordinates &c) const {return _transform.proj2img(_proj.ll2xy(c));} void ll2xy(QList &polys); void ll2xy(QList &points); void drawPolygons(QPainter *painter, const QList &polygons); void drawLines(QPainter *painter, const QList &lines); void drawTextItems(QPainter *painter, const QList &textItems); void processPolygons(const QList &polygons, QList &textItems); void processLines(QList &lines, QList &textItems, const QImage &arrow, const QImage &waterArrow); void processPoints(QList &points, QList &textItems); void processShields(const QList &lines, QList &textItems); void processStreetNames(const QList &lines, QList &textItems, const QImage &arrow, const QImage &waterArrow); Projection _proj; Transform _transform; MapData *_data; int _zoom; QRect _rect; qreal _ratio; QString _key; QPixmap _pixmap; bool _valid; }; } #endif // IMG_RASTERTILE_H