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::screenCoordinatesOfCenter_data() { ViewportParams mercator; mercator.setProjection( Mercator ); QTest::addColumn<qreal>( "lon" ); QTest::addColumn<qreal>( "lat" ); addRow() << 0.0 << 0.0; addRow() << -180.0 << 0.0; addRow() << 180.0 << 0.0; addRow() << -360.0 << 0.0; addRow() << 360.0 << 0.0; addRow() << -540.0 << 0.0; addRow() << 540.0 << 0.0; addRow() << 0.0 << mercator.currentProjection()->minValidLat() * RAD2DEG; addRow() << 0.0 << mercator.currentProjection()->maxValidLat() * RAD2DEG; addRow() << -180.0 << mercator.currentProjection()->minValidLat() * RAD2DEG; addRow() << -180.0 << mercator.currentProjection()->maxValidLat() * RAD2DEG; addRow() << 180.0 << mercator.currentProjection()->minValidLat() * RAD2DEG; addRow() << 180.0 << mercator.currentProjection()->maxValidLat() * RAD2DEG; // FIXME: the following tests should succeed #if 0 addRow() << -541.0 << 0.0; addRow() << 541.0 << 0.0; addRow() << -1000000.0 << 0.0; addRow() << 1000000.0 << 0.0; #endif }
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 ); } }