diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2018-09-25 13:35:41 -0700 |
---|---|---|
committer | Minh Nguyễn <mxn@1ec5.org> | 2018-10-01 18:12:03 -0700 |
commit | a030f1474fa9eb556552ec48eba9cb5e771d1580 (patch) | |
tree | 53e10e998c81094da9d69997d91b1f5b3cb580e7 /platform/darwin/src/MGLMapCamera.mm | |
parent | 79dd9ca250a8360f3a32e8596e2cce1e397b8d78 (diff) | |
download | qtlocation-mapboxgl-a030f1474fa9eb556552ec48eba9cb5e771d1580.tar.gz |
[ios, macos] Distinguish between viewing distance and altitude
+[MGLMapCamera cameraLookingAtCenterCoordinate:fromDistance:pitch:heading:] incorrectly treated the distance as an altitude. Due to backwards compatibility concerns, this method can’t be fixed in place. Instead, separate +[MGLMapCamera cameraLookingAtCenterCoordinate:correctlyFromDistance:pitch:heading:] and +[MGLMapCamera cameraLookingAtCenterCoordinate:altitude:pitch:heading:] methods have been added.
Diffstat (limited to 'platform/darwin/src/MGLMapCamera.mm')
-rw-r--r-- | platform/darwin/src/MGLMapCamera.mm | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/platform/darwin/src/MGLMapCamera.mm b/platform/darwin/src/MGLMapCamera.mm index 1611dbf4a3..5ab0bffaa6 100644 --- a/platform/darwin/src/MGLMapCamera.mm +++ b/platform/darwin/src/MGLMapCamera.mm @@ -47,16 +47,45 @@ BOOL MGLEqualFloatWithAccuracy(CGFloat left, CGFloat right, CGFloat accuracy) } + (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate - fromDistance:(CLLocationDistance)distance + acrossDistance:(CLLocationDistance)distance + pitch:(CGFloat)pitch + heading:(CLLocationDirection)heading +{ + // Angle at the viewpoint formed by the straight lines running perpendicular + // to the ground and toward the center coordinate. + CLLocationDirection eyeAngle = 90 - pitch; + CLLocationDistance altitude = distance * sin(MGLRadiansFromDegrees(eyeAngle)); + + return [[self alloc] initWithCenterCoordinate:centerCoordinate + altitude:altitude + pitch:pitch + heading:heading]; +} + ++ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate + altitude:(CLLocationDistance)altitude pitch:(CGFloat)pitch heading:(CLLocationDirection)heading { return [[self alloc] initWithCenterCoordinate:centerCoordinate - altitude:distance + altitude:altitude pitch:pitch heading:heading]; } ++ (instancetype)cameraLookingAtCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate + fromDistance:(CLLocationDistance)distance + pitch:(CGFloat)pitch + heading:(CLLocationDirection)heading +{ + // TODO: Remove this compatibility shim in favor of `-cameraLookingAtCenterCoordinate:acrossDistance:pitch:heading:. + // https://github.com/mapbox/mapbox-gl-native/issues/12943 + return [MGLMapCamera cameraLookingAtCenterCoordinate:centerCoordinate + altitude:distance + pitch:pitch + heading:heading]; +} + - (instancetype)initWithCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate altitude:(CLLocationDistance)altitude pitch:(CGFloat)pitch |