diff options
Diffstat (limited to 'test/miscellaneous/transform.cpp')
-rw-r--r-- | test/miscellaneous/transform.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/miscellaneous/transform.cpp b/test/miscellaneous/transform.cpp index 5d00bfd20b..426e9e534d 100644 --- a/test/miscellaneous/transform.cpp +++ b/test/miscellaneous/transform.cpp @@ -105,3 +105,35 @@ TEST(Transform, InvalidBearing) { ASSERT_DOUBLE_EQ(2, transform.getScale()); ASSERT_DOUBLE_EQ(2, transform.getAngle()); } + +TEST(Transform, PerspectiveProjection) { + MockView view; + Transform transform(view); + + transform.resize({{ 1000, 1000 }}); + transform.setScale(1024); + transform.setPitch(0.9); + transform.setLatLng(LatLng(38, -77)); + + // expected values are from mapbox-gl-js + + LatLng loc = transform.getState().pointToLatLng({ 500, 500 }); + ASSERT_NEAR(-77, loc.longitude, 0.0001); + ASSERT_NEAR(38, loc.latitude, 0.0001); + + loc = transform.getState().pointToLatLng({ 0, 1000 }); + ASSERT_NEAR(-77.59198961199148, loc.longitude, 0.0002); + ASSERT_NEAR(38.74661326302018, loc.latitude, 0.0001); + + loc = transform.getState().pointToLatLng({ 1000, 0 }); + ASSERT_NEAR(-76.75823239205641, loc.longitude, 0.0001); + ASSERT_NEAR(37.692872969426375, loc.latitude, 0.0001); + + vec2<double> point = transform.getState().latLngToPoint({38.74661326302018, -77.59198961199148}); + ASSERT_NEAR(point.x, 0, 0.01); + ASSERT_NEAR(point.y, 1000, 0.01); + + point = transform.getState().latLngToPoint({37.692872969426375, -76.75823239205641}); + ASSERT_NEAR(point.x, 1000, 0.02); + ASSERT_NEAR(point.y, 0, 0.02); +} |