summaryrefslogtreecommitdiff
path: root/src/location/maps
diff options
context:
space:
mode:
Diffstat (limited to 'src/location/maps')
-rw-r--r--src/location/maps/qgeocameradata.cpp74
-rw-r--r--src/location/maps/qgeocameradata_p.h13
-rw-r--r--src/location/maps/qgeocameratiles.cpp91
-rw-r--r--src/location/maps/qgeocameratiles_p.h7
-rw-r--r--src/location/maps/qgeomap.cpp9
-rw-r--r--src/location/maps/qgeomapcontroller.cpp10
-rw-r--r--src/location/maps/qgeomapgeometry.cpp91
7 files changed, 92 insertions, 203 deletions
diff --git a/src/location/maps/qgeocameradata.cpp b/src/location/maps/qgeocameradata.cpp
index 9ce169dd..54bb08ea 100644
--- a/src/location/maps/qgeocameradata.cpp
+++ b/src/location/maps/qgeocameradata.cpp
@@ -62,13 +62,10 @@ public:
bool operator == (const QGeoCameraDataPrivate &rhs) const;
QGeoCoordinate center_;
- double distance_;
double bearing_;
double tilt_;
double roll_;
- double aspectRatio_;
- int zoomLevel_;
- double zoomFactor_;
+ double zoomLevel_;
QWeakPointer<QGeoCoordinateInterpolator> interpolator_;
};
@@ -76,36 +73,27 @@ public:
QGeoCameraDataPrivate::QGeoCameraDataPrivate()
: QSharedData(),
center_(-27.5, 153),
- distance_(0.0),
bearing_(0.0),
tilt_(0.0),
roll_(0.0),
- aspectRatio_(1.0),
- zoomLevel_(9),
- zoomFactor_(9.0) {}
+ zoomLevel_(9.0) {}
QGeoCameraDataPrivate::QGeoCameraDataPrivate(const QGeoCameraDataPrivate &rhs)
: QSharedData(rhs),
center_(rhs.center_),
- distance_(rhs.distance_),
bearing_(rhs.bearing_),
tilt_(rhs.tilt_),
roll_(rhs.roll_),
- aspectRatio_(rhs.aspectRatio_),
zoomLevel_(rhs.zoomLevel_),
- zoomFactor_(rhs.zoomFactor_),
interpolator_(rhs.interpolator_) {}
QGeoCameraDataPrivate& QGeoCameraDataPrivate::operator = (const QGeoCameraDataPrivate &rhs)
{
center_ = rhs.center_;
- distance_ = rhs.distance_;
bearing_ = rhs.bearing_;
tilt_ = rhs.tilt_;
roll_ = rhs.roll_;
- aspectRatio_ = rhs.aspectRatio_;
zoomLevel_ = rhs.zoomLevel_;
- zoomFactor_ = rhs.zoomFactor_;
QSharedPointer<QGeoCoordinateInterpolator> i = rhs.interpolator_.toStrongRef();
if (i)
interpolator_ = i.toWeakRef();
@@ -118,13 +106,10 @@ QGeoCameraDataPrivate& QGeoCameraDataPrivate::operator = (const QGeoCameraDataPr
bool QGeoCameraDataPrivate::operator == (const QGeoCameraDataPrivate &rhs) const
{
return ((center_ == rhs.center_)
- && (distance_ == rhs.distance_)
&& (bearing_ == rhs.bearing_)
&& (tilt_ == rhs.tilt_)
&& (roll_ == rhs.roll_)
- && (aspectRatio_ == rhs.aspectRatio_)
- && (zoomLevel_ == rhs.zoomLevel_)
- && (zoomFactor_ == rhs.zoomFactor_));
+ && (zoomLevel_ == rhs.zoomLevel_));
}
QVariant cameraInterpolator(const QGeoCameraData &start,
@@ -149,7 +134,7 @@ QVariant cameraInterpolator(const QGeoCameraData &start,
result.setBearing(sf * start.bearing() + ef * end.bearing());
result.setTilt(sf * start.tilt() + ef * end.tilt());
result.setRoll(sf * start.roll() + ef * end.roll());
- result.setZoomFactor(sf * start.zoomFactor() + ef * end.zoomFactor());
+ result.setZoomLevel(sf * start.zoomLevel() + ef * end.zoomLevel());
return QVariant::fromValue(result);
}
@@ -159,7 +144,6 @@ QGeoCameraData::QGeoCameraData()
{
qRegisterMetaType<QGeoCameraData>();
qRegisterAnimationInterpolator<QGeoCameraData>(cameraInterpolator);
- setZoomFactor(4.0);
}
QGeoCameraData::QGeoCameraData(const QGeoCameraData &other)
@@ -225,60 +209,16 @@ double QGeoCameraData::roll() const
return d->roll_;
}
-void QGeoCameraData::setAspectRatio(double aspectRatio)
+void QGeoCameraData::setZoomLevel(double zoomFactor)
{
- d->aspectRatio_ = aspectRatio;
+ d->zoomLevel_ = zoomFactor;
}
-double QGeoCameraData::aspectRatio() const
-{
- return d->aspectRatio_;
-}
-
-/*
- Distance and zoomLevel are only writeable for debugging purposes.
- The setters will eventually go away and then zoomFactor will be
- the way to set these.
-*/
-
-void QGeoCameraData::setDistance(double distance)
-{
- d->zoomFactor_ = -1.0 * log(distance) / log(2.0);
- d->distance_ = distance;
-}
-
-double QGeoCameraData::distance() const
-{
- return d->distance_;
-}
-
-void QGeoCameraData::setZoomLevel(int zoomLevel)
-{
- d->zoomLevel_ = zoomLevel;
-}
-
-int QGeoCameraData::zoomLevel() const
+double QGeoCameraData::zoomLevel() const
{
return d->zoomLevel_;
}
-void QGeoCameraData::setZoomFactor(double zoomFactor)
-{
- d->zoomLevel_ = floor(zoomFactor);
-// qDebug() << __FUNCTION__ << zoomFactor << d->zoomLevel_;
-
- // FIXME this will need some tuning
-
- d->distance_ = 1.0 / pow(2.0, zoomFactor);
-
- d->zoomFactor_ = zoomFactor;
-}
-
-double QGeoCameraData::zoomFactor() const
-{
- return d->zoomFactor_;
-}
-
void QGeoCameraData::setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator)
{
d->interpolator_ = interpolator.toWeakRef();
diff --git a/src/location/maps/qgeocameradata_p.h b/src/location/maps/qgeocameradata_p.h
index 675e55ba..46822a3a 100644
--- a/src/location/maps/qgeocameradata_p.h
+++ b/src/location/maps/qgeocameradata_p.h
@@ -90,17 +90,8 @@ public:
void setRoll(double roll);
double roll() const;
- void setAspectRatio(double aspectRatio);
- double aspectRatio() const;
-
- void setDistance(double distance);
- double distance() const;
-
- void setZoomLevel(int zoomLevel);
- int zoomLevel() const;
-
- void setZoomFactor(double zoomFactor);
- double zoomFactor() const;
+ void setZoomLevel(double zoomLevel);
+ double zoomLevel() const;
void setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator);
QSharedPointer<QGeoCoordinateInterpolator> coordinateInterpolator() const;
diff --git a/src/location/maps/qgeocameratiles.cpp b/src/location/maps/qgeocameratiles.cpp
index 19f40799..87eff04d 100644
--- a/src/location/maps/qgeocameratiles.cpp
+++ b/src/location/maps/qgeocameratiles.cpp
@@ -83,14 +83,12 @@ public:
int maxZoom_;
QSet<QGeoTileSpec> tiles_;
- QSet<QGeoTileSpec> tilesLeft_;
- QSet<QGeoTileSpec> tilesRight_;
+ int intZoomLevel_;
+ int sideLength_;
void updateMetadata();
void updateGeometry();
- double sideLength() const;
-
Frustum frustum() const;
class LengthSorter {
@@ -140,6 +138,10 @@ void QGeoCameraTiles::setCamera(const QGeoCameraData &camera)
return;
d->camera_ = camera;
+
+ d->intZoomLevel_ = static_cast<int>(floor(d->camera_.zoomLevel()));
+ d->sideLength_ = 1 << d->intZoomLevel_;
+
d->updateGeometry();
}
@@ -204,15 +206,11 @@ QSet<QGeoTileSpec> QGeoCameraTiles::tiles() const
return d->tiles_;
}
-QPair<QSet<QGeoTileSpec>, QSet<QGeoTileSpec> > QGeoCameraTiles::tilesSplitByDateline() const
-{
- Q_D(const QGeoCameraTiles);
- return QPair<QSet<QGeoTileSpec>, QSet<QGeoTileSpec> >(d->tilesLeft_, d->tilesRight_);
-}
-
QGeoCameraTilesPrivate::QGeoCameraTilesPrivate()
: tileSize_(0),
- maxZoom_(0) {}
+ maxZoom_(0),
+ intZoomLevel_(0),
+ sideLength_(0) {}
QGeoCameraTilesPrivate::~QGeoCameraTilesPrivate() {}
@@ -231,37 +229,11 @@ void QGeoCameraTilesPrivate::updateMetadata()
}
tiles_ = newTiles;
-
- newTiles.clear();
-
- i = tilesLeft_.constBegin();
- end = tilesLeft_.constEnd();
-
- for (; i != end; ++i) {
- QGeoTileSpec tile = *i;
- newTiles.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), tile.zoom(), tile.x(), tile.y()));
- }
-
- tilesLeft_ = newTiles;
-
- newTiles.clear();
-
- i = tilesRight_.constBegin();
- end = tilesRight_.constEnd();
-
- for (; i != end; ++i) {
- QGeoTileSpec tile = *i;
- newTiles.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), tile.zoom(), tile.x(), tile.y()));
- }
-
- tilesRight_ = newTiles;
}
void QGeoCameraTilesPrivate::updateGeometry()
{
tiles_.clear();
- tilesLeft_.clear();
- tilesRight_.clear();
// Find the frustum from the camera / screen / viewport information
Frustum f = frustum();
@@ -273,31 +245,24 @@ void QGeoCameraTilesPrivate::updateGeometry()
QPair<Polygon, Polygon> polygons = clipFootprintToMap(footprint);
if (!polygons.first.isEmpty()) {
- tilesLeft_ = tilesFromPolygon(polygons.first);
- tiles_.unite(tilesLeft_);
+ QSet<QGeoTileSpec> tilesLeft = tilesFromPolygon(polygons.first);
+ tiles_.unite(tilesLeft);
}
if (!polygons.second.isEmpty()) {
- tilesRight_ = tilesFromPolygon(polygons.second);
- tiles_.unite(tilesRight_);
+ QSet<QGeoTileSpec> tilesRight = tilesFromPolygon(polygons.second);
+ tiles_.unite(tilesRight);
}
}
-double QGeoCameraTilesPrivate::sideLength() const
-{
- return double(1 << camera_.zoomLevel());
-}
-
Frustum QGeoCameraTilesPrivate::frustum() const
{
- int zpow2 = 1 << camera_.zoomLevel();
-
- QDoubleVector3D center = zpow2 * QGeoProjection::coordToMercator(camera_.center());
+ QDoubleVector3D center = sideLength_ * QGeoProjection::coordToMercator(camera_.center());
center.setZ(0.0);
double f = qMin(screenSize_.width(), screenSize_.height()) / (1.0 * tileSize_);
- double z = pow(2.0, camera_.zoomFactor() - camera_.zoomLevel());
+ double z = pow(2.0, camera_.zoomLevel() - intZoomLevel_);
double altitude = f / (2.0 * z);
QDoubleVector3D eye = center;
@@ -307,7 +272,7 @@ Frustum QGeoCameraTilesPrivate::frustum() const
QDoubleVector3D side = QDoubleVector3D::normal(view, QDoubleVector3D(0.0, 1.0, 0.0));
QDoubleVector3D up = QDoubleVector3D::normal(side, view);
- double nearPlane = zpow2 / (1.0 * tileSize_ * (1 << maxZoom_));
+ double nearPlane = sideLength_ / (1.0 * tileSize_ * (1 << maxZoom_));
double farPlane = 3.0;
double aspectRatio = 1.0 * screenSize_.width() / screenSize_.height();
@@ -539,7 +504,7 @@ QPair<Polygon, Polygon> QGeoCameraTilesPrivate::clipFootprintToMap(const Polygon
bool clipY0 = false;
bool clipY1 = false;
- double side = sideLength();
+ double side = 1.0 * sideLength_;
typedef Polygon::iterator iter;
typedef Polygon::const_iterator const_iter;
@@ -635,18 +600,12 @@ QSet<QGeoTileSpec> QGeoCameraTilesPrivate::tilesFromPolygon(const Polygon &polyg
if (numPoints == 0)
return QSet<QGeoTileSpec>();
- int zoomLevel = camera_.zoomLevel();
-
int minY = -1;
int maxY = -1;
- int zpow2 = 1 << zoomLevel;
-
QVector<int> tilesX(polygon.size());
QVector<int> tilesY(polygon.size());
- double side = sideLength();
-
for (int i = 0; i < numPoints; ++i) {
QDoubleVector2D p = polygon.at(i).toVector2D();
@@ -654,15 +613,15 @@ QSet<QGeoTileSpec> QGeoCameraTilesPrivate::tilesFromPolygon(const Polygon &polyg
int x = 0;
int y = 0;
- if (qFuzzyCompare(p.x(), side))
- x = zpow2 - 1;
+ if (qFuzzyCompare(p.x(), sideLength_ * 1.0))
+ x = sideLength_ - 1;
else
- x = static_cast<int>(p.x()) % zpow2;
+ x = static_cast<int>(p.x()) % sideLength_;
- if (qFuzzyCompare(p.y(), side))
- y = zpow2 - 1;
+ if (qFuzzyCompare(p.y(), sideLength_ * 1.0))
+ y = sideLength_ - 1;
else
- y = static_cast<int>(p.y()) % zpow2;
+ y = static_cast<int>(p.y()) % sideLength_;
if (minY == -1) {
minY = y;
@@ -733,13 +692,15 @@ QSet<QGeoTileSpec> QGeoCameraTilesPrivate::tilesFromPolygon(const Polygon &polyg
QSet<QGeoTileSpec> results;
+ int z = intZoomLevel_;
+
int size = map.minX.size();
for (int i = 0; i < size; ++i) {
int y = map.minY + i;
int minX = map.minX[i];
int maxX = map.maxX[i];
for (int x = minX; x <= maxX; ++x) {
- results.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), zoomLevel, x, y));
+ results.insert(QGeoTileSpec(pluginString_, mapType_.mapId(), z, x, y));
}
}
diff --git a/src/location/maps/qgeocameratiles_p.h b/src/location/maps/qgeocameratiles_p.h
index 503dbc65..2f3bbbc6 100644
--- a/src/location/maps/qgeocameratiles_p.h
+++ b/src/location/maps/qgeocameratiles_p.h
@@ -73,14 +73,13 @@ public:
void setCamera(const QGeoCameraData &camera);
void setScreenSize(const QSize &size);
- void setPluginString(const QString &pluginString);
- void setMapType(const QGeoMapType &mapType);
-
void setTileSize(int tileSize);
void setMaximumZoomLevel(int maxZoom);
+ void setPluginString(const QString &pluginString);
+ void setMapType(const QGeoMapType &mapType);
+
QSet<QGeoTileSpec> tiles() const;
- QPair<QSet<QGeoTileSpec>, QSet<QGeoTileSpec> > tilesSplitByDateline() const;
private:
QGeoCameraTilesPrivate *d_ptr;
diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp
index 2cd424fc..84471d0f 100644
--- a/src/location/maps/qgeomap.cpp
+++ b/src/location/maps/qgeomap.cpp
@@ -278,11 +278,11 @@ void QGeoMapPrivate::setCameraData(const QGeoCameraData &cameraData)
if (manager_) {
QGeoCameraCapabilities capabilities = manager_->cameraCapabilities();
- if (cameraData_.zoomFactor() < capabilities.minimumZoomLevel())
- cameraData_.setZoomFactor(capabilities.minimumZoomLevel());
+ if (cameraData_.zoomLevel() < capabilities.minimumZoomLevel())
+ cameraData_.setZoomLevel(capabilities.minimumZoomLevel());
- if (cameraData_.zoomFactor() > capabilities.maximumZoomLevel())
- cameraData_.setZoomFactor(capabilities.maximumZoomLevel());
+ if (cameraData_.zoomLevel() > capabilities.maximumZoomLevel())
+ cameraData_.setZoomLevel(capabilities.maximumZoomLevel());
if (!capabilities.supportsBearing())
cameraData_.setBearing(0.0);
@@ -301,7 +301,6 @@ void QGeoMapPrivate::setCameraData(const QGeoCameraData &cameraData)
cameraData_.setRoll(0.0);
}
- cameraData_.setAspectRatio(aspectRatio_);
cameraData_.setCoordinateInterpolator(mapGeometry_->coordinateInterpolator().toWeakRef());
cameraTiles_->setCamera(cameraData_);
diff --git a/src/location/maps/qgeomapcontroller.cpp b/src/location/maps/qgeomapcontroller.cpp
index e08e3960..842912d7 100644
--- a/src/location/maps/qgeomapcontroller.cpp
+++ b/src/location/maps/qgeomapcontroller.cpp
@@ -134,8 +134,8 @@ void QGeoMapController::cameraDataChanged(const QGeoCameraData &cameraData)
if (oldCameraData_.roll() != cameraData.roll())
emit rollChanged(cameraData.roll());
- if (oldCameraData_.zoomFactor() != cameraData.zoomFactor())
- emit zoomChanged(cameraData.zoomFactor());
+ if (oldCameraData_.zoomLevel() != cameraData.zoomLevel())
+ emit zoomChanged(cameraData.zoomLevel());
oldCameraData_ = cameraData;
}
@@ -206,17 +206,17 @@ void QGeoMapController::setRoll(qreal roll)
qreal QGeoMapController::zoom() const
{
- return map_->cameraData().zoomFactor();
+ return map_->cameraData().zoomLevel();
}
void QGeoMapController::setZoom(qreal zoom)
{
QGeoCameraData cd = map_->cameraData();
- if (zoom == cd.zoomFactor())
+ if (zoom == cd.zoomLevel())
return;
- cd.setZoomFactor(zoom);
+ cd.setZoomLevel(zoom);
map_->setCameraData(cd);
}
diff --git a/src/location/maps/qgeomapgeometry.cpp b/src/location/maps/qgeomapgeometry.cpp
index 190d4762..dda47c10 100644
--- a/src/location/maps/qgeomapgeometry.cpp
+++ b/src/location/maps/qgeomapgeometry.cpp
@@ -133,6 +133,9 @@ public:
double scaleFactor_;
+ int intZoomLevel_;
+ int sideLength_;
+
QHash<QGeoTileSpec, QGLSceneNode*> nodes_;
int minTileX_;
@@ -200,6 +203,8 @@ void QGeoMapGeometry::setCameraData(const QGeoCameraData &cameraData)
{
Q_D(QGeoMapGeometry);
d->cameraData_ = cameraData;
+ d->intZoomLevel_ = static_cast<int>(floor(d->cameraData_.zoomLevel()));
+ d->sideLength_ = 1 << d->intZoomLevel_;
}
void QGeoMapGeometry::setVisibleTiles(const QSet<QGeoTileSpec> &tiles)
@@ -261,6 +266,8 @@ QGeoMapGeometryPrivate::QGeoMapGeometryPrivate()
camera_(new QGLCamera()),
sceneNode_(new QGLSceneNode()),
scaleFactor_(10.0),
+ intZoomLevel_(0),
+ sideLength_(0),
minTileX_(-1),
minTileY_(-1),
maxTileX_(-1),
@@ -280,37 +287,33 @@ QGeoMapGeometryPrivate::~QGeoMapGeometryPrivate()
QDoubleVector2D QGeoMapGeometryPrivate::screenPositionToMercator(const QPointF &pos) const
{
- int zpow2 = 1 << cameraData_.zoomLevel();
-
double x = mercatorWidth_ * (((pos.x() - screenOffsetX_) / screenWidth_) - 0.5);
x += mercatorCenterX_;
- if (x > 1.0 * zpow2)
- x -= 1.0 * zpow2;
+ if (x > 1.0 * sideLength_)
+ x -= 1.0 * sideLength_;
if (x < 0.0)
- x += 1.0 * zpow2;
+ x += 1.0 * sideLength_;
- x /= 1.0 * zpow2;
+ x /= 1.0 * sideLength_;
double y = mercatorHeight_ * (((pos.y() - screenOffsetY_) / screenHeight_) - 0.5);
y += mercatorCenterY_;
- y /= 1.0 * zpow2;
+ y /= 1.0 * sideLength_;
return QDoubleVector2D(x, y);
}
QPointF QGeoMapGeometryPrivate::mercatorToScreenPosition(const QDoubleVector2D &mercator) const
{
- int zpow2 = 1 << cameraData_.zoomLevel();
-
- double mx = zpow2 * mercator.x();
+ double mx = sideLength_ * mercator.x();
double lb = mercatorCenterX_ - mercatorWidth_ / 2.0;
if (lb < 0.0)
- lb += zpow2;
+ lb += sideLength_;
double ub = mercatorCenterX_ + mercatorWidth_ / 2.0;
- if (zpow2 < ub)
- ub -= zpow2;
+ if (sideLength_ < ub)
+ ub -= sideLength_;
double m = (mx - mercatorCenterX_) / mercatorWidth_;
@@ -318,28 +321,27 @@ QPointF QGeoMapGeometryPrivate::mercatorToScreenPosition(const QDoubleVector2D &
if (qFuzzyCompare(ub - lb + 1.0, 1.0) || (ub < lb) ) {
if (mercatorCenterX_ < ub) {
if (lb < mx) {
- m = (mx - mercatorCenterX_ - zpow2) / mercatorWidth_;
+ m = (mx - mercatorCenterX_ - sideLength_) / mercatorWidth_;
}
} else if (lb < mercatorCenterX_) {
if (mx < ub) {
- m = (mx - mercatorCenterX_ + zpow2) / mercatorWidth_;
+ m = (mx - mercatorCenterX_ + sideLength_) / mercatorWidth_;
}
}
}
double x = screenWidth_ * (0.5 + m);
- double y = screenHeight_ * (0.5 + (zpow2 * mercator.y() - mercatorCenterY_) / mercatorHeight_);
+ double y = screenHeight_ * (0.5 + (sideLength_ * mercator.y() - mercatorCenterY_) / mercatorHeight_);
return QPointF(x + screenOffsetX_, y + screenOffsetY_);
}
void QGeoMapGeometryPrivate::addTile(const QGeoTileSpec &spec, QGLTexture2D *texture)
{
- int zpow2 = 1 << cameraData_.zoomLevel();
int x = spec.x();
if (x < tileXWrapsBelow_)
- x += zpow2;
+ x += sideLength_;
if ((x < minTileX_)
|| (maxTileX_ < x)
@@ -450,7 +452,6 @@ void QGeoMapGeometryPrivate::setTileBounds()
iter i = visibleTiles_.constBegin();
iter end = visibleTiles_.constEnd();
- int zpow2 = 1 << cameraData_.zoomLevel();
bool hasFarLeft = false;
bool hasFarRight = false;
bool hasMidLeft = false;
@@ -460,11 +461,11 @@ void QGeoMapGeometryPrivate::setTileBounds()
int x = (*i).x();
if (x == 0)
hasFarLeft = true;
- else if (x == (zpow2 - 1))
+ else if (x == (sideLength_ - 1))
hasFarRight = true;
- else if (x == ((zpow2 / 2) - 1)) {
+ else if (x == ((sideLength_ / 2) - 1)) {
hasMidLeft = true;
- } else if (x == (zpow2 / 2)) {
+ } else if (x == (sideLength_ / 2)) {
hasMidRight = true;
}
}
@@ -473,9 +474,9 @@ void QGeoMapGeometryPrivate::setTileBounds()
if (hasFarLeft && hasFarRight) {
if (!hasMidRight) {
- tileXWrapsBelow_ = zpow2 / 2;
+ tileXWrapsBelow_ = sideLength_ / 2;
} else if (!hasMidLeft) {
- tileXWrapsBelow_ = (zpow2 / 2) - 1;
+ tileXWrapsBelow_ = (sideLength_ / 2) - 1;
}
}
@@ -485,7 +486,7 @@ void QGeoMapGeometryPrivate::setTileBounds()
int x = tile.x();
if (tile.x() < tileXWrapsBelow_)
- x += zpow2;
+ x += sideLength_;
minTileX_ = x;
maxTileX_ = x;
@@ -498,7 +499,7 @@ void QGeoMapGeometryPrivate::setTileBounds()
tile = *i;
int x = tile.x();
if (tile.x() < tileXWrapsBelow_)
- x += zpow2;
+ x += sideLength_;
minTileX_ = qMin(minTileX_, x);
maxTileX_ = qMax(maxTileX_, x);
@@ -509,11 +510,9 @@ void QGeoMapGeometryPrivate::setTileBounds()
void QGeoMapGeometryPrivate::setupCamera()
{
- int zpow2 = 1 << cameraData_.zoomLevel();
-
double f = 1.0 * qMin(screenSize_.width(), screenSize_.height());
- double z = pow(2.0, cameraData_.zoomFactor() - cameraData_.zoomLevel());
+ double z = pow(2.0, cameraData_.zoomLevel() - intZoomLevel_);
double altitude = scaleFactor_ * f / (4.0 * z);
@@ -533,10 +532,10 @@ void QGeoMapGeometryPrivate::setupCamera()
double edge = scaleFactor_ * tileSize_;
- QDoubleVector3D center = (zpow2 * QGeoProjection::coordToMercator(cameraData_.center()));
+ QDoubleVector3D center = (sideLength_ * QGeoProjection::coordToMercator(cameraData_.center()));
if (center.x() < tileXWrapsBelow_)
- center.setX(center.x() + 1.0 * zpow2);
+ center.setX(center.x() + 1.0 * sideLength_);
mercatorCenterX_ = center.x();
mercatorCenterY_ = center.y();
@@ -545,12 +544,12 @@ void QGeoMapGeometryPrivate::setupCamera()
center.setY(1.0 * minTileY_ - center.y());
// letter box vertically
- if (useVerticalLock_ && (mercatorHeight_ > 1.0 * zpow2)) {
- center.setY(-1.0 * zpow2 / 2.0);
- mercatorCenterY_ = zpow2 / 2.0;
- screenOffsetY_ = screenSize_.height() * (0.5 - zpow2 / (2 * mercatorHeight_));
+ if (useVerticalLock_ && (mercatorHeight_ > 1.0 * sideLength_)) {
+ center.setY(-1.0 * sideLength_ / 2.0);
+ mercatorCenterY_ = sideLength_ / 2.0;
+ screenOffsetY_ = screenSize_.height() * (0.5 - sideLength_ / (2 * mercatorHeight_));
screenHeight_ = screenSize_.height() - 2 * screenOffsetY_;
- mercatorHeight_ = 1.0 * zpow2;
+ mercatorHeight_ = 1.0 * sideLength_;
verticalLock_ = true;
} else {
screenOffsetY_ = 0.0;
@@ -558,10 +557,10 @@ void QGeoMapGeometryPrivate::setupCamera()
verticalLock_ = false;
}
- if (mercatorWidth_ > 1.0 * zpow2) {
- screenOffsetX_ = screenSize_.width() * (0.5 - (zpow2 / (2 * mercatorWidth_)));
+ if (mercatorWidth_ > 1.0 * sideLength_) {
+ screenOffsetX_ = screenSize_.width() * (0.5 - (sideLength_ / (2 * mercatorWidth_)));
screenWidth_ = screenSize_.width() - 2 * screenOffsetX_;
- mercatorWidth_ = 1.0 * zpow2;
+ mercatorWidth_ = 1.0 * sideLength_;
} else {
screenOffsetX_ = 0.0;
screenWidth_ = screenSize_.width();
@@ -632,32 +631,32 @@ void QGeoMapGeometryPrivate::paintGL(QGLPainter *painter)
glDisable(GL_DEPTH_TEST);
- double sideLength_ = scaleFactor_ * tileSize_ * (1 << cameraData_.zoomLevel());
+ double sideLength = scaleFactor_ * tileSize_ * sideLength_;
QDoubleVector3D c = QDoubleVector3D(camera->center());
- c.setX(c.x() + sideLength_);
+ c.setX(c.x() + sideLength);
camera->setCenter(c);
QDoubleVector3D e = QDoubleVector3D(camera->eye());
- e.setX(e.x() + sideLength_);
+ e.setX(e.x() + sideLength);
camera->setEye(e);
painter->setCamera(camera);
painter->projectionMatrix().scale(1, -1, 1);
sceneNode_->draw(painter);
- c.setX(c.x() - 2 * sideLength_);
+ c.setX(c.x() - 2 * sideLength);
camera->setCenter(c);
- e.setX(e.x() - 2 * sideLength_);
+ e.setX(e.x() - 2 * sideLength);
camera->setEye(e);
painter->setCamera(camera);
painter->projectionMatrix().scale(1, -1, 1);
sceneNode_->draw(painter);
- c.setX(c.x() + sideLength_);
+ c.setX(c.x() + sideLength);
camera->setCenter(c);
- e.setX(e.x() + sideLength_);
+ e.setX(e.x() + sideLength);
camera->setEye(e);
painter->setCamera(camera);