private void getFeatureInfo( Map<String, String> map, final HttpResponseBuffer response, Version version ) throws OWSException, IOException, MissingDimensionValue, InvalidDimensionValue { org.deegree.protocol.wms.ops.GetFeatureInfo fi = new org.deegree.protocol.wms.ops.GetFeatureInfo( map, version ); doGetFeatureInfo( map, response, version, fi ); }
private void checkGetFeatureInfo( Version version, org.deegree.protocol.wms.ops.GetFeatureInfo gfi ) throws OWSException { if ( gfi.getInfoFormat() != null && !gfi.getInfoFormat().equals( "" ) && !featureInfoManager.getSupportedFormats().contains( gfi.getInfoFormat() ) ) { throw new OWSException( get( "WMS.INVALID_INFO_FORMAT", gfi.getInfoFormat() ), OWSException.INVALID_FORMAT ); } for ( LayerRef lr : gfi.getQueryLayers() ) { if ( !service.hasTheme( lr.getName() ) ) { throw new OWSException( "The layer with name " + lr.getName() + " is not defined.", "LayerNotDefined", "layers" ); } } for ( StyleRef sr : gfi.getStyles() ) { // TODO check style availability } try { if ( gfi.getCoordinateSystem() == null ) { // this can happen if some AUTO SRS id was invalid controllers.get( version ).throwSRSException( "automatic" ); } ICRS crs = gfi.getCoordinateSystem(); if ( crs instanceof CRSRef ) { ( (CRSRef) crs ).getReferencedObject(); } } catch ( ReferenceResolvingException e ) { // only throw an exception if a truly invalid srs is found // this makes it possible to request srs that are not advertised, which may be useful controllers.get( version ).throwSRSException( gfi.getCoordinateSystem().getAlias() ); } }
private List<LayerQuery> prepareGetFeatures( org.deegree.protocol.wms.ops.GetFeatureInfo gfi ) { List<LayerQuery> queries = new ArrayList<LayerQuery>(); Iterator<LayerRef> layerItr = gfi.getQueryLayers().iterator(); Iterator<StyleRef> styleItr = gfi.getStyles().iterator(); List<OperatorFilter> filters = gfi.getFilters(); Iterator<OperatorFilter> filterItr = filters == null ? null : filters.iterator(); while ( layerItr.hasNext() ) { LayerRef lr = layerItr.next(); StyleRef sr = styleItr.next(); OperatorFilter f = filterItr == null ? null : filterItr.next(); final int layerRadius = defaultLayerOptions.getFeatureInfoRadius(); LayerQuery query = new LayerQuery( gfi.getEnvelope(), gfi.getWidth(), gfi.getHeight(), gfi.getX(), gfi.getY(), gfi.getFeatureCount(), f, sr, gfi.getParameterMap(), gfi.getDimensions(), new MapOptionsMaps(), gfi.getEnvelope(), layerRadius ); queries.add( query ); } return queries; }
params.put( "version", wmsVersion.toString() ); params.put( "service", "WMS" ); String csvLayerNames = join( ",", gfi.getQueryLayers() ); params.put( "layers", csvLayerNames ); params.put( "query_layers", csvLayerNames ); params.put( "styles", "" ); params.put( "width", Integer.toString( gfi.getWidth() ) ); params.put( "height", Integer.toString( gfi.getHeight() ) ); params.put( "format", getFormats( GetMap ).getFirst() ); params.put( "feature_count", Integer.toString( gfi.getFeatureCount() ) ); params.put( "x", Integer.toString( gfi.getX() ) ); params.put( "y", Integer.toString( gfi.getY() ) ); params.put( "srs", gfi.getCoordinateSystem().getAlias() ); String fmt = "text/xml"; LinkedList<String> fmts = getFormats(WMSRequestType.GetFeatureInfo); Envelope bbox = gfi.getEnvelope(); params.put( "bbox", bbox.getMin().get0() + "," + bbox.getMin().get1() + "," + bbox.getMax().get0() + "," + bbox.getMax().get1() ); } else { params.put( "i", Integer.toString( gfi.getX() ) ); params.put( "j", Integer.toString( gfi.getY() ) ); params.put( "crs", gfi.getCoordinateSystem().getAlias() ); String fmt = "text/xml"; LinkedList<String> fmts = getFormats(WMSRequestType.GetFeatureInfo); Envelope bbox = gfi.getEnvelope(); if ( axisFlipped( bbox.getCoordinateSystem() ) ) {
List<LayerData> list = new ArrayList<LayerData>(); double scale = calcScaleWMS130( gfi.getWidth(), gfi.getHeight(), gfi.getEnvelope(), gfi.getCoordinateSystem(), DEFAULT_PIXEL_SIZE ); for ( LayerRef n : gfi.getQueryLayers() ) { LayerQuery query = queryIter.next(); for ( org.deegree.layer.Layer l : Themes.getAllLayers( themeMap.get( n.getName() ) ) ) { List<Feature> feats = new ArrayList<Feature>( gfi.getFeatureCount() ); for ( LayerData d : list ) { FeatureCollection col = d.info(); if ( feats.size() > gfi.getFeatureCount() ) { feats = feats.subList( 0, gfi.getFeatureCount() );
/** * Performs a <code>GetFeatureInfo</code> request and returns the response as a {@link FeatureCollection}. * * @param request * request parameter, must not be <code>null</code> * @param hardParams * raw parameters for augmenting overriding KVPs, must not be <code>null</code> * @return response parsed as feature collection, never <code>null</code> * @throws IOException * @throws OWSExceptionReport * @throws XMLStreamException */ public FeatureCollection doGetFeatureInfo( GetFeatureInfo request, Map<String, String> hardParams ) throws IOException, OWSExceptionReport, XMLStreamException { Map<String, String> params = buildGetFeatureInfoParamMap( request, hardParams ); overrideHardParams( params, hardParams ); OwsHttpResponse response = null; try { URL url = getGetUrl( GetFeatureInfo.name() ); response = httpClient.doGet( url, params, null ); response.assertHttpStatus200(); XMLStreamReader reader = response.getAsXMLStream(); String csvLayerNames = join( ",", request.getQueryLayers() ); return FeatureInfoParser.parseAsFeatureCollection( reader, csvLayerNames ); } finally { closeQuietly( response ); } }
throws OWSException, IOException { checkGetFeatureInfo( version, fi ); ICRS crs = fi.getCoordinateSystem(); boolean geometries = fi.returnGeometries(); List<String> queryLayers = map( fi.getQueryLayers(), CollectionUtils.<LayerRef> getToStringMapper() ); RenderingInfo info = new RenderingInfo( fi.getInfoFormat(), fi.getWidth(), fi.getHeight(), false, null, fi.getEnvelope(), 0.28, map ); String format = fi.getInfoFormat(); info.setFormat( format ); info.setFeatureCount( fi.getFeatureCount() ); info.setX( fi.getX() ); info.setY( fi.getY() ); LinkedList<String> headers = new LinkedList<String>(); Pair<FeatureCollection, LinkedList<String>> pair = new Pair<FeatureCollection, LinkedList<String>>(
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() ); }
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>(); RequestUtils.replaceParameters( overriddenParameters, RequestUtils.getCurrentThreadRequestParameters().get(),
@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 ); }