Hello every body,
I'm looking for the structure of a URL for a query getFeatureInfo works because I
used the code below but it gives me the following error:
"QUERY_LAYERS contains layers not cited in LAYERS".
with the exit URL :
http://localhost:8080/geoserver/wms?Y=-42&X=147&SERVICE=WMS&FORMAT=image/png&HEIGHT=400&REQUEST=GetFeatureInfo&WIDTH=400&BBOX=-114.01268,59.4596930,-113.26043,60.0835794&SRS=EPSG:4326&QUERY_LAYERS=nurc%3AArc_Sample&VERSION=1.1.1
when i put the exit URL directly in the browser with the correct layer (QUERY_LAYERS=
nurc:Arc_Sample) it give me the same error !The code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Iterator;
import org.geotools.data.ows.Layer;
import org.geotools.data.ows.WMSCapabilities;
import org.geotools.data.wms.WMSUtils;
import org.geotools.data.wms.WebMapServer;
import org.geotools.data.wms.request.GetFeatureInfoRequest;
import org.geotools.data.wms.request.GetMapRequest;
import org.geotools.data.wms.response.GetFeatureInfoResponse;
public class GetFeatureInfo {
public static void main(String[] args) throws Exception {
try{
URL url = new URL("
http://localhost:8080/geoserver/wms?REQUEST=GetCapabilities");
WebMapServer wms = new WebMapServer(url);
WMSCapabilities caps = wms.getCapabilities();
Layer layer = null;
for( Iterator i = caps.getLayerList().iterator(); i.hasNext();){
Layer test = (Layer) i.next();
if( test.getName() != null && test.getName().length() != 0 ){
layer = test;
break;
}
}
// GetFeatureInfo needs a GetMap before
GetMapRequest getMapRequest = wms.createGetMapRequest();
// We set the SRS
getMapRequest.setSRS("EPSG:4326");
// We set the dimensions of the output
getMapRequest.setDimensions("400", "400");
// We set the output format
getMapRequest.setFormat("image/png");
// We set the BBOX of the requested Map
getMapRequest.setBBox("-114.01268,59.4596930,-113.26043,60.0835794");
// Now, we can create our GetFeatureInfo, from the previous GetMap
GetFeatureInfoRequest request = wms.createGetFeatureInfoRequest(getMapRequest);
// We want request this layer
request.addQueryLayer(layer);
// We need information from this point
request.setQueryPoint(147,-42);
System.out.println(request.getFinalURL());
// We ask the server
GetFeatureInfoResponse response = (GetFeatureInfoResponse) wms.issueRequest(request);
System.out.println(response.getContentType());
BufferedReader in = new BufferedReader(new InputStreamReader(response.getInputStream()));
String line;
boolean textFound = false;
while ((line = in.readLine()) != null) {
System.out.println(line);
} catch(java.net.ConnectException ce){
if(ce.getMessage().indexOf("timed out")>0){
System.err.println("Unable to test - timed out: "+ce);
} else{
throw(ce);
}
}
}
}
And thank you very much.