Skip to content

Commit 73e2cc2

Browse files
committed
Merge pull request deegree#518 from gritGmbH/3.4-bugfix-featureinfo-queryable
3.4 bugfix featureinfo queryable
2 parents 891d9c8 + dc5715a commit 73e2cc2

File tree

7 files changed

+72
-26
lines changed

7 files changed

+72
-26
lines changed

deegree-core/deegree-core-layer/src/main/java/org/deegree/layer/config/ConfigUtils.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public static MapOptions parseLayerOptions( LayerOptionsType cfg ) {
212212
Quality quali = null;
213213
Interpolation interpol = null;
214214
int maxFeats = -1;
215-
int rad = 1;
215+
int rad = -1;
216216
try {
217217
alias = Antialias.valueOf( cfg.getAntiAliasing() );
218218
} catch ( Throwable e ) {
@@ -231,10 +231,14 @@ public static MapOptions parseLayerOptions( LayerOptionsType cfg ) {
231231
if ( cfg.getMaxFeatures() != null ) {
232232
maxFeats = cfg.getMaxFeatures();
233233
}
234-
if ( cfg.getFeatureInfo() != null && cfg.getFeatureInfo().isEnabled() ) {
235-
rad = cfg.getFeatureInfo().getPixelRadius().intValue();
234+
if ( cfg.getFeatureInfo() != null ) {
235+
if ( cfg.getFeatureInfo().isEnabled() ) {
236+
rad = Math.max( 0, cfg.getFeatureInfo().getPixelRadius().intValue() );
237+
} else {
238+
rad = 0;
239+
}
236240
} else if ( cfg.getFeatureInfoRadius() != null ) {
237-
rad = cfg.getFeatureInfoRadius();
241+
rad = Math.max( 0, cfg.getFeatureInfoRadius() );
238242
}
239243
return new MapOptions( quali, interpol, alias, maxFeats, rad );
240244
}

deegree-core/deegree-core-layer/src/main/java/org/deegree/layer/metadata/LayerMetadata.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -165,13 +165,16 @@ public void setCascaded( int cascaded ) {
165165
}
166166

167167
/**
168-
* @return the queryable
168+
* @return true if the layer can be queried
169+
* @see MapOptions#getFeatureInfoRadius()
169170
*/
170171
public boolean isQueryable() {
171172
if ( mapOptions == null ) {
172173
return true;
173174
}
174-
return mapOptions.getFeatureInfoRadius() > 0;
175+
176+
//TRICKY assume that, the service is query able by default (<0)
177+
return mapOptions.getFeatureInfoRadius() != 0;
175178
}
176179

177180
/**

deegree-core/deegree-core-rendering-2d/src/main/java/org/deegree/rendering/r2d/context/MapOptions.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@
3838
/**
3939
*
4040
* @author <a href="mailto:[email protected]">Andreas Schmitz</a>
41-
* @author last edited by: $Author: stranger $
42-
*
43-
* @version $Revision: $, $Date: $
41+
* @author <a href="mailto:[email protected]">Stephan Reichhelm</a>
4442
*/
4543
public class MapOptions {
4644

@@ -60,7 +58,7 @@ public MapOptions( Quality quality, Interpolation interpol, Antialias antialias,
6058
this.interpol = interpol;
6159
this.antialias = antialias;
6260
this.maxFeatures = maxFeatures;
63-
this.setFeatureInfoRadius( featureInfoRadius );
61+
this.featureInfoRadius = featureInfoRadius;
6462
}
6563

6664
/**
@@ -124,15 +122,15 @@ public void setMaxFeatures( int maxFeatures ) {
124122
}
125123

126124
/**
127-
* @return the featureInfoRadius, a value < 1 means disabled
125+
* @return the featureInfoRadius, a value < 1 means default, 0 means disabled and > 0 for the radius
128126
*/
129127
public int getFeatureInfoRadius() {
130128
return featureInfoRadius;
131129
}
132130

133131
/**
134132
* @param featureInfoRadius
135-
* the featureInfoRadius to set, a value < 1 means disabled
133+
* the featureInfoRadius to set, a value < 1 means default, 0 means disabled and > 0 for the radius
136134
*/
137135
public void setFeatureInfoRadius( int featureInfoRadius ) {
138136
this.featureInfoRadius = featureInfoRadius;
@@ -246,5 +244,4 @@ public Interpolation getOption( String layer ) {
246244
}
247245
};
248246
}
249-
250247
}

deegree-layers/deegree-layers-coverage/src/main/java/org/deegree/layer/persistence/coverage/CoverageLayer.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,11 @@ private InterpolationType determineInterpolation( Interpolation fromRequest ) {
130130
public CoverageLayerData infoQuery( LayerQuery query, List<String> headers )
131131
throws OWSException {
132132
try {
133-
Envelope bbox = query.calcClickBox( query.getRenderingOptions().getFeatureInfoRadius( getMetadata().getName() ) );
133+
int layerRadius = -1;
134+
if ( getMetadata().getMapOptions() != null ) {
135+
layerRadius = getMetadata().getMapOptions().getFeatureInfoRadius();
136+
}
137+
final Envelope bbox = query.calcClickBox( layerRadius > -1 ? layerRadius : query.getLayerRadius() );
134138

135139
RangeSet filter = dimensionHandler.getDimensionFilter( query.getDimensions(), headers );
136140

deegree-layers/deegree-layers-feature/src/main/java/org/deegree/layer/persistence/feature/FeatureLayer.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,11 @@ public FeatureLayerData infoQuery( final LayerQuery query, List<String> headers
166166
filter = Filters.and( filter, getStyleFilters( style, query.getScale() ) );
167167
filter = Filters.and( filter, query.getFilter() );
168168

169-
final Envelope clickBox = query.calcClickBox( query.getLayerRadius() );
169+
int layerRadius = -1;
170+
if ( getMetadata().getMapOptions() != null ) {
171+
layerRadius = getMetadata().getMapOptions().getFeatureInfoRadius();
172+
}
173+
final Envelope clickBox = query.calcClickBox( layerRadius > -1 ? layerRadius : query.getLayerRadius() );
170174

171175
filter = (OperatorFilter) addBBoxConstraint( clickBox, filter, null, false );
172176

deegree-services/deegree-services-wms/src/main/java/org/deegree/services/wms/MapService.java

+7-10
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,11 @@ public FeatureCollection getFeatures( org.deegree.protocol.wms.ops.GetFeatureInf
292292
|| l.getMetadata().getScaleDenominators().second < scale ) {
293293
continue;
294294
}
295+
296+
if (!l.getMetadata().isQueryable()) {
297+
continue;
298+
}
299+
295300
list.add( l.infoQuery( query, headers ) );
296301
}
297302
}
@@ -325,15 +330,7 @@ private List<LayerQuery> prepareGetFeatures( org.deegree.protocol.wms.ops.GetFea
325330
LayerRef lr = layerItr.next();
326331
StyleRef sr = styleItr.next();
327332
OperatorFilter f = filterItr == null ? null : filterItr.next();
328-
int layerRadius = 0;
329-
for ( org.deegree.layer.Layer l : Themes.getAllLayers( themeMap.get( lr.getName() ) ) ) {
330-
if ( l.getMetadata().getMapOptions() != null
331-
&& l.getMetadata().getMapOptions().getFeatureInfoRadius() != 1 ) {
332-
layerRadius = l.getMetadata().getMapOptions().getFeatureInfoRadius();
333-
} else {
334-
layerRadius = defaultLayerOptions.getFeatureInfoRadius();
335-
}
336-
}
333+
final int layerRadius = defaultLayerOptions.getFeatureInfoRadius();
337334
LayerQuery query = new LayerQuery( gfi.getEnvelope(), gfi.getWidth(), gfi.getHeight(), gfi.getX(),
338335
gfi.getY(), gfi.getFeatureCount(), f, sr, gfi.getParameterMap(),
339336
gfi.getDimensions(), new MapOptionsMaps(), gfi.getEnvelope(),
@@ -376,7 +373,7 @@ public Pair<Integer, Integer> getLegendSize( Style style ) {
376373
return getLegendHandler.getLegendSize( style );
377374
}
378375

379-
public BufferedImage getLegend( GetLegendGraphic req ) {
376+
public BufferedImage getLegend( GetLegendGraphic req ) throws OWSException {
380377
return getLegendHandler.getLegend( req );
381378
}
382379

deegree-services/deegree-services-wms/src/main/java/org/deegree/services/wms/controller/capabilities/theme/LayerMetadataMerger.java

+38-1
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,26 @@ Occam Labs UG (haftungsbeschränkt)
4848
import org.deegree.commons.utils.DoublePair;
4949
import org.deegree.layer.Layer;
5050
import org.deegree.layer.metadata.LayerMetadata;
51+
import org.deegree.rendering.r2d.context.MapOptions;
5152
import org.deegree.theme.Theme;
5253
import org.deegree.theme.Themes;
5354

5455
/**
5556
* Merges {@link LayerMetadata} of {@link Theme} objects.
5657
*
5758
* @author <a href="mailto:[email protected]">Markus Schneider</a>
59+
* @author <a href="mailto:[email protected]">Stephan Reichhelm</a>
5860
*
5961
* @since 3.3
6062
*/
6163
class LayerMetadataMerger {
62-
64+
65+
private static final int QUERYABLE_DEFAULT_MASK = 1;
66+
67+
private static final int QUERYABLE_DISABLED_MASK = 2;
68+
69+
private static final int QUERYABLE_ENABLED_MASK = 4;
70+
6371
/**
6472
* Returns the combined layer metadata for the given theme/sublayers.
6573
*
@@ -72,14 +80,30 @@ class LayerMetadataMerger {
7280
LayerMetadata merge( final Theme theme ) {
7381
final LayerMetadata themeMetadata = theme.getLayerMetadata();
7482
LayerMetadata layerMetadata = null;
83+
84+
int queryable = 0;
85+
7586
for ( final Layer l : Themes.getAllLayers( theme ) ) {
87+
queryable |= analyseQueryable( l.getMetadata() );
88+
7689
if ( layerMetadata == null ) {
7790
layerMetadata = l.getMetadata();
7891
} else {
7992
layerMetadata.merge( l.getMetadata() );
8093
}
8194
}
8295
themeMetadata.merge( layerMetadata );
96+
97+
if ( themeMetadata.getMapOptions() == null ) {
98+
themeMetadata.setMapOptions( new MapOptions( null, null, null, -1, -1 ) );
99+
}
100+
101+
if ( queryable == QUERYABLE_DISABLED_MASK ) {
102+
themeMetadata.getMapOptions().setFeatureInfoRadius( 0 );
103+
} else {
104+
themeMetadata.getMapOptions().setFeatureInfoRadius( -1 );
105+
}
106+
83107
return themeMetadata;
84108
}
85109

@@ -117,4 +141,17 @@ DoublePair mergeScaleDenominators( final Theme theme ) {
117141
return new DoublePair( min, max );
118142
}
119143

144+
private int analyseQueryable( LayerMetadata m ) {
145+
if ( m.getMapOptions() == null )
146+
return QUERYABLE_DEFAULT_MASK;
147+
148+
int r = m.getMapOptions().getFeatureInfoRadius();
149+
150+
if ( r < 0 )
151+
return QUERYABLE_DEFAULT_MASK;
152+
else if ( r == 0 )
153+
return QUERYABLE_DISABLED_MASK;
154+
else
155+
return QUERYABLE_ENABLED_MASK;
156+
}
120157
}

0 commit comments

Comments
 (0)