summaryrefslogtreecommitdiff
path: root/src/location/maps
diff options
context:
space:
mode:
authorDavid Laing <david.laing@nokia.com>2012-02-14 10:49:10 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-16 09:29:51 +0100
commitfabea2739711a27f0b53f614476a098a5137a5a5 (patch)
tree25fe0e4e6389a1df635beb3b893c1625f90d5f1f /src/location/maps
parentcdb80baa8386d11a0cbab8423ea956ae2393672f (diff)
downloadqtlocation-fabea2739711a27f0b53f614476a098a5137a5a5.tar.gz
Cleans up the QGeoCameraData class.
There were some fields that were unused or only used for debugging the prototype of the library which are no longer needed. This removes those fields and renames zoomFactor to zoomLevel - "zoomLevel" is a better name for it, but we need the double type / semantics of zoomFactor. Change-Id: I32ba97ca1b4bccfe33b86c8eccd2c94b12079d2e Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
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);