void MercatorProjectionTest::screenCoordinatesOfCenter() { QFETCH( qreal, lon ); QFETCH( qreal, lat ); const GeoDataCoordinates coordinates( lon, lat, 0, GeoDataCoordinates::Degree ); ViewportParams viewport; viewport.setProjection( Mercator ); viewport.setRadius( 360 / 4 ); // for easy mapping of lon <-> x viewport.setSize( QSize( 2, 2 ) ); viewport.centerOn( lon * DEG2RAD, lat * DEG2RAD ); { qreal x; qreal y; const bool retval = viewport.screenCoordinates( lon * DEG2RAD, lat * DEG2RAD, x, y ); QVERIFY( retval ); // FIXME: this should fail for lon < -180 || 180 < lon QCOMPARE( x, lon - viewport.centerLongitude() * RAD2DEG + 1.0 ); QCOMPARE( y, 1.0 ); } { qreal x; qreal y; bool globeHidesPoint = true; const bool retval = viewport.screenCoordinates( coordinates, x, y, globeHidesPoint ); QVERIFY( retval ); // FIXME: this should fail for lon < -180 || 180 < lon QVERIFY( !globeHidesPoint ); QCOMPARE( x, lon - viewport.centerLongitude() * RAD2DEG + 1.0 ); QCOMPARE( y, 1.0 ); } QVERIFY( viewport.currentProjection()->repeatableX() ); { qreal x[2]; qreal y; int pointRepeatNum = 1000; bool globeHidesPoint = true; const bool retval = viewport.screenCoordinates( coordinates, x, y, pointRepeatNum, QSizeF( 0, 0 ), globeHidesPoint ); QVERIFY( retval ); QCOMPARE( pointRepeatNum, 1 ); QVERIFY( !globeHidesPoint ); QCOMPARE( x[0], 1.0 ); QCOMPARE( y, 1.0 ); } }
void MercatorProjectionTest::screenCoordinatesValidLat() { QFETCH( qreal, lon ); QFETCH( qreal, lat ); QFETCH( bool, validLat ); const GeoDataCoordinates coordinates( lon, lat, 0, GeoDataCoordinates::Degree ); ViewportParams viewport; viewport.setProjection( Mercator ); viewport.setRadius( 360 / 4 ); // for easy mapping of lon <-> x viewport.centerOn( 0.0, 0.0 ); viewport.setSize( QSize( 360, 361 ) ); // TODO: check why height == 360 doesn't hold { qreal x; qreal y; const bool retval = viewport.screenCoordinates( lon * DEG2RAD, lat * DEG2RAD, x, y ); QVERIFY( retval == validLat ); } { qreal x; qreal y; bool globeHidesPoint = true; const bool retval = viewport.screenCoordinates( coordinates, x, y, globeHidesPoint ); QVERIFY( retval == validLat ); QVERIFY( !globeHidesPoint ); } QVERIFY( viewport.currentProjection()->repeatableX() ); { qreal x[2]; qreal y; int pointRepeatNum = 1000; bool globeHidesPoint = true; const bool retval = viewport.screenCoordinates( coordinates, x, y, pointRepeatNum, QSizeF( 0, 0 ), globeHidesPoint ); QVERIFY( retval == validLat ); QCOMPARE( pointRepeatNum, 1 ); QVERIFY( !globeHidesPoint ); } }
void StereographicProjectionTest::screenCoordinatesOfCenter() { QFETCH( QPoint, screenCoordinates ); QFETCH( GeoDataCoordinates, expected ); ViewportParams viewport; viewport.setProjection( Stereographic ); viewport.setRadius( 180 / 4 ); // for easy mapping of lon <-> x viewport.setSize( QSize( 20, 20 ) ); viewport.centerOn( 0 * DEG2RAD, 90 * DEG2RAD ); { qreal lon, lat; const bool retval = viewport.geoCoordinates( screenCoordinates.x(), screenCoordinates.y(), lon, lat, GeoDataCoordinates::Degree ); QVERIFY( retval ); // we want valid coordinates QFUZZYCOMPARE( lon, expected.longitude( GeoDataCoordinates::Degree ), 0.0001 ); QFUZZYCOMPARE( lat, expected.latitude( GeoDataCoordinates::Degree ), 0.0001 ); } }