@Override public CoverageLayerData mapQuery( LayerQuery query, List<String> headers ) throws OWSException { try { Envelope bbox = query.getEnvelope(); RangeSet filter = dimensionHandler.getDimensionFilter( query.getDimensions(), headers ); Style style = resolveStyleRef( query.getStyle() ); // handle SLD/SE scale settings style = style == null ? null : style.filter( query.getScale() ); Interpolation fromRequest = query.getRenderingOptions().getInterpolation( getMetadata().getName() ); InterpolationType interpol = determineInterpolation( fromRequest ); AbstractRaster raster = this.raster; if ( raster == null ) { raster = multiraster.getRaster( query.getResolution() ); } return new CoverageLayerData( raster, bbox, query.getWidth(), query.getHeight(), interpol, filter, style, getMetadata().getFeatureTypes().get( 0 ) ); } catch ( OWSException e ) { throw e; } catch ( Throwable e ) { LOG.warn( "Unable to prepare rendering of raster layer: {}", e.getLocalizedMessage() ); LOG.trace( "Stack trace:", e ); } return null; }
@Override public GdalLayerData infoQuery( LayerQuery query, List<String> headers ) throws OWSException { Envelope bbox = query.calcClickBox( query.getRenderingOptions().getFeatureInfoRadius( getMetadata().getName() ) ); return new GdalLayerData( datasets, bbox, query.getWidth(), query.getHeight(), gdalSettings ); }
@Override public RemoteWMSLayerData infoQuery( LayerQuery query, List<String> headers ) { Map<String, String> extraParams = new HashMap<String, String>(); replaceParameters( extraParams, query.getParameters(), defaultParametersGetFeatureInfo, hardParametersGetFeatureInfo ); ICRS crs = this.crs; if ( !alwaysUseDefaultCrs ) { ICRS envCrs = query.getEnvelope().getCoordinateSystem(); if ( client.getCoordinateSystems( originalName ).contains( envCrs.getAlias() ) ) { crs = envCrs; } } GetFeatureInfo gfi = new GetFeatureInfo( Collections.singletonList( originalName ), query.getWidth(), query.getHeight(), query.getX(), query.getY(), query.getEnvelope(), crs, query.getFeatureCount() ); return new RemoteWMSLayerData( client, gfi, extraParams ); }
@Override public GdalLayerData mapQuery( LayerQuery query, List<String> headers ) throws OWSException { Envelope bbox = query.getEnvelope(); return new GdalLayerData( datasets, bbox, query.getWidth(), query.getHeight(), gdalSettings ); }
layerRadius = getMetadata().getMapOptions().getFeatureInfoRadius(); final Envelope bbox = query.calcClickBox( layerRadius > -1 ? layerRadius : query.getLayerRadius() ); RangeSet filter = dimensionHandler.getDimensionFilter( query.getDimensions(), headers ); StyleRef ref = query.getStyle(); if ( !ref.isResolved() ) { ref.resolve( getMetadata().getStyles().get( ref.getName() ) ); style = style == null ? null : style.filter( query.getScale() ); raster = multiraster.getRaster( query.getResolution() ); return new CoverageLayerData( raster, bbox, query.getWidth(), query.getHeight(), InterpolationType.NEAREST_NEIGHBOR, filter, style, getMetadata().getFeatureTypes().get( 0 ) );
@Override public FeatureLayerData infoQuery( final LayerQuery query, List<String> headers ) throws OWSException { OperatorFilter filter = this.filter; filter = Filters.and( filter, dimFilterBuilder.getDimensionFilter( query.getDimensions(), headers ) ); StyleRef ref = query.getStyle(); if ( !ref.isResolved() ) { ref.resolve( getMetadata().getStyles().get( ref.getName() ) ); } Style style = ref.getStyle(); style = style.filter( query.getScale() ); filter = Filters.and( filter, getStyleFilters( style, query.getScale() ) ); filter = Filters.and( filter, query.getFilter() ); int layerRadius = -1; if ( getMetadata().getMapOptions() != null ) { layerRadius = getMetadata().getMapOptions().getFeatureInfoRadius(); } final Envelope clickBox = query.calcClickBox( layerRadius > -1 ? layerRadius : query.getLayerRadius() ); filter = (OperatorFilter) addBBoxConstraint( clickBox, filter, null, false ); QName featureType = this.featureType == null ? style.getFeatureType() : this.featureType; filter = Filters.repair( filter, AppSchemas.collectProperyNames( featureStore.getSchema(), featureType ) ); LOG.debug( "Querying the feature store(s)..." ); QueryBuilder builder = new QueryBuilder( featureStore, filter, featureType, clickBox, query, null, sortByFeatureInfo, getMetadata().getName() ); List<Query> queries = builder.buildInfoQueries(); LOG.debug( "Finished querying the feature store(s)." ); return new FeatureLayerData( queries, featureStore, query.getFeatureCount(), style, featureType ); }
@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 FeatureLayerData mapQuery( final LayerQuery query, List<String> headers ) throws OWSException { Style style = resolveStyleRef( query.getStyle() ); if ( style == null ) { throw new OWSException( "The style " + query.getStyle().getName() + " is not defined for layer " + getMetadata().getName() + ".", "StyleNotDefined", "styles" ); style = style.filter( query.getScale() ); final Envelope bbox = query.getQueryBox(); Integer maxFeats = query.getRenderingOptions().getMaxFeatures( getMetadata().getName() ); final int maxFeatures = maxFeats == null ? -1 : maxFeats;
List<Query> buildMapQueries() { List<Query> queries = new ArrayList<Query>(); Integer maxFeats = query.getRenderingOptions().getMaxFeatures( layerName ); final int maxFeatures = maxFeats == null ? -1 : maxFeats; if ( ftName == null && featureStore != null ) { final Filter filter2 = filter; queries.addAll( map( featureStore.getSchema().getFeatureTypes( null, false, false ), new Mapper<Query, FeatureType>() { @Override public Query apply( FeatureType u ) { Filter fil = addBBoxConstraint( bbox, filter2, geomProp, true ); return createQuery( u.getName(), fil, round( query.getScale() ), maxFeatures, query.getResolution(), sortBy ); } } ) ); } else { Query fquery = createQuery( ftName, addBBoxConstraint( bbox, filter, geomProp, true ), round( query.getScale() ), maxFeatures, query.getResolution(), sortBy ); queries.add( fquery ); } return queries; }
@Override public TileLayerData mapQuery( LayerQuery query, List<String> headers ) throws OWSException { Envelope env = query.getEnvelope(); ICRS crs = env.getCoordinateSystem(); String tds = coordinateSystems.get( crs ); if ( tds == null ) { String msg = "Tile layer " + getMetadata().getName() + " does not offer the coordinate system " + crs.getAlias(); LOG.debug( msg ); throw new OWSException( msg, OWSException.INVALID_CRS ); } TileDataSet data = tileDataSets.get( tds ); Iterator<Tile> tiles = data.getTiles( env, query.getResolution() ); return new TileLayerData( tiles ); }
static OperatorFilter buildFilterForMap(OperatorFilter filter, Style style, LayerQuery query, DimensionFilterBuilder dimFilterBuilder, List<String> headers) throws OWSException{ style = style.filter( query.getScale() ); filter = Filters.and( filter, Styles.getStyleFilters( style, query.getScale() ) ); filter = Filters.and( filter, query.getFilter() ); filter = Filters.and( filter, dimFilterBuilder.getDimensionFilter( query.getDimensions(), headers ) ); return filter; }
@Override public Query apply( FeatureType u ) { Filter fil = addBBoxConstraint( bbox, filter2, geomProp, true ); return createQuery( u.getName(), fil, round( query.getScale() ), maxFeatures, query.getResolution(), sortBy ); } } ) );
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; }
@Override public Query apply( FeatureType u ) { Filter f; if ( filter == null ) { f = buildFilter( null, u, bbox ); } else { f = buildFilter( ( (OperatorFilter) filter ).getOperator(), u, bbox ); } return createQuery( u.getName(), f, -1, query.getFeatureCount(), -1, sortBy ); } } ) );
List<Query> buildInfoQueries() { List<Query> queries = new ArrayList<Query>(); if ( ftName == null ) { queries.addAll( map( featureStore.getSchema().getFeatureTypes( null, false, false ), new Mapper<Query, FeatureType>() { @Override public Query apply( FeatureType u ) { Filter f; if ( filter == null ) { f = buildFilter( null, u, bbox ); } else { f = buildFilter( ( (OperatorFilter) filter ).getOperator(), u, bbox ); } return createQuery( u.getName(), f, -1, query.getFeatureCount(), -1, sortBy ); } } ) ); clearNulls( queries ); } else { Filter f; if ( filter == null ) { f = buildFilter( null, featureStore.getSchema().getFeatureType( ftName ), bbox ); } else { f = buildFilter( ( (OperatorFilter) filter ).getOperator(), featureStore.getSchema().getFeatureType( ftName ), bbox ); } queries.add( createQuery( ftName, f, -1, query.getFeatureCount(), -1, sortBy ) ); } return queries; }