Map copy = (Map) EcoreUtil.copy(map);
// we need the original map and its box to correctly calculate the
// scale so we must do it now
Dimension size = new Dimension(box.getSize().width, box.getSize().height);
ViewportModel viewportModel = map.getViewportModelInternal();
ReferencedEnvelope bounds = (ReferencedEnvelope) viewportModel.getBounds();
double scale = ScaleUtils.calculateScaleDenominator(bounds, size, 90);
Pair<Dimension, Double> details = new Pair<Dimension, Double>(size, scale);
return new Pair<Map, Pair<Dimension, Double>>(copy, details);