| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With this change, all the geo-to-screen conversion,
and the triangulation operations for geo polylines
and geo polygon are performed either at set time
or in the shader.
A separate bounding box geometry is processed
in the old way to provide a correct QtQuick Item
geometry, that can be used for nesting mouse areas,
performing translations, input event delivery, etc.
With this approach, performance are improved by more
than one order of magnitude in average, but complex
geometries will of course benefit more.
It also adds correct rendering support for polygons
with holes, previously only rendered correctly
by the MapboxGL plugin.
The polyline shader has basic miter joins. The miter is
skipped if the angle is too sharp to avoid complicating
the implementation.
This shader introduces some glitches when the polyline
is minified, for which the real fix is to
have LOD for the geometry, and render simplified
geometries at low zoom levels (added in a subsequent patch).
Note: this approach, at least in its current implementation,
does not support enabling layers on individual items, only
on the Map element.
Task-number: QTBUG-49303
Task-number: QTBUG-38459
Change-Id: I0c2dc0bf364d32f74ca7c4014f6d66e6219c8ae4
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
|
|
|
|
|
| |
Change-Id: I36dd6881b6f6f028869d63b6311cba7f52a99cc4
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch introduces a new macro, QT_LOCATION_DEBUG, that, when
fed via qmake command line, changes the scope of some members,
adds some extra members and some extra data dumping into these
members.
In this way external code can inspect the state of the renderer
in order to debug it.
The patch also moves a few classes into separate files, as well
as privately exporting them.
Change-Id: I32a042863f78dcd10f94b0b7fe8b90f3fc486891
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes rendering artifacts with polylines appearing
when rendering large polylines and/or at high zoom levels.
Two problems caused the artifacts:
1.A too close near plane when calculating the projectable region in
QGeoProjectionWebMercator, which presumably introduced numerical
errors when then using such a region to clip data to be projected
using a projection transformation based on the same frustum.
2.Projected polylines too large for qTriangulatingStroker, that would
then introduce artifacts at screen.
To solve 1., as a temporary solution, the distance of the near plane has
been increased to a value that seems safe for zoom levels < 19.
This while a better formula that scales further is being researched.
To solve 2., screen-space line clipping has been brought back from 5.8,
and added on top of mercator-space clipping. This, in theory, should
also increase the performance, allowing qTriangulatingStroker to process
less data.
Task-number: QTBUG-71607
Change-Id: Id774419dde819931e2fdd78b02081695a91302ef
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
This will allow moving the visible map area to a subregion
of the viewport, allowing to maintain the desired visible
region visible when overlaying controls on top of the map.
Task-number: QTBUG-68966
Change-Id: Idf4b30f7c1e4062e5e1c0ddc01a31bc856c0bc0c
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
| |
This to adjust for potentially large item borders, whose extent
is not considered when clipping the item itself.
Change-Id: I9ec11fbc8ce48870608378e7618721899bc0b4dc
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fix uses a different polyline clipping algorithm
to do line-polygon clipping which uses Clipper
internally only to do inside/outside testing.
Among other things, this method appears to be much faster
than the older one.
Task-number: QTBUG-66692
Task-number: QTBUG-66830
Change-Id: I2ed6f46c5d9d426a740611bec13aff69be49eb2a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
QtLocation mapping has always been geared around the WebMercator
projection. Some mapping SDKs support additional projections, such
as General Perspective (often called globe view or globe rendering).
The goal of this patch is to allow a plugin to provide such a view,
disabling WebMercator specific features, and redirecting API calls
to plugin-specific implementations.
In particular, this patch disables the rendering of Map Items
(QDeclarativeGeoMapItemBase and sons) for projections different from
WebMercator, with the exception of MapQuickItems.
MapQuickItems, in turn, lose the ability to draw "on the map", when
the projection is different from WebMercator. However, they can still
be used to add geolocated popups, buttons and other UI elements.
fitViewportToMapItems is also disabled, for both it can't be computed
and there wouldn't be any item to fit (with the exception of
mapquickitems)
Change-Id: I9fa2fdd01a35a078fc4663efc9d269c4ecaa3f41
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|\
| |
| |
| |
| |
| |
| | |
Conflicts:
.qmake.conf
Change-Id: I9a3d7ec0bb203ac8b5bd483af3973510ca33c4a9
|
| |
| |
| |
| |
| |
| | |
Task-number: QTBUG-63251
Change-Id: I7ceeeebb30007c5d97d61e057c8ec6e827177b19
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|\ \
| |/
| |
| |
| |
| |
| | |
Conflicts:
tests/auto/declarative_ui/tst_map.qml
Change-Id: If408b8242b39f78926b5373393f3b1f65b262499
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Currently the visible region is calculated as the intersection between
the viewing frustum and the map plane clipped against the map extended
rectangle in mercator space (from -1 to 2 in x coords, 0 to 1 in y
coords).
The result is correct in the extended mercator space. However, this may
lead to overlapping coordinates when converted back to latitude and
longitude.
For this reason, this patch changes the clipping geometry to be the
map un-extended rectangle centered around the current map center.
The result is a geometry that never wraps around or overlaps, thus
removing the need for handling separately the case when the map
is fully visible when returning the visible region.
Task-number: QTBUG-57690
Change-Id: I8396c40a123ce94bff4388dfefbd8a694657b8bd
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In 5.9.0 map items are clipped against the visible region.
This implies that their geometry is also clipped against
the visible region.
This is problematic in ::geometryChanged, since the old
geometry is always clipped in this way.
This patch clips items against a "projectable" region
instead, that is the part of the map that is in front
of the camera.
Since this can produce very large vertices, mapbox
earcut 3rd party library is pulled in, to replace
qTriangulate that only supports coordinates up to
1<<21.
This patch also contains a fix for earcut.hpp to make it
build also on QNX6.6
Task-number: QTBUG-61727
Change-Id: Iffc95fdae88fef982c1eb86db567b326b5e51057
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
This reverts commit 2ab93acd9751b3ffe2c36a4a0e37dc792686a08f.
Reason being: not passing QNX6 bot
Change-Id: If45fe095b6e6959f7c40e3e0ed7a14d278bbb230
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In 5.9.0 map items are clipped against the visible region.
This implies that their geometry is also clipped against
the visible region.
This is problematic in ::geometryChanged, since the old
geometry is always clipped in this way.
This patch clips items against a "projectable" region
instead, that is the part of the map that is in front
of the camera.
Since this can produce very large vertices, mapbox
earcut 3rd party library is pulled in, to replace
qTriangulate that only supports coordinates up to
1<<21.
Task-number: QTBUG-61727
Change-Id: I7449e755a4848a2b2107c5de4e27821e3e887bfb
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This patch allows to call toCoordinate also on negative y values, given
that the y value is still below the horizon. If not, the y value
will be clamped to the "minimum unprojectable y value", a value that
is clamped to 0.
Task-number: QTBUG-61813
Change-Id: I177d3b459b6eaf827daf860b7d4011511a7e76ee
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
|
|/
|
|
|
|
|
|
|
|
| |
anchorCoordinateToPoint functionality actually
belongs to QGeoProjection.
Moving it there so that it can be used in other
parts of the module.
Change-Id: Id135a7a4bbe14d9c83ef160682a317e3426b15ac
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
| |
Task-number: QTBUG-61538
Change-Id: Ib1e5cbe1bdcfc324e3e9dcaca7045c9318a5059e
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change optimizes QGeoProjectionWebMercator::setupCamera, factoring
out the code that calculates the visible region, and replacing it
with a dirty flag.
The computation is deferred to the first time visibleRegion() gets
called.
This is done because the visible region is currently only used to render
some types of map items, meaning that in a multi layer setup, only few
layers might need it.
Change-Id: I5dd75969581513eb60e3cf5d6ba649349bf25378
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
| |
This fixes the -no-gui build.
Task-number: QTBUG-60062
Change-Id: I71400dfddac8ddf6a74906be8ba1272bf4a86781
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes an incorrect computation of the projection matrices and
thus a mismatch in projections between mbgl vs the other plugins when
the window A/R is less than 1.0.
Task-number: QTBUG-59417
Change-Id: Ib03eaa4c877a00c9281c335f859c854d6db632c0
Reviewed-by: Bruno de Oliveira Abinader <brunoabinader@gmail.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes a bug that makes MapQuickItem disappear when
the zoomLevel property is set, the camera is tilted and zoomed in
very close to the item, causing the coordinate of the map quick item
to end behind the camera.
Task-number: QTBUG-59397
Change-Id: Iae92204917729eb9daaf8592db318613bf57b966
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
|
|
|
| |
Change-Id: I85870f176510d1d6fd51bce94daf58fc326e13b3
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
|
|
|
|
|
|
|
|
|
| |
This patch fixes the behavior of MapQuickItem when the zoomLevel is
set, that is it makes behave the qquickitem as if it would be
on the map, instead of on the screen.
Change-Id: Ibb8a6000e2f6a37a68c32df001fc8565079a6f70
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch bakes all the required linear transformations performed
in the method inside a 4x4 double matrix, removing 4 of the 5
instructions previously performed.
Autotest adaptations with compares instead of verifys have been
necessary due to small epsilons in the results.
Change-Id: I7795173a27812eb93a48e3175ad24fd546aeec04
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
|
|
|
|
|
|
| |
This patch cleans up dead or disabled code and TODO comments added
with change c57d42b47004623db9b934d0688180ec6dc1a73e
Change-Id: I2817f20c8eb56386f8dbee2c661e3034f48caa30
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
|
|
|
|
|
|
| |
This patch fixes the handling of pan/flick/pinch in
presence of tilt or bearing.
Change-Id: Iad04fd92e1c8e318e3b1b0d344852c81e554ebb7
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds proper rotation/tilting support to Map Items.
To do so, clipping is now performed in wrapped mercator space
instead of screen space.
This prevents projection of geo coordinates that ended behind
the camera, and that would be projected incorrectly by the
projection transformation.
This patch therefore does not use the screen clipping code
any longer (clipPathToRect), since the geometry has already
been clipped.
The downside is that updateSourcePoints is now necessary for
any viewport change.
This would be necessary anyway in presence of tilt or rotation.
NB: Handling of MapQuickItems with zoomLevel set is still TODO.
Future work:
1) Optimize updateSourcePoints by pre-computing the mercator
projection of the geometry, and let updateSourcePoints do only
the wrapping/clipping/projection-to-screen operations.
2) Remove updateScreenPoints altogether
Change-Id: Ie0d3dbef68d48ac97a596d40240d0ac126c0efaf
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch introduces a new camera parameter, field of view, used in
QGeoCameraCapabilities, QGeoCameraData and QDeclarativeGeoMap.
This is necessary as now QtLocation supports map tilting, and different
QGeoMap implementations support different ranges for the field of view
of the camera.
Through this API it becomes possible to query the supported range and
current value, and to stack Map elements using different plugins
while keeping a consistent camera projection across all of them.
Change-Id: Ie061142bea090ec223d842efbe7924f924430496
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
QDeclarativeGeoMap currently does not provide any mean to set bearing
and tilt into qgeocameradata.
It has been not a problem since QGeoTiledMap and sons did not support
it.
External renderers however support it, so this patch adds QML api
calls to control these parameters, and adapt the existing logic
to take them into consideration in camera-related
calls, as well as in the afterViewportChange handlers of the Map
Items.
This patch also sligthly modifies the QML api to make the handling
of all the bounded camera property more homogeneous.
Minimum and maximum zoom levels prior plugin initialization
aren't -1 anymore, but are some valid lower and upper bounds
for this property, that is 0 and 30.
in this way all the 2 bounded properties (zoomLevel and
tilt) behave the same, in that they can be freely set before plugin
initialization, within reasonable predefined bounds, and, after that,
they may be clamped depending on the actual plugin capabilities.
Autotests for the QML part of the API included.
Change-Id: I9d09e32698a7330388e465e8ea7523ee39577d34
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
This patch changes the way QGeoProjectionWebMercator implements
its operations -to and -from screen coordinates.
By using a double matrix 4x4 instead of only scaling and shifting this
will make it possible to convert coordinates also in presence of
bearing and tilting != 0
Change-Id: I6a74a9675a7ad397ec6ad32f4274f897aa7694b1
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch simplifies the QGeoMap API removing all the API
necessary to convert to and from screen.
This is now demanded to a specific QGeoProjection class, that will
be independent of the map, except for using the same Geo projection
(currently only WebMercator, or EPSG:3857, although we use a sphere
instead of an ellipsoid, i believe)
The benefits are
- This relieves subclasses of QGeoMap from implementing a
GeoProjection API, especially since QtLocation currently supports
only WebMercator, and reimplementations would have to anyway
produce the same results as the inbuilt one.
- This avoids the several indirection steps previously necessary
to perform a map projection (qgeotiledmap -> private->mapscene->
private). Since these operation are quite frequent one per
map item coordinate at every redraw, shortening the indirection
chain is beneficial
- It simplifies the highly complex QGeoTiledMapScene, separating
all the logic that is not needed to draw the scene, but only
to perform geo coordinate <-> screen coordinate conversion
Change-Id: I9e3ca5280166f2d6430a32deb44c030d02d9d4e1
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Interpolation logic in AnimatableCoordinate has been moved around so
that QGeoCoordinates can be animated directly by QPropertyAnimation.
A new QML type has been added, 'CoordinateAnimation', for animating
coordinates in QML. This type follows
the pattern of 'ColorAnimation' and other specializations of
'PropertyAnimation'.
QDoubleVector2D, QDoubleVector3D and QGeoProjection has been moved to QtPositioning
Testcase for CoordinateAnimation has been added to declarative_ui.
AnimatableCoordinate and QGeoCoordinateInterpolator are redundant
and have been removed.
Change-Id: I0809da566e1800274384f9c5337df65623d1e61a
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
|
|
|
|
|
| |
Change-Id: I5b0cb7d56997ad7b91c073b3e02b31d0368fdcfa
Reviewed-by: Alex <alexander.blasche@digia.com>
|
|
|
|
|
|
|
|
| |
Change copyrights and license headers from Nokia to Digia
Change-Id: Ic1390da64a219642fa1e1482a7677a4c2db15cbc
Reviewed-by: Janne Anttila <janne.anttila@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
|
|
|
|
|
|
|
|
| |
including <cmath> declares the standard maths functions in the std
namespace not the global namespace.
Change-Id: I293cba5ed166b4f122bb34bca5c1d508e2dda259
Reviewed-by: Aaron McCarthy <aaron.mccarthy@nokia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There was no longer any point in providing the
screen <-> 3d scene position functions, which
meant that the projection class was just
doing coordinate <-> mercator conversions and
intepolating coordinates.
The interpolation code was moved out and the
mercator conversions were made static.
We have future changes coming which will allow
people who want different projections to provide
them, so it's not to big a deal to specialize
the class towards the mercator projection.
There were some other small changes made which
make the map actually pay attention to the size
of the tiles and the maximum zoom level as per
the plugin.
Actually enforcing the tilt / bearing / zoom
parameters will appear in a separate commit
before very long.
Change-Id: I31dc39165bde123fbe8e3e2e70e401c5d73932b3
Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
|
|
|
|
|
|
|
|
|
|
| |
As in the past, to avoid rewriting various autotests that contain
line-number information, an extra blank line has been inserted at the
end of the license text to ensure that this commit does not change the
total number of lines in the license header.
Change-Id: I00c66363046e475e6924aafd221483c7fad5c0d9
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
|
|
|
|
|
|
|
| |
Replace Nokia contact email address with Qt Project website.
Change-Id: I3850177e14291901e924f9c27ba09e75df00f96a
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We need to rework the GL geometry and camera positioning code
to avoid problems with arising from the single precision
floats that GL uses.
This change is the first step down this path, which adds
double precision versions of the QVector2/3D classes and
changes the maps code to use them.
It also adds a new class which determines which tiles
will be visible based on the relevant bits of
information from the map (now using double precision).
This was done to force the decoupling of the code which
determines the visible tiles from the details of the
GL geometry / camera / etc...
Change-Id: I7127e39097a92028dfea01d816c14c9b9666569e
Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
|
|
|
|
|
|
|
|
| |
Also renamed some of the files to follow the naming conventions
for private header files.
Change-Id: I84a6bc0956b942861dfb63169cb4cdcc2033f2df
Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
|
|
|
|
|
| |
Change-Id: I496795d13a615be8d252ca20a40dd2c5ba84ed60
Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
|
|
Also moves them into src/location/maps.
We still need to take a closer look at which classes are
public and which are private, and then do the associated
file renaming and addition of private header warnings.
Change-Id: Ide0225ad5d5dc23834baaa9f6841646e4c92de39
Reviewed-by: Juha Vuolle <juha.vuolle@nokia.com>
|