[OpenLayers-Users] Filter features of a Vector-Layer

Barbara Fiederer barbara.fiederer at web.de
Tue Jan 19 03:25:48 EST 2010


Hi List,

I need some help to receive a Vector-Layer with filtered features, because I need more features than I can request via GET. 
Before learning that, I started with filtering a WFS, that worked. I narrowed it down to a basic example, that is shown below. This is the working code:

OpenLayers.ProxyHost= "/cgi-bin/proxy.cgi?url=";    	
function init(){
var bounds = new OpenLayers.Bounds(...);
var options = {controls: [],maxExtent: bounds,maxResolution: ...,projection: "..." };

var map = new OpenLayers.Map('map', options);

//basic Layer for Control -> ok
var wms = new OpenLayers.Layer.WMS("WMS","http://meineDomain.com/wms",
				{layers: 'demo:meinLayer', srs: '...',tiled: 'true'});
	
map.addLayers([wms]);
map.zoomToMaxExtent();

//Create Filter -> works
var filter_1_1 = new OpenLayers.Format.Filter({version: "1.1.0"});
var xml = new OpenLayers.Format.XML();
var filter1 =new Array();
var fsArr= new Array("a1","a2","a3","a4");			
			
for (var f = 0;f<fsArr.length;f++){
	var filtertmp = new OpenLayers.Filter.Comparison({
		    type: OpenLayers.Filter.Comparison.EQUAL_TO,
		    property: "myname",
		    value: fsArr[f]
	});
	filter1.push(filtertmp)
};	

var myfilter = new OpenLayers.Filter.Logical({
			type: OpenLayers.Filter.Logical.OR,
			filters: filter1
		});

myfilter = xml.write(filter_1_1.write(myfilter));     

//get 4 features from Layer and show them -> ok
var sellayer = new OpenLayers.Layer.WFS("Selected Features", 
				"http://meineDomain.com/wfs",
				{typename: 'demo:meinLayer',srs: '...',tiled: 'true',filter:myfilter
				});

map.addLayers([sellayer]);
map.addControl(new OpenLayers.Control.PanZoomBar());
}

But from the OL-MailingList I learned, that in order to get more features (at the moment, I only can get 15 features via GET) I need to use a vector-layer with WFS-Protocol and a BBOX-strategy, because this sends a POST-Request whose length is not limited. I can't get it to work.

//Without Filter I get all features (> 2000) -> works, all features are shown after a nice coffee break
var sellayer = new OpenLayers.Layer.Vector("Selected Features", {
                    strategies: [new OpenLayers.Strategy.BBOX()],
		    protocol: new OpenLayers.Protocol.WFS({
                        url:  "http://meineDomain.com/wfs",
			featureType: "meinLayer",
                        featureNS: "http://meineDomain.com/demo"
			})
                });
}

//But adding the same filter as above to the layer-parameters of the vector-layer causes an error 
//"uncaught exception: Filter writing not supported for rule type: undefined" in firebug
var sellayer = new OpenLayers.Layer.Vector("Selected Features", {
                    strategies: [new OpenLayers.Strategy.BBOX()],
                    filter: myfilter,
		    protocol: new OpenLayers.Protocol.WFS({
                        url:  "http://meineDomain.com/wfs",
			featureType: "meinLayer",
                        featureNS: "http://meineDomain.com/demo"
			})
                });
moving the filter to the WFS-options doesn't cause an error, but doesn't filter anything.
Any ideas for filtering a vector-layer or what rule type I should define?

Last question: is "sellayer.refresh();" correct for forcing the layer to be redrawn and show the features without panning manually?

Thanks for answering.

Barbara

____________________________________________________________________
WEB.DE MillionenKlick: Kostenlos tippen, täglich 1 Million gewinnen!
http://produkte.web.de/go/07/




More information about the Users mailing list