diff --git a/src/map/aqmmap.cpp b/src/map/aqmmap.cpp index 5b06f1b5..c07c9d9a 100644 --- a/src/map/aqmmap.cpp +++ b/src/map/aqmmap.cpp @@ -191,8 +191,23 @@ bool AQMMap::readHeader() if (!parseLevel(data, zoom, tileSize, bounds)) return false; - _bounds = RectC(OSM::tile2ll(bounds.topLeft(), zoom), - OSM::tile2ll(bounds.bottomRight(), zoom)); + if (_bounds.isNull()) { + double minX = OSM::index2mercator(qMin((1< tiles; for (int i = 0; i < width; i++) { @@ -373,11 +392,13 @@ void AQMMap::draw(QPainter *painter, const QRectF &rect, Flags flags) + QString::number(t.x()) + "_" + QString::number(t.y()); if (QPixmapCache::find(key, &pm)) { - QPointF tp(tl.x() + (t.x() - tile.x()) * tileSize(), - tl.y() + (t.y() - tile.y()) * tileSize()); + QPointF tp(qMax(tl.x(), b.left()) + (t.x() - tile.x()) + * tileSize(), qMax(tl.y(), b.top()) + (t.y() - tile.y()) + * tileSize()); drawTile(painter, pm, tp); - } else + } else { tiles.append(AQTile(t, tileData(t), key)); + } } } @@ -389,10 +410,12 @@ void AQMMap::draw(QPainter *painter, const QRectF &rect, Flags flags) QPixmap pm(mt.pixmap()); if (pm.isNull()) continue; + QPixmapCache::insert(mt.key(), pm); - QPointF tp(tl.x() + (mt.xy().x() - tile.x()) * tileSize(), - tl.y() + (mt.xy().y() - tile.y()) * tileSize()); + QPointF tp(qMax(tl.x(), b.left()) + (mt.xy().x() - tile.x()) + * tileSize(), qMax(tl.y(), b.top()) + (mt.xy().y() - tile.y()) + * tileSize()); drawTile(painter, pm, tp); } } diff --git a/src/map/aqmmap.h b/src/map/aqmmap.h index 06b3ef4f..f1f0f86e 100644 --- a/src/map/aqmmap.h +++ b/src/map/aqmmap.h @@ -18,6 +18,7 @@ public: QString name() const {return _name;} QRectF bounds(); + RectC llBounds() {return _bounds;} qreal resolution(const QRectF &rect); int zoom() const {return _zoom;} diff --git a/src/map/mbtilesmap.cpp b/src/map/mbtilesmap.cpp index 34a82205..0a9732b9 100644 --- a/src/map/mbtilesmap.cpp +++ b/src/map/mbtilesmap.cpp @@ -1,18 +1,18 @@ #include #include #include -#include #include #include #include #include #include -#include "common/rectc.h" #include "common/util.h" #include "osm.h" #include "mbtilesmap.h" +#define META_TYPE(type) static_cast(type) + class MBTile { public: @@ -43,12 +43,6 @@ private: QImage _image; }; -#define META_TYPE(type) static_cast(type) - -static double index2mercator(int index, int zoom) -{ - return rad2deg(-M_PI + 2 * M_PI * ((double)index / (1< -#include #include "common/range.h" #include "map.h" diff --git a/src/map/osm.cpp b/src/map/osm.cpp index c12480eb..e090f97b 100644 --- a/src/map/osm.cpp +++ b/src/map/osm.cpp @@ -21,11 +21,9 @@ QPoint OSM::mercator2tile(const QPointF &m, int zoom) qFloor((1.0 - (m.y() / 180.0)) / 2.0 * (1<