summaryrefslogtreecommitdiff
path: root/src/location/maps/qgeocameratiles.cpp
diff options
context:
space:
mode:
authorDavid Laing <david.laing@nokia.com>2012-01-17 13:51:40 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-02 04:46:06 +0100
commitd76fceeeddabb1b1a3f00cdc13eb06480c804c7a (patch)
tree6297f23298feac1a370e71dfdb2fa26ebc4345b5 /src/location/maps/qgeocameratiles.cpp
parent3d1a04e600e11e8a6c5faab4e9c45e5afe7b3098 (diff)
downloadqtlocation-d76fceeeddabb1b1a3f00cdc13eb06480c804c7a.tar.gz
Geometry changes for precision issues.
This also removes / cleans up a few classes that are made partially redundant by this change. Change-Id: Ib8118cc3e3df3ecd024a11184ff2523af43d7b03 Task-number: QTBUG-23413 Task-number: QTBUG-23501 Task-number: QTBUG-23166 Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
Diffstat (limited to 'src/location/maps/qgeocameratiles.cpp')
-rw-r--r--src/location/maps/qgeocameratiles.cpp42
1 files changed, 39 insertions, 3 deletions
diff --git a/src/location/maps/qgeocameratiles.cpp b/src/location/maps/qgeocameratiles.cpp
index 315b4a29..0cca35b9 100644
--- a/src/location/maps/qgeocameratiles.cpp
+++ b/src/location/maps/qgeocameratiles.cpp
@@ -84,6 +84,9 @@ public:
int maxZoom_;
QSet<QGeoTileSpec> tiles_;
+ QSet<QGeoTileSpec> tilesLeft_;
+ QSet<QGeoTileSpec> tilesRight_;
+
void updateMetadata();
void updateGeometry();
@@ -199,10 +202,15 @@ void QGeoCameraTiles::setMaximumZoomLevel(int maxZoom)
QSet<QGeoTileSpec> QGeoCameraTiles::tiles() const
{
Q_D(const QGeoCameraTiles);
-
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(QSharedPointer<QGeoProjection> projection)
: projection_(projection) {}
@@ -223,11 +231,37 @@ 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();
@@ -239,11 +273,13 @@ void QGeoCameraTilesPrivate::updateGeometry()
QPair<Polygon, Polygon> polygons = clipFootprintToMap(footprint);
if (!polygons.first.isEmpty()) {
- tiles_.unite(tilesFromPolygon(polygons.first));
+ tilesLeft_ = tilesFromPolygon(polygons.first);
+ tiles_.unite(tilesLeft_);
}
if (!polygons.second.isEmpty()) {
- tiles_.unite(tilesFromPolygon(polygons.second));
+ tilesRight_ = tilesFromPolygon(polygons.second);
+ tiles_.unite(tilesRight_);
}
}