user2860857
user2860857

Reputation: 559

cannot add features to WFS layer

I try to load some features from Geoserver to a vector layer in Openlayers 3.9.0.

var url =  'http://localhost:5550/geoserver/mymap/wfs?service=WFS&'+'version=1.0.0&request=GetFeature&typeName=mymap:layer&'+'outputFormat=application/json&maxFeatures=50';         
var projection = ol.proj.get('EPSG:3857');
var extent = [2297128.5, 4618333, 2459120.25, 4763120];

var amir = new ol.source.Vector({
    format: new ol.format.GeoJSON(),
    loader: function (extent) {
        $.ajax(url, {type: 'GET'})
            .done(loadFeatures)
            .fail(function () {alert("error");});
    },
    strategy: ol.loadingstrategy.bbox
});

function loadFeatures(response) {
    formatWFS = new ol.format.WFS();
    var features = formatWFS.readFeatures(response);    
    amir.addFeatures(features);

//-----------OR---------------------    
    var features = amir.readFeatures(response);
    amir.addFeatures(features);
}

var fill = new ol.style.Fill({
color: 'rgba(0,0,0,0.2)'
});

var stroke = new ol.style.Stroke({
color: 'rgba(0,0,0,0.4)'
});

var circle = new ol.style.Circle({
radius: 6,
fill: fill,
stroke: stroke
});

jake = new ol.layer.Vector({
    source: amir,
    style: new ol.style.Style({
        fill: fill,
        stroke: stroke,
        image: circle
      })
});

In loadFeatures function if I use

formatWFS = new ol.format.WFS();
var features = formatWFS.readFeatures(response);    
amir.addFeatures(features);

I get Uncaught AssertionError: Failure: Unknown source type pointing to a openlayers line that throws errors and to this line of my codevar features = formatWFS.readFeatures(response);.

If I use

var features = amir.readFeatures(response);
amir.addFeatures(features);

I get Uncaught TypeError: sourceVector.readFeatures is not a function pointing to var features = amir.readFeatures(response); .

The request to the WFS looks ok, with OK 200 status. If I grab the request's URL sended to Geoserver and open it in a new tab I get raw GeoJSON like {"type":"FeatureCollection","totalFeatures":422,"features":[{"type":"Feature","id":"layer.709","geometry":{"type":"Point","coordinates":[2391735.8907621,4695330.8039257005]},"geometry_name":"l_geom","properties":{"l_name":"Leeron"}},....//next feature

So its a FeatureCollection not just an array. Not that I know how to handle this

I dont get why to set a ol.format.WFS and not just read/add features. I dont know how to debug and add the features to my layer

Upvotes: 0

Views: 1247

Answers (1)

ahocevar
ahocevar

Reputation: 5648

You are instructing GeoServer to use GeoJSON as output format, so you'll need to use the GeoJSON format in OpenLayers to parse the features. You should be able to simplify your source configuration to something like

var url = 'http://localhost:5550/geoserver/mymap/wfs?service=WFS&' +
    'version=1.0.0&request=GetFeature&typeName=mymap:layer&' +
    'outputFormat=application/json&maxFeatures=50';         
var amir = new ol.source.Vector({
  format: new ol.format.GeoJSON(),
  url: function(extent, projection) {
    return url + '&bbox=' + extent.join(',') +
        '&srsName=' + projection.getCode();
  },
  strategy: ol.loadingstrategy.bbox
});

Upvotes: 2

Related Questions