[mapserver-users] getFeatureInfo() Only Works on One Layer?

Yewondwossen Assefa yassefa at dmsolutions.ca
Tue Jan 27 20:35:17 EST 2009


Bill,

You might try setting the layers in the QUERY_LAYERS parameter without 
any space: QUERY_LAYERS: "us_interstate,us_states".
If that does not work, as suggested you might give the full URL sent to 
Mapserver.  From what I can see, query on more that one layer is 
possible  (URL using the Mapserver5.2.1 : 
http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&BBOX=-173.433000,36.354100,-12.969800,83.746600&SRS=EPSG:4326&WIDTH=785&HEIGHT=232&LAYERS=park%2Cpopplace&STYLES=%2C&FORMAT=image/png&TRANSPARENT=TRUE&QUERY_LAYERS=popplace,park&INFO_FORMAT=text/plain&X=302&Y=121&feature_count=1

Best Regards.


Bill Thoen wrote:
> I originally asked this on the OpenLayers forum, but was told that this 
> is really a Maperver question. So I'll try it here.
> 
> I've got a WMS layer that has two sub-layers in it and I'm trying to get 
> attribute information from them via a getFeatureInfo request, but I can 
> only get one of them to respond at a time. I've looked at the docs at  
> http://trac.openlayers.org/wiki/GetFeatureInfo and noticed that you can 
> specify several layers with the QUERY_LAYERS parameter, but I'm finding 
> that only the one listed first is active. Also, it's not clear what 
> layer you specify at the root of the request, but it looks like it's 
> supposed to be different from the layers you're querying. Anyway, here's 
> what I'm trying:
> 
> I open and load the combined layer like so:
> base = new OpenLayers.Layer.WMS(
>   "Base",
>   "http://192.168.0.250/cgi-bin/mapserv?map=base.map",
>   { layers: ["us_states", "us_interstate"] }
> );
> map.addLayer(base);
> 
> 
> And here's the request string I'm sending to MapServer:
> 
> var url = base.getFullRequestString({
> REQUEST: "GetFeatureInfo",
> EXCEPTIONS: "application/vnd.ogc.se_xml",
> FORMAT: 'png',
> BBOX: map.getExtent().toBBOX(),
> X: event.xy.x,
> Y: event.xy.y,
> INFO_FORMAT: 'text/plain',
> QUERY_LAYERS: "us_interstate, us_states",
> FEATURE_COUNT: 1,
> WIDTH: map.size.w,
> HEIGHT: map.size.h},
> "http://192.168.0.250/cgi-bin/mapserv?map=base.map&");
> OpenLayers.loadURL(url, '', this, setHTML);
> 
> Note the QUERY_LAYERS line. As shown here, it responds with interstate 
> attributes only when I click on an interstate roadway feature, but I get 
> nothing when I click on a state. If I reverse the order of these layers 
> in the list, then clicking on a state returns attributes from the 
> us_states table only. Even if I click on a spot where features in both 
> layers coincide, it returns only the attributes for the layer listed first.
> 
> Also, setting the FEATURE_COUNT parameter to something higher than 1 just
> gives me more results from the single that  is working.
> 
> So how do I use multiple layers in the QUERY_LAYERS parameter, or do I 
> get only one at a time? Also, I just guessed at using the layer called 
> 'base' for the getFeatureInfo oject, what is supposed to be used here?
> 
> TIA,
> - Bill Thoen
> 
> 
> 
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users
> 


-- 
----------------------------------------------------------------
Assefa Yewondwossen
Software Analyst

Email: assefa at dmsolutions.ca
http://www.dmsolutions.ca/

Phone: (613) 565-5056 (ext 14)
Fax:   (613) 565-0925
----------------------------------------------------------------



More information about the mapserver-users mailing list