Mapping of higher than current zoom level MapTiles
authorSami Rämö <sami.ramo@ixonos.com>
Tue, 13 Apr 2010 09:52:18 +0000 (12:52 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Tue, 13 Apr 2010 09:52:18 +0000 (12:52 +0300)
src/map/mapengine.cpp
src/map/mapengine.h
src/map/maptile.cpp
src/map/maptile.h

index 5651292..f7afee6 100644 (file)
@@ -187,6 +187,9 @@ void MapEngine::zoomIn()
 
     m_zoomLevel++;
     emit zoomLevelChanged(m_zoomLevel);
+
+    setZValues();
+
     /// @todo START FETCHING TILES
     calculateTileGrid();
 }
@@ -198,6 +201,23 @@ void MapEngine::zoomOut()
 
     m_zoomLevel--;
     emit zoomLevelChanged(m_zoomLevel);
+
+    setZValues();
+
     /// @todo START FETCHING TILES
     calculateTileGrid();
 }
+
+void MapEngine::setZValues()
+{
+    //qDebug() << __PRETTY_FUNCTION__ << "m_zoomLevel:" << m_zoomLevel;
+
+    QList<QGraphicsItem *> items = m_mapScene->items();
+
+    for (int i = 0; i < items.size(); ++i) {
+        MapTile *item = dynamic_cast<MapTile *>(items.at(i));
+        if (item)
+            item->setSceneLevel(m_zoomLevel);
+    }
+
+}
index 1d9cd98..beebbf9 100644 (file)
@@ -158,6 +158,16 @@ private:
     */
     void parseURL(const QUrl &url, int &zoom, int &x, int &y);
 
+    /**
+    * @brief Set zValues for all tiles in the scene
+    *
+    * Drawing order of MapTiles, which has the zoom level higher than the current
+    * zoom level, is reversed and those MapTiles are mapped between lower level MapTiles.
+    * Example: If maximum zoom level is 18 and current view zoomlevel is 15, then
+    * the drawing order from top to bottom is 15, 16, 14, 17, 13, 18, 12, 11, 10, ...
+    */
+    void setZValues();
+
     int tileMaxValue(int zoomLevel);
 
 
index 322ca6f..6cf0733 100644 (file)
@@ -49,6 +49,21 @@ void MapTile::setZoomLevel(int zoomLevel)
     setScale(zoomFactor);
 }
 
+void MapTile::setSceneLevel(int currentZoomLevel)
+{
+    if (currentZoomLevel < m_zoomLevel) {
+        /// @todo CHECK EQUATION
+        qreal aaa = static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + currentZoomLevel - (m_zoomLevel - currentZoomLevel)) + 0.5;
+        setZValue(aaa);
+    }
+    else
+        setZValue(static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + m_zoomLevel));
+
+//    qDebug() << __PRETTY_FUNCTION__ << "Tile:" << m_tileNumber
+//                                    << "m_zoomLevel" << m_zoomLevel
+//                                    << "zValue:" << zValue();
+}
+
 QPoint MapTile::tileNumber()
 {
     return m_tileNumber;
index a85e78e..79c81e7 100644 (file)
@@ -52,6 +52,8 @@ public:
     */
     void setZoomLevel(int zoomLevel);
 
+    void setSceneLevel(int currentZoomLevel);
+
     /**
     * @brief Getter for tile number
     *