diff --git a/src/atlas.cpp b/src/atlas.cpp index 8a1654b2..6ceeffe2 100644 --- a/src/atlas.cpp +++ b/src/atlas.cpp @@ -118,6 +118,7 @@ Atlas::Atlas(const QString &fileName, QObject *parent) : Map(parent) _valid = false; _zoom = 0; _name = fi.dir().dirName(); + _ci = -1; _cz = -1; if (!isAtlas(tar, fileName)) return; @@ -233,35 +234,33 @@ qreal Atlas::zoomOut() return _zoom; } -QPointF Atlas::ll2xy(const Coordinates &c) const +QPointF Atlas::ll2xy(const Coordinates &c) { - static int idx = -1; - static int zoom = -1; QPointF pp; - if (zoom != _zoom) { - idx = -1; - zoom = _zoom; + if (_cz != _zoom) { + _ci = -1; + _cz = _zoom; } - if (idx >= 0) - pp = _maps.at(idx)->ll2pp(c); - if (idx < 0 || !_bounds.at(idx).first.contains(pp)) { - idx = _zooms.at(zoom).first; - for (int i = _zooms.at(zoom).first; i <= _zooms.at(zoom).second; i++) { + if (_ci >= 0) + pp = _maps.at(_ci)->ll2pp(c); + if (_ci < 0 || !_bounds.at(_ci).first.contains(pp)) { + _ci = _zooms.at(_zoom).first; + for (int i = _zooms.at(_zoom).first; i <= _zooms.at(_zoom).second; i++) { pp = _maps.at(i)->ll2pp(c); if (_bounds.at(i).first.contains(pp)) { - idx = i; + _ci = i; break; } } } - QPointF p = _maps.at(idx)->pp2xy(pp); - return p + _bounds.at(idx).second.topLeft(); + QPointF p = _maps.at(_ci)->pp2xy(pp); + return p + _bounds.at(_ci).second.topLeft(); } -Coordinates Atlas::xy2ll(const QPointF &p) const +Coordinates Atlas::xy2ll(const QPointF &p) { int idx = _zooms.at(_zoom).first; diff --git a/src/atlas.h b/src/atlas.h index 871be6b0..80b8f6b6 100644 --- a/src/atlas.h +++ b/src/atlas.h @@ -24,8 +24,8 @@ public: qreal zoomIn(); qreal zoomOut(); - QPointF ll2xy(const Coordinates &c) const; - Coordinates xy2ll(const QPointF &p) const; + QPointF ll2xy(const Coordinates &c); + Coordinates xy2ll(const QPointF &p); void draw(QPainter *painter, const QRectF &rect); @@ -48,6 +48,8 @@ private: QVector > _zooms; QVector > _bounds; int _zoom; + + int _ci, _cz; }; #endif // ATLAS_H diff --git a/src/emptymap.cpp b/src/emptymap.cpp index 71355584..681b2d39 100644 --- a/src/emptymap.cpp +++ b/src/emptymap.cpp @@ -64,13 +64,13 @@ void EmptyMap::draw(QPainter *painter, const QRectF &rect) painter->fillRect(rect, Qt::white); } -QPointF EmptyMap::ll2xy(const Coordinates &c) const +QPointF EmptyMap::ll2xy(const Coordinates &c) { QPointF m = Mercator().ll2xy(c); return QPointF(m.x() / _scale, m.y() / -_scale); } -Coordinates EmptyMap::xy2ll(const QPointF &p) const +Coordinates EmptyMap::xy2ll(const QPointF &p) { QPointF m(p.x() * _scale, -p.y() * _scale); return Mercator().xy2ll(m); diff --git a/src/emptymap.h b/src/emptymap.h index 2efd10c7..0ccf3fce 100644 --- a/src/emptymap.h +++ b/src/emptymap.h @@ -20,8 +20,8 @@ public: qreal zoomIn(); qreal zoomOut(); - QPointF ll2xy(const Coordinates &c) const; - Coordinates xy2ll(const QPointF &p) const; + QPointF ll2xy(const Coordinates &c); + Coordinates xy2ll(const QPointF &p); void draw(QPainter *painter, const QRectF &rect); diff --git a/src/map.h b/src/map.h index 77b6f37e..add0db07 100644 --- a/src/map.h +++ b/src/map.h @@ -25,8 +25,8 @@ public: virtual qreal zoomIn() = 0; virtual qreal zoomOut() = 0; - virtual QPointF ll2xy(const Coordinates &c) const = 0; - virtual Coordinates xy2ll(const QPointF &p) const = 0; + virtual QPointF ll2xy(const Coordinates &c) = 0; + virtual Coordinates xy2ll(const QPointF &p) = 0; virtual void draw(QPainter *painter, const QRectF &rect) = 0; diff --git a/src/offlinemap.h b/src/offlinemap.h index 7170b527..a89ce503 100644 --- a/src/offlinemap.h +++ b/src/offlinemap.h @@ -31,9 +31,9 @@ public: qreal zoomIn() {return 1.0;} qreal zoomOut() {return 1.0;} - QPointF ll2xy(const Coordinates &c) const + QPointF ll2xy(const Coordinates &c) {return _transform.map(_projection->ll2xy(c));} - Coordinates xy2ll(const QPointF &p) const + Coordinates xy2ll(const QPointF &p) {return _projection->xy2ll(_inverted.map(p));} void draw(QPainter *painter, const QRectF &rect); diff --git a/src/onlinemap.cpp b/src/onlinemap.cpp index 5cff4dea..94daecf2 100644 --- a/src/onlinemap.cpp +++ b/src/onlinemap.cpp @@ -232,13 +232,13 @@ void OnlineMap::draw(QPainter *painter, const QRectF &rect) } } -QPointF OnlineMap::ll2xy(const Coordinates &c) const +QPointF OnlineMap::ll2xy(const Coordinates &c) { QPointF m = Mercator().ll2xy(c); return QPointF(m.x() / _scale, m.y() / -_scale); } -Coordinates OnlineMap::xy2ll(const QPointF &p) const +Coordinates OnlineMap::xy2ll(const QPointF &p) { QPointF m(p.x() * _scale, -p.y() * _scale); return Mercator().xy2ll(m); diff --git a/src/onlinemap.h b/src/onlinemap.h index 22b40553..94d967d5 100644 --- a/src/onlinemap.h +++ b/src/onlinemap.h @@ -23,8 +23,8 @@ public: qreal zoomIn(); qreal zoomOut(); - QPointF ll2xy(const Coordinates &c) const; - Coordinates xy2ll(const QPointF &p) const; + QPointF ll2xy(const Coordinates &c); + Coordinates xy2ll(const QPointF &p); void draw(QPainter *painter, const QRectF &rect);