summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2015-12-18 22:02:50 -0800
committerMinh Nguyễn <mxn@1ec5.org>2015-12-19 20:33:18 -0800
commit97c143a3388647e74a9f74a4994ab9d6aafe26a9 (patch)
treec34ea47bbdd1ec489e8642374768c4437556919f /src
parentaf9de6c0ac335cc4d9d9e3a526dc6e3327a7af85 (diff)
downloadqtlocation-mapboxgl-97c143a3388647e74a9f74a4994ab9d6aafe26a9.tar.gz
[core] Fly across the meridian or antemeridian, whichever is shorter
ref mapbox/mapbox-gl-js#1853
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/map/transform.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp
index 759e6b4e0f..badd5d89a3 100644
--- a/src/mbgl/map/transform.cpp
+++ b/src/mbgl/map/transform.cpp
@@ -344,6 +344,16 @@ void Transform::flyTo(const CameraOptions &options) {
return;
}
+ // If a path crossing the antemeridian would be shorter, extend the final
+ // coordinate so that interpolating between the two endpoints will cross it.
+ if (std::abs(startLatLng.longitude) + std::abs(latLng.longitude) > 180) {
+ if (startLatLng.longitude > 0 && latLng.longitude < 0) {
+ latLng.longitude += 360;
+ } else if (startLatLng.longitude < 0 && latLng.longitude > 0) {
+ latLng.longitude -= 360;
+ }
+ }
+
const PrecisionPoint startPoint = {
state.lngX(startLatLng.longitude),
state.latY(startLatLng.latitude),