Map API refactoring
[GPXSee.git] / src / map / emptymap.cpp
blobe0902490dd273f407dd61dbbe69533c404e5f486
1 #include <QtGlobal>
2 #include <QPainter>
3 #include "common/rectc.h"
4 #include "emptymap.h"
7 #define TILE_SIZE 256
9 static int limitZoom(int zoom)
11 if (zoom < OSM::ZOOMS.min())
12 return OSM::ZOOMS.min();
13 if (zoom > OSM::ZOOMS.max())
14 return OSM::ZOOMS.max();
16 return zoom;
20 EmptyMap::EmptyMap(QObject *parent) : Map(QString(), parent)
22 _zoom = OSM::ZOOMS.max();
25 QRectF EmptyMap::bounds()
27 return QRectF(ll2xy(OSM::BOUNDS.topLeft()), ll2xy(OSM::BOUNDS.bottomRight()));
30 int EmptyMap::zoomFit(const QSize &size, const RectC &rect)
32 if (!rect.isValid())
33 _zoom = OSM::ZOOMS.max();
34 else {
35 QRectF tbr(OSM::ll2m(rect.topLeft()), OSM::ll2m(rect.bottomRight()));
36 QPointF sc(tbr.width() / size.width(), tbr.height() / size.height());
38 _zoom = limitZoom(OSM::scale2zoom(qMax(sc.x(), -sc.y()), TILE_SIZE));
41 return _zoom;
44 qreal EmptyMap::resolution(const QRectF &rect)
46 return OSM::resolution(rect.center(), _zoom, TILE_SIZE);
49 int EmptyMap::zoomIn()
51 _zoom = qMin(_zoom + 1, OSM::ZOOMS.max());
52 return _zoom;
55 int EmptyMap::zoomOut()
57 _zoom = qMax(_zoom - 1, OSM::ZOOMS.min());
58 return _zoom;
61 void EmptyMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
63 Q_UNUSED(painter);
64 Q_UNUSED(rect);
65 Q_UNUSED(flags);
68 QPointF EmptyMap::ll2xy(const Coordinates &c)
70 qreal scale = OSM::zoom2scale(_zoom, TILE_SIZE);
71 QPointF m = OSM::ll2m(c);
72 return QPointF(m.x() / scale, m.y() / -scale);
75 Coordinates EmptyMap::xy2ll(const QPointF &p)
77 qreal scale = OSM::zoom2scale(_zoom, TILE_SIZE);
78 return OSM::m2ll(QPointF(p.x() * scale, -p.y() * scale));