Add parser for OGC Filter 1.0 and 1.1 (read/write)
This work is based on the ol.expr package by @tschaub. It adds a few named expression functions to that package: * INTERSECTS, CONTAINS, DWITHIN, WITHIN (no client-side implementation as yet) * LIKE (like comparison with wildcard, singleChar and escapeChar) * IEQ (case-insensitive equality) * INEQ (case-insensitive non-equality) It also adds a few extra parameters to the existing EXTENT function to be able to deserialize and serialize all info (i.e. projection and property name). Some changes were needed for the GML parser as well: * createGeometry function needed to be public * when parsing Box (GML2) and Envelope (GML3) also parse the srsName * fix up writing for Box and Envelope now that bounds is an array Also added createDocumentFragment function to the XML parser. Implementation is similar to OpenLayers 2. Some addtional notes on the implementation: * PropertyIsBetween was implemented as an ol.expr.Logical with operator ol.expr.LogicalOp.AND and two ol.expr.Comparison instances with operator ol.expr.ComparisonOp.GTE and ol.expr.ComparisonOp.LTE * In OGC Filter And and Or can contain more than 2 sub filters, so this is translated into a hierarchy of ol.expr.Logical
This commit is contained in:
238
test/spec/ol/parser/ogc/filter_v1_0_0.test.js
Normal file
238
test/spec/ol/parser/ogc/filter_v1_0_0.test.js
Normal file
@@ -0,0 +1,238 @@
|
||||
goog.provide('ol.test.parser.ogc.Filter_v1_0_0');
|
||||
|
||||
describe('ol.parser.ogc.Filter_v1_0_0', function() {
|
||||
|
||||
var parser = new ol.parser.ogc.Filter_v1_0_0();
|
||||
|
||||
describe('#readwrite', function() {
|
||||
|
||||
it('intersects filter read / written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/intersects.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
expect(filter instanceof ol.expr.Call).to.be(true);
|
||||
expect(filter.getCallee().getName()).to.eql(
|
||||
ol.expr.functions.INTERSECTS);
|
||||
var args = filter.getArgs();
|
||||
var geom = args[0];
|
||||
expect(geom instanceof ol.geom.Polygon).to.be(true);
|
||||
expect(args[2]).to.eql('Geometry');
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('within filter read / written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/within.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
expect(filter instanceof ol.expr.Call).to.be(true);
|
||||
expect(filter.getCallee().getName()).to.eql(ol.expr.functions.WITHIN);
|
||||
var args = filter.getArgs();
|
||||
var geom = args[0];
|
||||
expect(geom instanceof ol.geom.Polygon).to.be(true);
|
||||
expect(args[2]).to.eql('Geometry');
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('contains filter read / written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/contains.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
expect(filter instanceof ol.expr.Call).to.be(true);
|
||||
expect(filter.getCallee().getName()).to.eql(
|
||||
ol.expr.functions.CONTAINS);
|
||||
var args = filter.getArgs();
|
||||
var geom = args[0];
|
||||
expect(geom instanceof ol.geom.Polygon).to.be(true);
|
||||
expect(args[2]).to.eql('Geometry');
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('between filter read / written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/between.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
expect(filter instanceof ol.expr.Logical).to.be.ok();
|
||||
expect(filter.getOperator()).to.eql(ol.expr.LogicalOp.AND);
|
||||
expect(filter.getLeft() instanceof ol.expr.Comparison).to.be.ok();
|
||||
expect(filter.getLeft().getOperator()).to.eql(ol.expr.ComparisonOp.GTE);
|
||||
expect(filter.getLeft().getLeft()).to.eql('number');
|
||||
expect(filter.getLeft().getRight()).to.eql(0);
|
||||
expect(filter.getRight() instanceof ol.expr.Comparison).to.be.ok();
|
||||
expect(filter.getRight().getOperator()).to.eql(
|
||||
ol.expr.ComparisonOp.LTE);
|
||||
expect(filter.getRight().getLeft()).to.eql('number');
|
||||
expect(filter.getRight().getRight()).to.eql(100);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('between filter read correctly without literals', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/between2.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
expect(filter instanceof ol.expr.Logical).to.be.ok();
|
||||
expect(filter.getOperator()).to.eql(ol.expr.LogicalOp.AND);
|
||||
expect(filter.getLeft() instanceof ol.expr.Comparison).to.be.ok();
|
||||
expect(filter.getLeft().getOperator()).to.eql(ol.expr.ComparisonOp.GTE);
|
||||
expect(filter.getLeft().getLeft()).to.eql('number');
|
||||
expect(filter.getLeft().getRight()).to.eql(0);
|
||||
expect(filter.getRight() instanceof ol.expr.Comparison).to.be.ok();
|
||||
expect(filter.getRight().getOperator()).to.eql(
|
||||
ol.expr.ComparisonOp.LTE);
|
||||
expect(filter.getRight().getLeft()).to.eql('number');
|
||||
expect(filter.getRight().getRight()).to.eql(100);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('null filter read / written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/null.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
expect(filter instanceof ol.expr.Comparison).to.be.ok();
|
||||
expect(filter.getLeft()).to.eql('prop');
|
||||
expect(filter.getRight()).to.eql(null);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('BBOX written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/bbox.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Call(
|
||||
new ol.expr.Identifier(ol.expr.functions.EXTENT),
|
||||
[-180, -90, 180, 90, 'EPSG:4326', 'the_geom']);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('BBOX without geometry name written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/bbox_nogeom.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Call(
|
||||
new ol.expr.Identifier(ol.expr.functions.EXTENT),
|
||||
[-180, -90, 180, 90, 'EPSG:4326']);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('DWithin written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/dwithin.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Call(new ol.expr.Identifier(
|
||||
ol.expr.functions.DWITHIN),
|
||||
[new ol.geom.Point([2488789, 289552]), 1000, 'm', undefined,
|
||||
'Geometry']);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
filter = parser.read(xml);
|
||||
output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// the Filter Encoding spec doesn't allow for FID filters inside logical
|
||||
// filters however, to be liberal, we will write them without complaining
|
||||
describe('#logicalfid', function() {
|
||||
|
||||
it('logical filter [OR] with fid filter written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/logicalfeatureid.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Logical(ol.expr.LogicalOp.OR,
|
||||
new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.LIKE),
|
||||
['person', 'me', '*', '.', '!']),
|
||||
new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.FID),
|
||||
['foo.1', 'foo.2']));
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('logical filter [AND] with fid filter written correctly',
|
||||
function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/' +
|
||||
'logicalfeatureidand.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Logical(ol.expr.LogicalOp.AND,
|
||||
new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.LIKE),
|
||||
['person', 'me', '*', '.', '!']),
|
||||
new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.FID),
|
||||
['foo.1', 'foo.2']));
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('logical filter [NOT] with fid filter written correctly',
|
||||
function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/' +
|
||||
'logicalfeatureidnot.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Not(
|
||||
new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.FID),
|
||||
['foo.2']));
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('#date', function() {
|
||||
|
||||
it('date writing works as expected', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_0_0/betweendates.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
// ISO 8601: 2010-11-27T18:19:15.123Z
|
||||
var start = new Date(Date.UTC(2010, 10, 27, 18, 19, 15, 123));
|
||||
// ISO 8601: 2011-12-27T18:19:15.123Z
|
||||
var end = new Date(Date.UTC(2011, 11, 27, 18, 19, 15, 123));
|
||||
var filter = new ol.expr.Logical(ol.expr.LogicalOp.AND,
|
||||
new ol.expr.Comparison(ol.expr.ComparisonOp.GTE, 'when', start),
|
||||
new ol.expr.Comparison(ol.expr.ComparisonOp.LTE, 'when', end));
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
goog.require('goog.dom.xml');
|
||||
goog.require('ol.expr');
|
||||
goog.require('ol.expr.Call');
|
||||
goog.require('ol.expr.Comparison');
|
||||
goog.require('ol.expr.ComparisonOp');
|
||||
goog.require('ol.expr.Identifier');
|
||||
goog.require('ol.expr.Logical');
|
||||
goog.require('ol.expr.LogicalOp');
|
||||
goog.require('ol.expr.Not');
|
||||
goog.require('ol.expr.functions');
|
||||
goog.require('ol.geom.Point');
|
||||
goog.require('ol.geom.Polygon');
|
||||
goog.require('ol.parser.ogc.Filter_v1_0_0');
|
||||
230
test/spec/ol/parser/ogc/filter_v1_1_0.test.js
Normal file
230
test/spec/ol/parser/ogc/filter_v1_1_0.test.js
Normal file
@@ -0,0 +1,230 @@
|
||||
goog.provide('ol.test.parser.ogc.Filter_v1_1_0');
|
||||
|
||||
describe('ol.parser.ogc.Filter_v1_1_0', function() {
|
||||
|
||||
var parser = new ol.parser.ogc.Filter_v1_1_0();
|
||||
|
||||
describe('#readwrite', function() {
|
||||
|
||||
it('filter read correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/test.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
expect(filter instanceof ol.expr.Logical).to.be(true);
|
||||
expect(filter.getOperator()).to.eql(ol.expr.LogicalOp.OR);
|
||||
var filters = [];
|
||||
parser.getSubfiltersForLogical_(filter, filters);
|
||||
expect(filters.length).to.eql(5);
|
||||
expect(filters[0]).to.eql(new ol.expr.Logical(ol.expr.LogicalOp.AND,
|
||||
new ol.expr.Comparison(
|
||||
ol.expr.ComparisonOp.GTE, 'number', 1064866676),
|
||||
new ol.expr.Comparison(
|
||||
ol.expr.ComparisonOp.LTE, 'number', 1065512599)));
|
||||
expect(filters[1]).to.eql(new ol.expr.Not(new ol.expr.Comparison(
|
||||
ol.expr.ComparisonOp.LTE, 'FOO', 5000)));
|
||||
expect(filters[2] instanceof ol.expr.Call).to.be(true);
|
||||
expect(filters[2].getCallee().getName()).to.eql(
|
||||
ol.expr.functions.LIKE);
|
||||
expect(filters[2].getArgs()).to.eql(['cat', '*dog.food!*good', '*',
|
||||
'.', '!', null]);
|
||||
expect(filters[3] instanceof ol.expr.Call).to.be(true);
|
||||
expect(filters[3].getCallee().getName()).to.eql(
|
||||
ol.expr.functions.IEQ);
|
||||
expect(filters[3].getArgs()).to.eql(['cat', 'dog']);
|
||||
expect(filters[4] instanceof ol.expr.Comparison).to.be(true);
|
||||
expect(filters[4].getOperator()).to.eql(ol.expr.ComparisonOp.EQ);
|
||||
expect(filters[4].getLeft()).to.eql('cat');
|
||||
expect(filters[4].getRight()).to.eql('dog');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('matchCase read correctly', function() {
|
||||
var cases = [{
|
||||
str:
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsEqualTo>' +
|
||||
'<ogc:PropertyName>cat</ogc:PropertyName>' +
|
||||
'<ogc:Literal>dog</ogc:Literal>' +
|
||||
'</ogc:PropertyIsEqualTo>' +
|
||||
'</ogc:Filter>',
|
||||
exp: true
|
||||
}, {
|
||||
str:
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsEqualTo matchCase="1">' +
|
||||
'<ogc:PropertyName>cat</ogc:PropertyName>' +
|
||||
'<ogc:Literal>dog</ogc:Literal>' +
|
||||
'</ogc:PropertyIsEqualTo>' +
|
||||
'</ogc:Filter>',
|
||||
exp: true
|
||||
}, {
|
||||
str:
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsEqualTo matchCase="true">' +
|
||||
'<ogc:PropertyName>cat</ogc:PropertyName>' +
|
||||
'<ogc:Literal>dog</ogc:Literal>' +
|
||||
'</ogc:PropertyIsEqualTo>' +
|
||||
'</ogc:Filter>',
|
||||
exp: true
|
||||
}, {
|
||||
str:
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsEqualTo matchCase="0">' +
|
||||
'<ogc:PropertyName>cat</ogc:PropertyName>' +
|
||||
'<ogc:Literal>dog</ogc:Literal>' +
|
||||
'</ogc:PropertyIsEqualTo>' +
|
||||
'</ogc:Filter>',
|
||||
exp: false
|
||||
}, {
|
||||
str:
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsEqualTo matchCase="0">' +
|
||||
'<ogc:PropertyName>cat</ogc:PropertyName>' +
|
||||
'<ogc:Literal>dog</ogc:Literal>' +
|
||||
'</ogc:PropertyIsEqualTo>' +
|
||||
'</ogc:Filter>',
|
||||
exp: false
|
||||
}, {
|
||||
str:
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsNotEqualTo matchCase="true">' +
|
||||
'<ogc:PropertyName>cat</ogc:PropertyName>' +
|
||||
'<ogc:Literal>dog</ogc:Literal>' +
|
||||
'</ogc:PropertyIsNotEqualTo>' +
|
||||
'</ogc:Filter>',
|
||||
exp: true
|
||||
}, {
|
||||
str:
|
||||
'<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">' +
|
||||
'<ogc:PropertyIsNotEqualTo matchCase="false">' +
|
||||
'<ogc:PropertyName>cat</ogc:PropertyName>' +
|
||||
'<ogc:Literal>dog</ogc:Literal>' +
|
||||
'</ogc:PropertyIsNotEqualTo>' +
|
||||
'</ogc:Filter>',
|
||||
exp: false
|
||||
}];
|
||||
var filter, c;
|
||||
for (var i = 0; i < cases.length; ++i) {
|
||||
c = cases[i];
|
||||
filter = parser.read(c.str);
|
||||
var matchCase = (filter instanceof ol.expr.Call) ? false : true;
|
||||
expect(matchCase).to.eql(c.exp);
|
||||
}
|
||||
});
|
||||
|
||||
it('BBOX filter written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/bbox.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('BBOX filter without property name written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/bbox_nogeomname.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('Intersects filter read / written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/intersects.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = parser.read(xml);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('Filter functions written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/function.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Call(new ol.expr.Identifier(
|
||||
ol.expr.functions.INTERSECTS),
|
||||
[new ol.expr.Call(new ol.expr.Identifier('querySingle'),
|
||||
['sf:restricted', 'the_geom',
|
||||
'cat=3']), undefined, 'the_geom']);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('Custom filter functions written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/customfunction.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Logical(ol.expr.LogicalOp.AND,
|
||||
new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.INEQ),
|
||||
['FOO', new ol.expr.Call(new ol.expr.Identifier('customFunction'),
|
||||
['param1', 'param2'])]));
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('Nested filter functions written correctly', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/nestedfunction.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Call(new ol.expr.Identifier(
|
||||
ol.expr.functions.DWITHIN),
|
||||
[new ol.expr.Call(new ol.expr.Identifier('collectGeometries'),
|
||||
[new ol.expr.Call(new ol.expr.Identifier('queryCollection'),
|
||||
['sf:roads', 'the_geom', 'INCLUDE'])]), 200, 'meters',
|
||||
undefined, 'the_geom']);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('matchCase written correctly on Like filter', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/likematchcase.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var filter = new ol.expr.Call(
|
||||
new ol.expr.Identifier(ol.expr.functions.LIKE),
|
||||
['person', '*me*', '*', '.', '!', false]);
|
||||
var output = parser.write(filter);
|
||||
expect(goog.dom.xml.loadXml(output)).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('sortBy written correctly on Like filter', function(done) {
|
||||
var url = 'spec/ol/parser/ogc/xml/filter_v1_1_0/sortby.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var writer = parser.writers['http://www.opengis.net/ogc']['SortBy'];
|
||||
var output = writer.call(parser, [{
|
||||
'property': 'Title',
|
||||
'order': 'ASC'
|
||||
},{
|
||||
'property': 'Relevance',
|
||||
'order': 'DESC'
|
||||
}]);
|
||||
expect(output).to.xmleql(xml);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
goog.require('goog.dom.xml');
|
||||
goog.require('ol.expr');
|
||||
goog.require('ol.expr.Call');
|
||||
goog.require('ol.expr.Comparison');
|
||||
goog.require('ol.expr.ComparisonOp');
|
||||
goog.require('ol.expr.Identifier');
|
||||
goog.require('ol.expr.Logical');
|
||||
goog.require('ol.expr.LogicalOp');
|
||||
goog.require('ol.expr.Not');
|
||||
goog.require('ol.expr.functions');
|
||||
goog.require('ol.parser.ogc.Filter_v1_1_0');
|
||||
@@ -19,7 +19,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -47,7 +47,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -76,7 +76,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -104,7 +104,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -138,7 +138,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -170,7 +170,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -188,7 +188,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
var p = new ol.parser.ogc.GML_v2({srsName: 'foo',
|
||||
featureNS: 'http://foo'});
|
||||
var obj = p.read(xml);
|
||||
var geom = p.createGeometry_({geometry: obj.geometry});
|
||||
var geom = p.createGeometry({geometry: obj.geometry});
|
||||
var node = p.featureNSWiters_['_geometry'].apply(p,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(p.serialize(node))).to.xmleql(xml);
|
||||
@@ -231,7 +231,7 @@ describe('ol.parser.gml_v2', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
|
||||
@@ -17,7 +17,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
var url = 'spec/ol/parser/ogc/xml/gml_v3/linearring.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
parser.srsName = 'foo';
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
@@ -33,7 +33,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
var url = 'spec/ol/parser/ogc/xml/gml_v3/linestring.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
parser.srsName = 'foo';
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
@@ -59,7 +59,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var p = new ol.parser.ogc.GML_v3({curve: true, srsName: 'foo'});
|
||||
var obj = p.read(xml);
|
||||
var geom = p.createGeometry_({geometry: obj.geometry});
|
||||
var geom = p.createGeometry({geometry: obj.geometry});
|
||||
var node = p.featureNSWiters_['_geometry'].apply(p,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(p.serialize(node))).to.xmleql(xml);
|
||||
@@ -84,7 +84,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var p = new ol.parser.ogc.GML_v3({multiCurve: false, srsName: 'foo'});
|
||||
var obj = p.read(xml);
|
||||
var geom = p.createGeometry_({geometry: obj.geometry});
|
||||
var geom = p.createGeometry({geometry: obj.geometry});
|
||||
var node = p.featureNSWiters_['_geometry'].apply(p,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(p.serialize(node))).to.xmleql(xml);
|
||||
@@ -99,7 +99,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -116,7 +116,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var p = new ol.parser.ogc.GML_v3({curve: true, srsName: 'foo'});
|
||||
var obj = p.read(xml);
|
||||
var geom = p.createGeometry_({geometry: obj.geometry});
|
||||
var geom = p.createGeometry({geometry: obj.geometry});
|
||||
var node = p.featureNSWiters_['_geometry'].apply(p,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(p.serialize(node))).to.xmleql(xml);
|
||||
@@ -143,7 +143,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -170,7 +170,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var p = new ol.parser.ogc.GML_v3({multiSurface: false, srsName: 'foo'});
|
||||
var obj = p.read(xml);
|
||||
var geom = p.createGeometry_({geometry: obj.geometry});
|
||||
var geom = p.createGeometry({geometry: obj.geometry});
|
||||
var node = p.featureNSWiters_['_geometry'].apply(p,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(p.serialize(node))).to.xmleql(xml);
|
||||
@@ -195,7 +195,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
parser.srsName = 'foo';
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(parser.serialize(node))).to.xmleql(xml);
|
||||
@@ -211,7 +211,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var p = new ol.parser.ogc.GML_v3({surface: true, srsName: 'foo'});
|
||||
var obj = p.read(xml);
|
||||
var geom = p.createGeometry_({geometry: obj.geometry});
|
||||
var geom = p.createGeometry({geometry: obj.geometry});
|
||||
var node = p.featureNSWiters_['_geometry'].apply(p,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(p.serialize(node))).to.xmleql(xml);
|
||||
@@ -225,7 +225,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
var url = 'spec/ol/parser/ogc/xml/gml_v3/point.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
parser.srsName = 'foo';
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
@@ -240,7 +240,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
var url = 'spec/ol/parser/ogc/xml/gml_v3/polygon.xml';
|
||||
afterLoadXml(url, function(xml) {
|
||||
var obj = parser.read(xml);
|
||||
var geom = parser.createGeometry_({geometry: obj.geometry});
|
||||
var geom = parser.createGeometry({geometry: obj.geometry});
|
||||
parser.srsName = 'foo';
|
||||
var node = parser.featureNSWiters_['_geometry'].apply(parser,
|
||||
[geom]).firstChild;
|
||||
@@ -263,7 +263,7 @@ describe('ol.parser.gml_v3', function() {
|
||||
afterLoadXml(url, function(xml) {
|
||||
var p = new ol.parser.ogc.GML_v3({surface: true, srsName: 'foo'});
|
||||
var obj = p.read(xml);
|
||||
var geom = p.createGeometry_({geometry: obj.geometry});
|
||||
var geom = p.createGeometry({geometry: obj.geometry});
|
||||
var node = p.featureNSWiters_['_geometry'].apply(p,
|
||||
[geom]).firstChild;
|
||||
expect(goog.dom.xml.loadXml(p.serialize(node))).to.xmleql(xml);
|
||||
|
||||
23
test/spec/ol/parser/ogc/xml/filter_v1_0_0.xml
Normal file
23
test/spec/ol/parser/ogc/xml/filter_v1_0_0.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
|
||||
<ogc:Or>
|
||||
<ogc:PropertyIsBetween>
|
||||
<ogc:PropertyName>number</ogc:PropertyName>
|
||||
<ogc:LowerBoundary>
|
||||
<ogc:Literal>1064866676</ogc:Literal>
|
||||
</ogc:LowerBoundary>
|
||||
<ogc:UpperBoundary>
|
||||
<ogc:Literal>1065512599</ogc:Literal>
|
||||
</ogc:UpperBoundary>
|
||||
</ogc:PropertyIsBetween>
|
||||
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
|
||||
<ogc:PropertyName>cat</ogc:PropertyName>
|
||||
<ogc:Literal>*dog.food!*good</ogc:Literal>
|
||||
</ogc:PropertyIsLike>
|
||||
<ogc:Not>
|
||||
<ogc:PropertyIsLessThanOrEqualTo>
|
||||
<ogc:PropertyName>FOO</ogc:PropertyName>
|
||||
<ogc:Literal>5000</ogc:Literal>
|
||||
</ogc:PropertyIsLessThanOrEqualTo>
|
||||
</ogc:Not>
|
||||
</ogc:Or>
|
||||
</ogc:Filter>
|
||||
8
test/spec/ol/parser/ogc/xml/filter_v1_0_0/bbox.xml
Normal file
8
test/spec/ol/parser/ogc/xml/filter_v1_0_0/bbox.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:BBOX>
|
||||
<ogc:PropertyName>the_geom</ogc:PropertyName>
|
||||
<gml:Box xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
|
||||
<gml:coordinates decimal="." cs="," ts=" ">-180,-90 180,90</gml:coordinates>
|
||||
</gml:Box>
|
||||
</ogc:BBOX>
|
||||
</ogc:Filter>
|
||||
@@ -0,0 +1,7 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:BBOX>
|
||||
<gml:Box xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
|
||||
<gml:coordinates decimal="." cs="," ts=" ">-180,-90 180,90</gml:coordinates>
|
||||
</gml:Box>
|
||||
</ogc:BBOX>
|
||||
</ogc:Filter>
|
||||
11
test/spec/ol/parser/ogc/xml/filter_v1_0_0/between.xml
Normal file
11
test/spec/ol/parser/ogc/xml/filter_v1_0_0/between.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:PropertyIsBetween>
|
||||
<ogc:PropertyName>number</ogc:PropertyName>
|
||||
<ogc:LowerBoundary>
|
||||
<ogc:Literal>0</ogc:Literal>
|
||||
</ogc:LowerBoundary>
|
||||
<ogc:UpperBoundary>
|
||||
<ogc:Literal>100</ogc:Literal>
|
||||
</ogc:UpperBoundary>
|
||||
</ogc:PropertyIsBetween>
|
||||
</ogc:Filter>
|
||||
7
test/spec/ol/parser/ogc/xml/filter_v1_0_0/between2.xml
Normal file
7
test/spec/ol/parser/ogc/xml/filter_v1_0_0/between2.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
|
||||
<ogc:PropertyIsBetween>
|
||||
<ogc:PropertyName>number</ogc:PropertyName>
|
||||
<ogc:LowerBoundary>0</ogc:LowerBoundary>
|
||||
<ogc:UpperBoundary>100</ogc:UpperBoundary>
|
||||
</ogc:PropertyIsBetween>
|
||||
</ogc:Filter>
|
||||
11
test/spec/ol/parser/ogc/xml/filter_v1_0_0/betweendates.xml
Normal file
11
test/spec/ol/parser/ogc/xml/filter_v1_0_0/betweendates.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:PropertyIsBetween>
|
||||
<ogc:PropertyName>when</ogc:PropertyName>
|
||||
<ogc:LowerBoundary>
|
||||
<ogc:Literal>2010-11-27T18:19:15.123Z</ogc:Literal>
|
||||
</ogc:LowerBoundary>
|
||||
<ogc:UpperBoundary>
|
||||
<ogc:Literal>2011-12-27T18:19:15.123Z</ogc:Literal>
|
||||
</ogc:UpperBoundary>
|
||||
</ogc:PropertyIsBetween>
|
||||
</ogc:Filter>
|
||||
12
test/spec/ol/parser/ogc/xml/filter_v1_0_0/contains.xml
Normal file
12
test/spec/ol/parser/ogc/xml/filter_v1_0_0/contains.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<Filter xmlns="http://www.opengis.net/ogc" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Contains>
|
||||
<PropertyName>Geometry</PropertyName>
|
||||
<gml:Polygon xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:outerBoundaryIs>
|
||||
<gml:LinearRing>
|
||||
<gml:coordinates decimal="." cs="," ts=" ">2488789,289552 2588789,289552 2588789,389552 2488789,389552 2488789,289552</gml:coordinates>
|
||||
</gml:LinearRing>
|
||||
</gml:outerBoundaryIs>
|
||||
</gml:Polygon>
|
||||
</Contains>
|
||||
</Filter>
|
||||
@@ -0,0 +1,11 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
|
||||
<ogc:PropertyIsBetween>
|
||||
<ogc:PropertyName>when</ogc:PropertyName>
|
||||
<ogc:LowerBoundary>
|
||||
<ogc:Literal>2010-11-27</ogc:Literal>
|
||||
</ogc:LowerBoundary>
|
||||
<ogc:UpperBoundary>
|
||||
<ogc:Literal>2011-12-27</ogc:Literal>
|
||||
</ogc:UpperBoundary>
|
||||
</ogc:PropertyIsBetween>
|
||||
</ogc:Filter>
|
||||
9
test/spec/ol/parser/ogc/xml/filter_v1_0_0/dwithin.xml
Normal file
9
test/spec/ol/parser/ogc/xml/filter_v1_0_0/dwithin.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<Filter xmlns="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<DWithin>
|
||||
<PropertyName>Geometry</PropertyName>
|
||||
<gml:Point xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:coordinates decimal="." cs="," ts=" ">2488789,289552</gml:coordinates>
|
||||
</gml:Point>
|
||||
<Distance units="m">1000</Distance>
|
||||
</DWithin>
|
||||
</Filter>
|
||||
12
test/spec/ol/parser/ogc/xml/filter_v1_0_0/intersects.xml
Normal file
12
test/spec/ol/parser/ogc/xml/filter_v1_0_0/intersects.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<Filter xmlns="http://www.opengis.net/ogc" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Intersects>
|
||||
<PropertyName>Geometry</PropertyName>
|
||||
<gml:Polygon xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:outerBoundaryIs>
|
||||
<gml:LinearRing>
|
||||
<gml:coordinates decimal="." cs="," ts=" ">2488789,289552 2588789,289552 2588789,389552 2488789,389552 2488789,289552</gml:coordinates>
|
||||
</gml:LinearRing>
|
||||
</gml:outerBoundaryIs>
|
||||
</gml:Polygon>
|
||||
</Intersects>
|
||||
</Filter>
|
||||
@@ -0,0 +1,10 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:Or>
|
||||
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
|
||||
<ogc:PropertyName>person</ogc:PropertyName>
|
||||
<ogc:Literal>me</ogc:Literal>
|
||||
</ogc:PropertyIsLike>
|
||||
<ogc:FeatureId fid="foo.1"/>
|
||||
<ogc:FeatureId fid="foo.2"/>
|
||||
</ogc:Or>
|
||||
</ogc:Filter>
|
||||
@@ -0,0 +1,10 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:And>
|
||||
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
|
||||
<ogc:PropertyName>person</ogc:PropertyName>
|
||||
<ogc:Literal>me</ogc:Literal>
|
||||
</ogc:PropertyIsLike>
|
||||
<ogc:FeatureId fid="foo.1"/>
|
||||
<ogc:FeatureId fid="foo.2"/>
|
||||
</ogc:And>
|
||||
</ogc:Filter>
|
||||
@@ -0,0 +1,5 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:Not>
|
||||
<ogc:FeatureId fid="foo.2"/>
|
||||
</ogc:Not>
|
||||
</ogc:Filter>
|
||||
5
test/spec/ol/parser/ogc/xml/filter_v1_0_0/null.xml
Normal file
5
test/spec/ol/parser/ogc/xml/filter_v1_0_0/null.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd">
|
||||
<ogc:PropertyIsNull>
|
||||
<ogc:PropertyName>prop</ogc:PropertyName>
|
||||
</ogc:PropertyIsNull>
|
||||
</ogc:Filter>
|
||||
12
test/spec/ol/parser/ogc/xml/filter_v1_0_0/within.xml
Normal file
12
test/spec/ol/parser/ogc/xml/filter_v1_0_0/within.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<Filter xmlns="http://www.opengis.net/ogc" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.0.0/filter.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<Within>
|
||||
<PropertyName>Geometry</PropertyName>
|
||||
<gml:Polygon xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:outerBoundaryIs>
|
||||
<gml:LinearRing>
|
||||
<gml:coordinates decimal="." cs="," ts=" ">2488789,289552 2588789,289552 2588789,389552 2488789,389552 2488789,289552</gml:coordinates>
|
||||
</gml:LinearRing>
|
||||
</gml:outerBoundaryIs>
|
||||
</gml:Polygon>
|
||||
</Within>
|
||||
</Filter>
|
||||
9
test/spec/ol/parser/ogc/xml/filter_v1_1_0/bbox.xml
Normal file
9
test/spec/ol/parser/ogc/xml/filter_v1_1_0/bbox.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<ogc:BBOX>
|
||||
<ogc:PropertyName>the_geom</ogc:PropertyName>
|
||||
<gml:Envelope xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
|
||||
<gml:lowerCorner>-180 -90</gml:lowerCorner>
|
||||
<gml:upperCorner>180 90</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</ogc:BBOX>
|
||||
</ogc:Filter>
|
||||
@@ -0,0 +1,8 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<ogc:BBOX>
|
||||
<gml:Envelope xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
|
||||
<gml:lowerCorner>-180 -90</gml:lowerCorner>
|
||||
<gml:upperCorner>180 90</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</ogc:BBOX>
|
||||
</ogc:Filter>
|
||||
11
test/spec/ol/parser/ogc/xml/filter_v1_1_0/customfunction.xml
Normal file
11
test/spec/ol/parser/ogc/xml/filter_v1_1_0/customfunction.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<ogc:And>
|
||||
<ogc:PropertyIsNotEqualTo matchCase="false">
|
||||
<ogc:PropertyName>FOO</ogc:PropertyName>
|
||||
<ogc:Function name="customFunction">
|
||||
<ogc:Literal>param1</ogc:Literal>
|
||||
<ogc:Literal>param2</ogc:Literal>
|
||||
</ogc:Function>
|
||||
</ogc:PropertyIsNotEqualTo>
|
||||
</ogc:And>
|
||||
</ogc:Filter>
|
||||
10
test/spec/ol/parser/ogc/xml/filter_v1_1_0/function.xml
Normal file
10
test/spec/ol/parser/ogc/xml/filter_v1_1_0/function.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<ogc:Intersects>
|
||||
<ogc:PropertyName>the_geom</ogc:PropertyName>
|
||||
<ogc:Function name="querySingle">
|
||||
<ogc:Literal>sf:restricted</ogc:Literal>
|
||||
<ogc:Literal>the_geom</ogc:Literal>
|
||||
<ogc:Literal>cat=3</ogc:Literal>
|
||||
</ogc:Function>
|
||||
</ogc:Intersects>
|
||||
</ogc:Filter>
|
||||
9
test/spec/ol/parser/ogc/xml/filter_v1_1_0/intersects.xml
Normal file
9
test/spec/ol/parser/ogc/xml/filter_v1_1_0/intersects.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<Filter xmlns="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<Intersects>
|
||||
<PropertyName>Geometry</PropertyName>
|
||||
<gml:Envelope xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:4326">
|
||||
<gml:lowerCorner>-180 -90</gml:lowerCorner>
|
||||
<gml:upperCorner>180 90</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</Intersects>
|
||||
</Filter>
|
||||
@@ -0,0 +1,6 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<ogc:PropertyIsLike wildCard="*" singleChar="." escapeChar="!" matchCase="false">
|
||||
<ogc:PropertyName>person</ogc:PropertyName>
|
||||
<ogc:Literal>*me*</ogc:Literal>
|
||||
</ogc:PropertyIsLike>
|
||||
</ogc:Filter>
|
||||
13
test/spec/ol/parser/ogc/xml/filter_v1_1_0/nestedfunction.xml
Normal file
13
test/spec/ol/parser/ogc/xml/filter_v1_1_0/nestedfunction.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<ogc:DWithin>
|
||||
<ogc:PropertyName>the_geom</ogc:PropertyName>
|
||||
<ogc:Function name="collectGeometries">
|
||||
<ogc:Function name="queryCollection">
|
||||
<ogc:Literal>sf:roads</ogc:Literal>
|
||||
<ogc:Literal>the_geom</ogc:Literal>
|
||||
<ogc:Literal>INCLUDE</ogc:Literal>
|
||||
</ogc:Function>
|
||||
</ogc:Function>
|
||||
<ogc:Distance units="meters">200</ogc:Distance>
|
||||
</ogc:DWithin>
|
||||
</ogc:Filter>
|
||||
10
test/spec/ol/parser/ogc/xml/filter_v1_1_0/sortby.xml
Normal file
10
test/spec/ol/parser/ogc/xml/filter_v1_1_0/sortby.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<ogc:SortBy xmlns:ogc="http://www.opengis.net/ogc">
|
||||
<ogc:SortProperty>
|
||||
<ogc:PropertyName>Title</ogc:PropertyName>
|
||||
<ogc:SortOrder>ASC</ogc:SortOrder>
|
||||
</ogc:SortProperty>
|
||||
<ogc:SortProperty>
|
||||
<ogc:PropertyName>Relevance</ogc:PropertyName>
|
||||
<ogc:SortOrder>DESC</ogc:SortOrder>
|
||||
</ogc:SortProperty>
|
||||
</ogc:SortBy>
|
||||
31
test/spec/ol/parser/ogc/xml/filter_v1_1_0/test.xml
Normal file
31
test/spec/ol/parser/ogc/xml/filter_v1_1_0/test.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/filter/1.1.0/filter.xsd">
|
||||
<ogc:Or>
|
||||
<ogc:PropertyIsBetween>
|
||||
<ogc:PropertyName>number</ogc:PropertyName>
|
||||
<ogc:LowerBoundary>
|
||||
<ogc:Literal>1064866676</ogc:Literal>
|
||||
</ogc:LowerBoundary>
|
||||
<ogc:UpperBoundary>
|
||||
<ogc:Literal>1065512599</ogc:Literal>
|
||||
</ogc:UpperBoundary>
|
||||
</ogc:PropertyIsBetween>
|
||||
<ogc:PropertyIsLike wildCard="*" singleChar="." escapeChar="!">
|
||||
<ogc:PropertyName>cat</ogc:PropertyName>
|
||||
<ogc:Literal>*dog.food!*good</ogc:Literal>
|
||||
</ogc:PropertyIsLike>
|
||||
<ogc:Not>
|
||||
<ogc:PropertyIsLessThanOrEqualTo>
|
||||
<ogc:PropertyName>FOO</ogc:PropertyName>
|
||||
<ogc:Literal>5000</ogc:Literal>
|
||||
</ogc:PropertyIsLessThanOrEqualTo>
|
||||
</ogc:Not>
|
||||
<ogc:PropertyIsEqualTo>
|
||||
<ogc:PropertyName>cat</ogc:PropertyName>
|
||||
<ogc:Literal>dog</ogc:Literal>
|
||||
</ogc:PropertyIsEqualTo>
|
||||
<ogc:PropertyIsEqualTo matchCase="false">
|
||||
<ogc:PropertyName>cat</ogc:PropertyName>
|
||||
<ogc:Literal>dog</ogc:Literal>
|
||||
</ogc:PropertyIsEqualTo>
|
||||
</ogc:Or>
|
||||
</ogc:Filter>
|
||||
Reference in New Issue
Block a user