public static Pair<Envelope, DoublePair> getWorldToScreenTransform( AffineTransform worldToScreen, Envelope bbox,
int width, int height ) {
worldToScreen.scale( 1, -1 );
worldToScreen.translate( 0, -height );
final double scalex, scaley;
final ICRS crs = bbox.getCoordinateSystem();
if ( isXyOrdered( crs ) ) {
scalex = width / bbox.getSpan0();
scaley = height / bbox.getSpan1();
} else {
worldToScreen.scale( -1, 1 );
worldToScreen.rotate( Math.PI / 2 );
scalex = height / bbox.getSpan0();
scaley = width / bbox.getSpan1();
}
worldToScreen.scale( scalex, scaley );
worldToScreen.translate( -bbox.getMin().get0(), -bbox.getMin().get1() );
return new Pair<Envelope, DoublePair>( bbox, new DoublePair( scalex, scaley ) );
}