diff --git a/lib/OpenLayers/Format/WFST/v1.js b/lib/OpenLayers/Format/WFST/v1.js index 2b5c04eb79..0fc2969d1b 100644 --- a/lib/OpenLayers/Format/WFST/v1.js +++ b/lib/OpenLayers/Format/WFST/v1.js @@ -432,8 +432,8 @@ OpenLayers.Format.WFST.v1 = OpenLayers.Class(OpenLayers.Format.XML, { this.setFilterProperty(filter.filters[i]); } } else { - if(filter instanceof OpenLayers.Filter.Spatial) { - // got a spatial filter, set its property + if(filter instanceof OpenLayers.Filter.Spatial && !filter.property) { + // got a spatial filter without property, so set it filter.property = this.geometryName; } } diff --git a/tests/Format/WFST/v1.html b/tests/Format/WFST/v1.html index 04142b60e0..6cfb1caa9e 100644 --- a/tests/Format/WFST/v1.html +++ b/tests/Format/WFST/v1.html @@ -133,6 +133,28 @@ t.xml_eq(got, expected, snippet + " request without geometry created correctly"); } } + + function test_setFilterProperty(t) { + t.plan(2); + var format = new OpenLayers.Format.WFST({ + geometryName: "foo" + }); + var filter = new OpenLayers.Filter.Logical({ + type: OpenLayers.Filter.Logical.AND, + filters: [new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.BBOX, + value: new OpenLayers.Bounds(1,2,3,4) + }), new OpenLayers.Filter.Spatial({ + type: OpenLayers.Filter.Spatial.DWITHIN, + property: "bar", + value: new OpenLayers.Geometry.Point(1,2), + distance: 10 + })] + }); + format.setFilterProperty(filter); + t.eq(filter.filters[0].property, "foo", "property set if not set on filter"); + t.eq(filter.filters[1].property, "bar", "property not set if set on filter"); + } function test_update_null_geometry(t) { var format = new OpenLayers.Format.WFST({