private GetMap createGetMap( List<LayerRef> layers, List<StyleRef> styles, ICRS crs, Envelope envelope, Output output, Map<String, String> parameterMap, Map<String, List<?>> dimensions ) { int width = output.width; int height = output.height; String format = output.format; boolean transparent = output.transparent; Color color = output.bgcolor; return new GetMap( layers, styles, width, height, envelope, crs, format, transparent, color, parameterMap, dimensions ); }
private GetFeatureInfo createGetFeatureInfo( GetMap getMap, List<String> queryLayers, int i, int j, Output output, String exceptions ) throws OWSException { HashMap<String, String> parameterMap = new HashMap<String, String>(); if ( exceptions != null ) parameterMap.put( "EXCEPTIONS", exceptions ); return new GetFeatureInfo( getMap.getLayers(), getMap.getStyles(), queryLayers, getMap.getWidth(), getMap.getHeight(), i, j, getMap.getBoundingBox(), getMap.getCoordinateSystem(), output.featureCount, output.infoFormat, parameterMap, getMap.getDimensions() ); }
/** * @param hardParameters * parameters to override in the request, may be null * @throws IOException */ public Pair<BufferedImage, String> getMap( GetMap getMap, Map<String, String> hardParameters, int timeout, boolean errorsInImage ) throws IOException { if ( VERSION_111.equals( wmsVersion ) ) { Worker worker = new Worker( getMap.getLayers(), getMap.getStyles(), getMap.getWidth(), getMap.getHeight(), getMap.getBoundingBox(), getMap.getCoordinateSystem(), getMap.getFormat(), getMap.getTransparent(), errorsInImage, false, null, hardParameters ); Pair<BufferedImage, String> result; try { if ( timeout == -1 ) { result = worker.call(); } else { result = Executor.getInstance().performSynchronously( worker, timeout * 1000 ); } } catch ( Throwable e ) { throw new IOException( e.getMessage(), e ); } return result; } throw new IllegalArgumentException( "GetMap request for other versions than 1.1.1 are not supported yet." ); }
private LinkedList<String> doGetMap( GetMap getMap, Map<String, String> map, Version version, OutputStream stream ) throws OWSException, IOException { checkGetMap( version, getMap ); RenderingInfo info = new RenderingInfo( getMap.getFormat(), getMap.getWidth(), getMap.getHeight(), getMap.getTransparent(), getMap.getBgColor(), getMap.getBoundingBox(), getMap.getPixelSize(), map, imageSerializers.get( getMap.getFormat() ) ); RenderContext ctx = ouputFormatProvider.getRenderers( info, stream ); LinkedList<String> headers = new LinkedList<String>(); service.getMap( getMap, headers, ctx ); ctx.close(); return headers; }
map.put( "version", wmsVersion.toString() ); map.put( "service", "WMS" ); map.put( "layers", join( ",", getMap.getLayers() ) ); map.put( "styles", "" ); LinkedList<StyleRef> styles = new LinkedList<StyleRef>( getMap.getStyles() ); if ( styles.size() > 0 ) { while ( styles.size() < getMap.getLayers().size() ) { styles.add( new StyleRef( "default" ) ); map.put( "width", Integer.toString( getMap.getWidth() ) ); map.put( "height", Integer.toString( getMap.getHeight() ) ); map.put( "transparent", "true" ); Envelope bbox = getMap.getBoundingBox(); if ( axisFlipped( bbox.getCoordinateSystem() ) ) { map.put( "bbox", bbox.getMin().get0() + "," + bbox.getMin().get1() + "," + bbox.getMax().get0() + "," map.put( "srs", getMap.getCoordinateSystem().getAlias() ); } else { map.put( "crs", getMap.getCoordinateSystem().getAlias() ); map.put( "format", getMap.getFormat() ); if ( getMap.getOverriddenParameters() != null ) { for ( Entry<String, String> e : getMap.getOverriddenParameters().entrySet() ) { if ( map.containsKey( e.getKey().toLowerCase() ) ) { LOG.debug( "Overriding preset parameter {}.", e.getKey() ); if ( fld != null && !( fld.startsWith( getMap.getFormat() ) || fld.startsWith( "image" ) ) ) { XMLInputFactory fac = XMLInputFactory.newInstance();
try { List<String> layers = new ArrayList<String>(); for ( LayerRef layerRef : gm.getLayers() ) { layers.add( layerRef.getName() ); int width = gm.getWidth(); int height = gm.getHeight(); Envelope bbox = gm.getBoundingBox(); ICRS crs = gm.getCoordinateSystem(); GetFeatureInfo request = new GetFeatureInfo( layers, width, height, i, j, bbox, crs, limit ); Map<String, String> overriddenParameters = new HashMap<String, String>();
private LayerQuery buildQuery( StyleRef style, LayerRef lr, MapOptionsMaps options, List<MapOptions> mapOptions, OperatorFilter f, org.deegree.protocol.wms.ops.GetMap gm ) { for ( org.deegree.layer.Layer l : Themes.getAllLayers( themeMap.get( lr.getName() ) ) ) { insertMissingOptions( l.getMetadata().getName(), options, l.getMetadata().getMapOptions(), defaultLayerOptions ); mapOptions.add( options.get( l.getMetadata().getName() ) ); } LayerQuery query = new LayerQuery( gm.getBoundingBox(), gm.getWidth(), gm.getHeight(), style, f, gm.getParameterMap(), gm.getDimensions(), gm.getPixelSize(), options, gm.getQueryBox() ); return query; }
private void checkGetMap( Version version, org.deegree.protocol.wms.ops.GetMap gm ) throws OWSException { if ( !supportedImageFormats.contains( gm.getFormat() ) ) { throw new OWSException( get( "WMS.UNSUPPORTED_IMAGE_FORMAT", gm.getFormat() ), OWSException.INVALID_FORMAT ); for ( LayerRef lr : gm.getLayers() ) { if ( !service.hasTheme( lr.getName() ) ) { throw new OWSException( "The layer with name " + lr.getName() + " is not defined.", "LayerNotDefined", for ( StyleRef sr : gm.getStyles() ) { if ( gm.getCoordinateSystem() == null ) { ICRS crs = gm.getCoordinateSystem(); if ( crs instanceof CRSRef ) { ( (CRSRef) crs ).getReferencedObject(); controllers.get( version ).throwSRSException( gm.getCoordinateSystem().getAlias() );
/** * Checks whether the given {@link GetMap} request can be processed with regard to the configured limits on image * size and layer count. * * @param request * request, must not be <code>null</code> * @param config * WMS config, must not be <code>null</code> * @throws OWSException * if the request can not be processed */ public void checkRequestedSizeAndLayerCount( final GetMap request, final DeegreeWMS config ) throws OWSException { checkWidth( request.getWidth(), toIntegerNullSafe( config.getMaxWidth() ) ); checkHeight( request.getHeight(), toIntegerNullSafe( config.getMaxHeight() ) ); int layerCount = request.getLayers() != null ? request.getLayers().size() : 0; checkLayerCount( layerCount, toIntegerNullSafe( config.getLayerLimit() ) ); }
public void getMap( org.deegree.protocol.wms.ops.GetMap gm, List<String> headers, RenderContext ctx ) throws OWSException { Iterator<StyleRef> styleItr = gm.getStyles().iterator(); MapOptionsMaps options = gm.getRenderingOptions(); List<MapOptions> mapOptions = new ArrayList<MapOptions>(); double scale = gm.getScale(); Iterator<LayerRef> layerItr = gm.getLayers().iterator(); List<OperatorFilter> filters = gm.getFilters(); Iterator<OperatorFilter> filterItr = filters == null ? null : filters.iterator(); while ( layerItr.hasNext() ) {
@Override public Envelope getEnvelope() { return gm.getBoundingBox(); }
private List<LayerData> checkStyleValidAndBuildLayerDataList( org.deegree.protocol.wms.ops.GetMap gm, List<String> headers, double scale, ListIterator<LayerQuery> queryIter ) throws OWSException { List<LayerData> layerDataList = new ArrayList<LayerData>(); for ( LayerRef lr : gm.getLayers() ) { LayerQuery query = queryIter.next(); List<Layer> layers = getAllLayers( themeMap.get( lr.getName() ) ); assertStyleApplicableForAtLeastOneLayer( layers, query.getStyle(), lr.getName() ); for ( org.deegree.layer.Layer layer : layers ) { if ( layer.getMetadata().getScaleDenominators().first > scale || layer.getMetadata().getScaleDenominators().second < scale ) { continue; } if ( layer.isStyleApplicable( query.getStyle() ) ) { layerDataList.add( layer.mapQuery( query, headers ) ); } } } return layerDataList; }
private AttachmentPart createAttachment( GetMap getMap, ByteArrayOutputStream stream, SOAPMessage message, String contentId ) { DataSource ds = new ByteArrayDataSource( stream.toByteArray() ); DataHandler dataHandler = new DataHandler( ds ); AttachmentPart attachmentPart = message.createAttachmentPart( dataHandler ); attachmentPart.setContentId( contentId ); attachmentPart.setContentType( getMap.getFormat() ); return attachmentPart; }
private void doGetMap( Map<String, String> map, HttpResponseBuffer response, Version version, GetMap gm ) throws OWSException, IOException { LinkedList<String> headers = doGetMap( gm, map, version, response.getOutputStream() ); response.setContentType( gm.getFormat() ); addHeaders( response, headers ); }
protected void getMap( Map<String, String> map, HttpResponseBuffer response, Version version ) throws OWSException, IOException, MissingDimensionValue, InvalidDimensionValue { org.deegree.protocol.wms.ops.GetMap gm2 = new org.deegree.protocol.wms.ops.GetMap( map, version, service.getExtensions() ); doGetMap( map, response, version, gm2 ); }
private static Pair<SimpleRaster, String> getMapAsSimpleRaster( WMSClient client, List<String> layers, int width, int height, Envelope bbox, ICRS srs, String format, boolean transparent, boolean errorsInImage, int timeout ) throws IOException { GetMap gm = new GetMap( layers, width, height, bbox, srs, format, transparent ); Pair<BufferedImage, String> imageResponse = client.getMap( gm, null, timeout, errorsInImage ); Pair<SimpleRaster, String> response = new Pair<SimpleRaster, String>(); if ( imageResponse.first != null ) { BufferedImage img = imageResponse.first; RasterData rasterData = RasterFactory.rasterDataFromImage( img ); RasterGeoReference rasterEnv = RasterGeoReference.create( OriginLocation.OUTER, bbox, img.getWidth(), img.getHeight() ); SimpleRaster raster = new SimpleRaster( rasterData, bbox, rasterEnv, null ); response.first = raster; } else { response.second = imageResponse.second; } return response; }
@Override public RemoteWMSLayerData mapQuery( LayerQuery query, List<String> headers ) { Map<String, String> extraParams = new HashMap<String, String>(); replaceParameters( extraParams, query.getParameters(), defaultParametersGetMap, hardParametersGetMap ); ICRS crs = this.crs; if ( !alwaysUseDefaultCrs ) { ICRS envCrs = query.getEnvelope().getCoordinateSystem(); if ( client.getCoordinateSystems( originalName ).contains( envCrs.getAlias() ) ) { crs = envCrs; } } GetMap gm = new GetMap( singletonList( originalName ), query.getWidth(), query.getHeight(), query.getEnvelope(), crs, format, transparent ); return new RemoteWMSLayerData( client, gm, extraParams ); }
@Override public Tile getTile( long x, long y ) { if ( metadata.getNumTilesX() <= x || metadata.getNumTilesY() <= y || x < 0 || y < 0 ) { return null; } double width = metadata.getTileWidth(); double height = metadata.getTileHeight(); Envelope env = metadata.getSpatialMetadata().getEnvelope(); double minx = width * x + env.getMin().get0(); double miny = env.getMax().get1() - height * y; Envelope envelope = fac.createEnvelope( minx, miny - height, minx + width, miny, env.getCoordinateSystem() ); ICRS crs = this.crs; if ( crs == null ) { crs = envelope.getCoordinateSystem(); } Map<String, String> overriddenParameters = new HashMap<String, String>(); RequestUtils.replaceParameters( overriddenParameters, RequestUtils.getCurrentThreadRequestParameters().get(), defaultGetMap, hardGetMap ); GetMap gm = new GetMap( layers, styles, (int) tileSizeX, (int) tileSizeY, envelope, crs, format, true, overriddenParameters ); return new RemoteWMSTile( client, gm, recodedOutputFormat, defaultGetFeatureInfo, hardGetFeatureInfo ); }