Mercurial > pub > ImplabJs
diff src/djol/VectorStoreQuery.js @ 10:8705103f074f
Слияние
author | cin |
---|---|
date | Mon, 21 Aug 2017 18:03:00 +0300 |
parents | f0035923ff3e |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/djol/VectorStoreQuery.js Mon Aug 21 18:03:00 2017 +0300 @@ -0,0 +1,67 @@ +define([ "ol" ], function(ol) { + + function buildFilter(filter) { + if (filter instanceof Function) + return filter; + if (filter) { + var match = function(str) { + return { + test : function(x) { + if (x === null || x === undefined) + return false; + return x.toString().startsWith(str); + } + }; + }; + + for ( var p in filter) { + if (typeof (filter[p]) == "string" && filter[p].endsWith("*")) + filter[p] = match(filter[p].substr(0, filter[p].length)); + } + return function(ft) { + for ( var p in filter) { + if (filter[p] && filter[p].test ? !filter[p] + .test(ft.get(p)) : ft.get(p) != filter[p]) + return false; + } + return true; + }; + } + throw new Error("Unsupported filter"); + } + + /** + * @constructor + * @example + * + * <pre> + * var store = new VectorStore({ + * source : vectorSource + * }); + * + * var req = new VectorStoreQuery({ + * city : "Moscow" + * }, [ 30, 50, 40, 60 ]); + * + * store.query(req).then(showResults); + * </pre> + */ + return function(filter, extent) { + var match = filter && buildFilter(filter); + + var query = function(ft) { + if (extent) { + var g = gt.getGeometry(); + if (!g || !ol.extent.intersects(extent, g.getExtent())) + return false; + } + + return !match || match(ft); + }; + + query.extent = extent; + query.predicate = match; + + return query; + }; +}); \ No newline at end of file