/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.0 import QtTest 1.0 import QtLocation 5.6 import QtPositioning 5.5 Item { width:100 height:100 // General-purpose elements for the test: Plugin { id: testPlugin; name: "qmlgeo.test.plugin"; allowExperimental: true } property var coordinateList: [] property int coordinateCount: 0 property int animationDuration: 100 Map {id: map plugin: testPlugin width: 100 height: 100 Behavior on center { id: centerBehavior enabled: false CoordinateAnimation { id: coordinateAnimation duration: animationDuration } } onCenterChanged: { if (!coordinateList) { coordinateList = [] } coordinateList[coordinateCount] = {'latitude': center.latitude, 'longitude': center.longitude} coordinateCount++ } } function toMercator(coord) { var pi = Math.PI var lon = coord.longitude / 360.0 + 0.5; var lat = coord.latitude; lat = 0.5 - (Math.log(Math.tan((pi / 4.0) + (pi / 2.0) * lat / 180.0)) / pi) / 2.0; lat = Math.max(0.0, lat); lat = Math.min(1.0, lat); return {'latitude': lat, 'longitude': lon}; } TestCase { when: windowShown name: "CoordinateAnimation" function test_coordinate_animation() { coordinateList = [] coordinateCount = 0 var from = {'latitude': 58.0, 'longitude': 12.0} var to = {'latitude': 62.0, 'longitude': 24.0} var fromMerc = toMercator(from) var toMerc = toMercator(to) var delta = (toMerc.latitude - fromMerc.latitude) / (toMerc.longitude - fromMerc.longitude) // Set from coordinate with animation disabled. map.center = QtPositioning.coordinate(from.latitude, from.longitude) // Expect only one update compare(coordinateList.length, 1) // Set to coordinate with animation enabled centerBehavior.enabled = true map.center = QtPositioning.coordinate(to.latitude, to.longitude) wait(animationDuration) tryCompare(coordinateAnimation,"running",false) //check correct start position compare(coordinateList[0].latitude, from.latitude) compare(coordinateList[0].longitude, from.longitude) //check correct end position compare(coordinateList[coordinateList.length - 1].latitude, to.latitude) compare(coordinateList[coordinateList.length - 1].longitude, to.longitude) var i var lastLatitude for (i in coordinateList) { var coordinate = coordinateList[i] var mercCoordinate = toMercator(coordinate) //check that coordinates from the animation is along a straight line between from and to var estimatedLatitude = fromMerc.latitude + (mercCoordinate.longitude - fromMerc.longitude) * delta verify(mercCoordinate.latitude - estimatedLatitude < 0.00000000001); //check that each step has moved in the right direction if (lastLatitude) { verify(coordinate.latitude > lastLatitude) } lastLatitude = coordinate.latitude } } } }