1
votes

I'm using OpenLayers 4 to build a GetFeatureInfo url with a buffer parameter to a WMS layer in Mapserver in order to find the closest feature of the layer given some specific coordinates.

The problem is that the request never returns any result at all. So I don't know if there is something wrong in my code or I'm missing something.

Here is my code explained:

var layer = new ol.layer.Image({
    source: new ol.source.ImageWMS({
        url: 'http://www.juntadeandalucia.es/medioambiente/mapwms/REDIAM_PPHH_2012?',
        params: {'LAYERS': 'MSPF_POLY'},
        serverType: 'mapserver',
        crossOrigin: 'anonymous'
    })
});

// I create the layer only for requesting purpose so I don't add it to the map.

var coordinates = [311618.514508171, 4040090.26715453];

var srs = this.map_.getProjection().code; //"EPSG:25830"

const getFeatureInfoParams = {
        'INFO_FORMAT': 'text/plain', //or application/vnd.ogc.gml
        'FEATURE_COUNT': 1,
        'SRS': srs,
        'Buffer': 10;
};

var viewResolution = this.map_.getMapImpl().getView().getResolution(); 
// 353.3212194629518

var urlToRequest = layer.getSource().getGetFeatureInfoUrl(coordinates, viewResolution, srs, 
getFeatureInfoParams);

return urlToRequest;
// urlToRequest is ==> http://www.juntadeandalucia.es/medioambiente/mapwms/REDIAM_PPHH_2012?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=MSPF_POLY&LAYERS=MSPF_POLY&INFO_FORMAT=text%2Fplain&FEATURE_COUNT=1&SRS=EPSG%3A25830&Buffer=10&I=50&J=50&CRS=EPSG%3A25830&STYLES=&WIDTH=101&HEIGHT=101&BBOX=293775.7929252919%2C4022247.5455716513%2C329461.2360910501%2C4057932.988737409

//I have seen that it always return I=50/J=50 and perhap this could be the problem I 
//don't know. It is that correct? The pixel coordinates shouldn't be different in 
//different bounding boxes values per request?
1
If you don't add the layer to the map the BBOX will not be set correctly. Try adding the layer to the map with opacity: 0.01 and/or add it as the first layer so it is hidden below other layersMike
@Mike I've tried to add the layer to the map. Now the pixels coordinates aren't always I=50/J=50 but the request doesn't return any result neither. Maybe it is because the BUFFER parameter is not supported in MapServer?Fran1911989

1 Answers

0
votes

buffer is not part of the WMS specification and is not supported by MapServer through WMS. You can read more about MapServer's WMS support at: https://mapserver.org/ogc/wms_server.html Other types of mapping servers may offer buffer as a vendor-specific add-on parameter.

On the MapServer-side, there are other ways to handle a buffer operation, but in your case it seems you are on the client-side.

Sorry for so little help on this.