diff options
author | David Laing <david.laing@nokia.com> | 2012-01-17 13:51:40 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-02 04:46:06 +0100 |
commit | d76fceeeddabb1b1a3f00cdc13eb06480c804c7a (patch) | |
tree | 6297f23298feac1a370e71dfdb2fa26ebc4345b5 /src/location/maps/qgeocameratiles.cpp | |
parent | 3d1a04e600e11e8a6c5faab4e9c45e5afe7b3098 (diff) | |
download | qtlocation-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.cpp | 42 |
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_); } } |