private ReferencedEnvelope calcLayersBounds( Collection<ILayer> layers, CoordinateReferenceSystem crs, IProgressMonitor monitor) throws Exception { log.debug("### mapCRS: " + crs); // $NON-NLS-1$ ReferencedEnvelope result = null; // new ReferencedEnvelope( crs ); for (ILayer layer : layers) { try { IGeoResource res = layer.getGeoResource(); if (res == null) { continue; } ReferencedEnvelope bbox = SetLayerBoundsOperation.obtainBoundsFromResources(layer, crs, monitor); if (!bbox.getCoordinateReferenceSystem().equals(crs)) { bbox = bbox.transform(crs, true); } log.debug("layer: " + layer + ", bbox= " + bbox); // $NON-NLS-1$ //$NON-NLS-2$ if (result == null) { result = bbox; } else { result.expandToInclude(bbox); } log.debug("result: bbox= " + result); // $NON-NLS-1$ } catch (Exception e) { // XXX mark layers!? log.debug("", e); // $NON-NLS-1$ log.warn( "skipping layer: " + layer.getLabel() + " (" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$ layer.setLayerStatus( new LayerStatus( Status.WARNING, LayerStatus.UNSPECIFIED, Messages.get("LayerStatus_noCrs"), e)); //$NON-NLS-1$ } } return result != null ? result : ReferencedEnvelope.EVERYTHING.transform(crs, true); }