diff options
-rw-r--r-- | src/mbgl/map/transform.cpp | 5 | ||||
-rw-r--r-- | test/map/transform.test.cpp | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp index 8d05bc0e91..50f979437d 100644 --- a/src/mbgl/map/transform.cpp +++ b/src/mbgl/map/transform.cpp @@ -293,6 +293,11 @@ void Transform::flyTo(const CameraOptions &camera, const AnimationOptions &anima Point<double> framePoint = util::interpolate(startPoint, endPoint, us); double frameZoom = startZoom + state.scaleZoom(1 / w(s)); + // Zoom can be NaN if size is empty. + if (std::isnan(frameZoom)) { + frameZoom = zoom; + } + // Convert to geographic coordinates and set the new viewpoint. LatLng frameLatLng = Projection::unproject(framePoint, startScale); state.setLatLngZoom(frameLatLng, frameZoom); diff --git a/test/map/transform.test.cpp b/test/map/transform.test.cpp index 6d41a868dc..11c2c1cc6b 100644 --- a/test/map/transform.test.cpp +++ b/test/map/transform.test.cpp @@ -36,6 +36,11 @@ TEST(Transform, InvalidZoom) { cameraOptions.center = LatLng { util::LATITUDE_MAX, util::LONGITUDE_MAX }; cameraOptions.zoom = transform.getState().getMaxZoom(); + // Executing flyTo with an empty size causes frameZoom to be NaN. + transform.flyTo(cameraOptions); + transform.updateTransitions(transform.getTransitionStart() + transform.getTransitionDuration()); + ASSERT_DOUBLE_EQ(transform.getZoom(), transform.getState().getMaxZoom()); + // Executing flyTo with maximum zoom level to the same zoom level causes // frameZoom to be bigger than maximum zoom. transform.resize(Size { 100, 100 }); |