static const int TILE_SIZE_X = 256; ///< Tile image size in x direction
static const int TILE_SIZE_Y = 256; ///< Tile image size in y direction
-static const int MIN_ZOOM_LEVEL = 0; ///< Minimum zoom level
-static const int MAX_ZOOM_LEVEL = 18; ///< Maximum zoom level
+
+static const int MIN_MAP_ZOOM_LEVEL = 0; ///< Minimum zoom level
+static const int MAX_MAP_ZOOM_LEVEL = 18; ///< Maximum zoom level
+static const int MIN_MAP_SCENE_NORMAL_LEVEL = MAX_MAP_ZOOM_LEVEL + 1;
+
static const int ZOOM_FPS = 30; ///< FPS for the zoom effect
static const qreal ZOOM_TIME = 0.25; ///< Length of the zoom effect (seconds)
+
static const qreal MIN_LATITUDE = -85.0511; ///< Minimum latitude value
static const qreal MAX_LATITUDE = 85.0511; ///< Maximum latitude value
static const qreal MIN_LONGITUDE = -180.0; ///< Minimum longitude value
static const qreal MAX_LONGITUDE = 180.0; ///< Maximum longitude value
+
static const int GRID_WIDTH = 4;
static const int GRID_HEIGHT = 4;
static const int GRID_PADDING = 1;
+
/**
* \var UNDEFINED
* \brief Value to be used when zoom level, tile numbers or position are not defined
void MapEngine::zoomIn()
{
- if (m_zoomLevel >= MAX_ZOOM_LEVEL)
+ if (m_zoomLevel >= MAX_MAP_ZOOM_LEVEL)
return;
m_zoomLevel++;
void MapEngine::zoomOut()
{
- if (m_zoomLevel <= MIN_ZOOM_LEVEL)
+ if (m_zoomLevel <= MIN_MAP_ZOOM_LEVEL)
return;
m_zoomLevel--;
static QPoint convertTileNumberToSceneCoordinate(int zoomLevel, QPoint tileNumber)
{
- int pow = 1 << (MAX_ZOOM_LEVEL - zoomLevel);
+ int pow = 1 << (MAX_MAP_ZOOM_LEVEL - zoomLevel);
int x = tileNumber.x() * TILE_SIZE_X * pow;
int y = tileNumber.y() * TILE_SIZE_Y * pow;
static QPoint convertSceneCoordinateToTileNumber(int zoomLevel, QPointF sceneCoordinate)
{
- int pow = 1 << (MAX_ZOOM_LEVEL - zoomLevel);
+ int pow = 1 << (MAX_MAP_ZOOM_LEVEL - zoomLevel);
int x = static_cast<int>(sceneCoordinate.x() / (TILE_SIZE_X*pow));
int y = static_cast<int>(sceneCoordinate.y() / (TILE_SIZE_Y*pow));
if ((latitude > MAX_LATITUDE) || (latitude < MIN_LATITUDE))
return QPoint(UNDEFINED, UNDEFINED);
- qreal z = static_cast<qreal>(1 << MAX_ZOOM_LEVEL);
+ qreal z = static_cast<qreal>(1 << MAX_MAP_ZOOM_LEVEL);
qreal x = static_cast<qreal>((longitude + 180.0) / 360.0);
qreal y = static_cast<qreal>((1.0 - log(tan(latitude * M_PI / 180.0) + 1.0
: QGraphicsScene(parent)
{
/// @todo Write test case for setting scene size
- const int maxTilesPerSide = (1 << MAX_ZOOM_LEVEL);
+ const int maxTilesPerSide = (1 << MAX_MAP_ZOOM_LEVEL);
const int maxPixelsPerSide = maxTilesPerSide * TILE_SIZE_X;
setSceneRect(0, 0, maxPixelsPerSide, maxPixelsPerSide);
}
m_zoomLevel = zoomLevel;
setPosition();
- setZValue(zoomLevel);
+ setZValue(static_cast<qreal>(MIN_MAP_SCENE_NORMAL_LEVEL + zoomLevel));
- qreal zoomFactor = (qreal)(1 << (MAX_ZOOM_LEVEL - m_zoomLevel));
+ qreal zoomFactor = static_cast<qreal>(1 << (MAX_MAP_ZOOM_LEVEL - m_zoomLevel));
setScale(zoomFactor);
}
{
const int maxTileNumber = (1 << m_zoomLevel) - 1;
- if ((m_zoomLevel >= MIN_ZOOM_LEVEL) && (m_zoomLevel <= MAX_ZOOM_LEVEL) &&
+ if ((m_zoomLevel >= MIN_MAP_ZOOM_LEVEL) && (m_zoomLevel <= MAX_MAP_ZOOM_LEVEL) &&
(m_tileNumber.x() >= 0) && (m_tileNumber.x() <= maxTileNumber) &&
(m_tileNumber.y() >= 0) && (m_tileNumber.y() <= maxTileNumber)) {
setPos(MapEngine::convertTileNumberToSceneCoordinate(m_zoomLevel, m_tileNumber));
void MapView::setZoomLevel(int zoomLevel)
{
- m_zoomTargetScale = pow(2, zoomLevel - MAX_ZOOM_LEVEL);
+ m_zoomTargetScale = pow(2, zoomLevel - MAX_MAP_ZOOM_LEVEL);
m_zoomScaleDelta = (m_zoomTargetScale - currentScale()) / (ZOOM_FPS * ZOOM_TIME);
startTimer(1000/ZOOM_FPS);