Re-factoring
authorSami Rämö <sami.ramo@ixonos.com>
Fri, 30 Jul 2010 10:43:33 +0000 (13:43 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Fri, 30 Jul 2010 10:43:33 +0000 (13:43 +0300)
 - Replaced MapEngine::sceneResolution() with
   MapScene::horizontalResolutionAtLatitude() and
   MapEngine::viewResolution()

src/map/mapengine.cpp
src/map/mapengine.h
src/map/mapscene.cpp
src/map/mapscene.h

index c993dfd..7425f56 100644 (file)
@@ -284,21 +284,6 @@ bool MapEngine::isCenterTileChanged(SceneCoordinate coordinate)
     return (centerTile != temp);
 }
 
-qreal MapEngine::sceneResolution()
-{
-    qDebug() << __PRETTY_FUNCTION__;
-
-    const int SHIFT = 200;
-
-    qreal scale = (1 << (OSM_MAX_ZOOM_LEVEL - m_zoomLevel));
-    GeoCoordinate centerCoordinate = centerGeoCoordinate();
-    SceneCoordinate shiftedSceneCoordinate(m_sceneCoordinate.x() + SHIFT * scale,
-                                           m_sceneCoordinate.y());
-    GeoCoordinate shiftedCoordinate(shiftedSceneCoordinate);
-    qreal dist = centerCoordinate.distanceTo(shiftedCoordinate);
-    return (dist / SHIFT);
-}
-
 void MapEngine::mapImageReceived(int zoomLevel, int x, int y, const QPixmap &image)
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -423,7 +408,7 @@ void MapEngine::setCenterPosition(SceneCoordinate coordinate)
     }
 
     m_mapScene->spanItems(m_zoomLevel, m_sceneCoordinate, m_viewSize);
-    emit newMapResolution(sceneResolution());
+    emit newMapResolution(viewResolution());
 }
 
 void MapEngine::setGPSEnabled(bool enabled)
@@ -529,6 +514,15 @@ void MapEngine::viewResized(const QSize &size)
     m_mapScene->setSceneVerticalOverlap(m_viewSize.height(), m_zoomLevel);
 }
 
+qreal MapEngine::viewResolution()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    qreal scale = (1 << (OSM_MAX_ZOOM_LEVEL - m_zoomLevel));
+
+    return MapScene::horizontalResolutionAtLatitude(centerGeoCoordinate().latitude()) * scale;
+}
+
 void MapEngine::viewZoomFinished()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -552,7 +546,7 @@ void MapEngine::zoomed()
     getTiles(m_sceneCoordinate);
     m_mapScene->setSceneVerticalOverlap(m_viewSize.height(), m_zoomLevel);
     m_mapScene->spanItems(m_zoomLevel, m_sceneCoordinate, m_viewSize);
-    emit newMapResolution(sceneResolution());
+    emit newMapResolution(viewResolution());
 }
 
 void MapEngine::zoomIn()
index 6ec35ef..b421974 100644 (file)
@@ -220,13 +220,6 @@ private:
     bool isCenterTileChanged(SceneCoordinate coordinate);
 
     /**
-     * @brief Calculate scale at the map center of the map in meters/pixel
-     *
-     * @return qreal Scale of the map in meters/pixel
-     */
-    qreal sceneResolution();
-
-    /**
      * @brief Set size of tiles grid based on view size
      *
      * @param viewSize Current view size
@@ -242,6 +235,13 @@ private:
     void updateViewTilesSceneRect();
 
     /**
+     * @brief Calculate scale at the map center of the map in meters/pixel
+     *
+     * @return qreal Scale of the map in meters/pixel
+     */
+    qreal viewResolution();
+
+    /**
      * @brief This method is ran always when the map is zoomed
      *
      * This method is the right place for all actions which must be done when ever map is zoomed.
index d4e3366..3c74c60 100644 (file)
@@ -77,6 +77,23 @@ void MapScene::enqueueRemoveStackedTiles(MapTile *newTile)
     }
 }
 
+qreal MapScene::horizontalResolutionAtLatitude(double latitude)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    const int SHIFT = 200;
+
+    GeoCoordinate from = GeoCoordinate(latitude, 0);
+
+    SceneCoordinate fromScene = SceneCoordinate(from);
+    SceneCoordinate toScene(fromScene.x() + SHIFT, fromScene.y());
+    GeoCoordinate to(toScene);
+
+    qreal distance = from.distanceTo(to);
+
+    return (distance / SHIFT);
+}
+
 void MapScene::moveIntersectingItemsHorizontally(QRect from, int distance)
 {
     qDebug() << __PRETTY_FUNCTION__;
index 95ee0cf..695a0de 100644 (file)
@@ -72,6 +72,14 @@ public:
     void enqueueRemoveStackedTiles(MapTile *newTile);
 
     /**
+    * @brief Calculates scene horizontal resolution in given latitude
+    *
+    * @param latitude Resolution is calculated in this latitude
+    * @returns Scene horizontal resolution (meters/pixel)
+    */
+    static qreal horizontalResolutionAtLatitude(double latitude);
+
+    /**
     * @brief Returns tile mathcing given hash key
     *
     * @param hashKey