From 9deba5318b646d92ffa276dcdd48af08506f8fa7 Mon Sep 17 00:00:00 2001 From: Paolo Angelelli Date: Tue, 7 Feb 2017 12:28:02 +0100 Subject: Fix frustum footprint calculation in QGeoCameraTiles The old algorithm for computing the frustum footprint has problems with certain viewport sizes when tilting the map. This patch fixes the problem, and also removes the dependency on a local copy of qsort that was necessary in order for that algorithm to work properly. Task-number: QTBUG-58684 Task-number: QTBUG-34088 Change-Id: I36aaaa90c567cd19a4ae66dba8def0aec0b00534 Reviewed-by: Michal Klocek --- tests/auto/qgeocameratiles/tst_qgeocameratiles.cpp | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests') diff --git a/tests/auto/qgeocameratiles/tst_qgeocameratiles.cpp b/tests/auto/qgeocameratiles/tst_qgeocameratiles.cpp index 33ebda67..1ac0abfa 100644 --- a/tests/auto/qgeocameratiles/tst_qgeocameratiles.cpp +++ b/tests/auto/qgeocameratiles/tst_qgeocameratiles.cpp @@ -69,6 +69,7 @@ private slots: void tilesMapType(); void tilesPositions(); void tilesPositions_data(); + void test_tilted_frustum(); }; void tst_QGeoCameraTiles::row(const PositionTestInfo &pti, int xOffset, int yOffset, int tileX, int tileY, int tileW, int tileH) @@ -116,6 +117,29 @@ void tst_QGeoCameraTiles::test_group(const PositionTestInfo &pti, QList &xV } } +void tst_QGeoCameraTiles::test_tilted_frustum() +{ + // ctFull : Full map in the view, all 16 zl2 tiles visible. Using this as control. + QGeoCameraData cameraFull; + cameraFull.setZoomLevel(2); + cameraFull.setCenter(QGeoCoordinate(0,0)); + QGeoCameraTiles ctFull; + ctFull.setTileSize(64); + ctFull.setCameraData(cameraFull); + ctFull.setScreenSize(QSize(256, 256)); + + QGeoCameraData camera; + camera.setZoomLevel(2.322); + camera.setTilt(30); + camera.setCenter(QWebMercator::mercatorToCoord(QDoubleVector2D(0.75, 0.5))); + QGeoCameraTiles ct; + ct.setTileSize(64); + ct.setScreenSize(QSize(320, 180)); + ct.setCameraData(camera); + + QCOMPARE(ct.createTiles(), ctFull.createTiles()); +} + void tst_QGeoCameraTiles::tilesPlugin() { QGeoCameraData camera; -- cgit v1.2.1