comparison src/djol/VectorStoreQuery.js @ 34:27e8e9e38e07 default tip

Слияние
author nickolay
date Wed, 05 Jun 2019 20:44:15 +0300
parents 8af8e840dd49 1dc2fd263b90
children
comparison
equal deleted inserted replaced
33:8af8e840dd49 34:27e8e9e38e07
1 define([ "ol" ], function(ol) {
2
3 function buildFilter(filter) {
4 if (filter instanceof Function)
5 return filter;
6 if (filter) {
7 var match = function(str) {
8 return {
9 test : function(x) {
10 if (x === null || x === undefined)
11 return false;
12 return x.toString().startsWith(str);
13 }
14 };
15 };
16
17 for ( var p in filter) {
18 if (typeof (filter[p]) == "string" && filter[p].endsWith("*"))
19 filter[p] = match(filter[p].substr(0, filter[p].length));
20 }
21 return function(ft) {
22 for ( var p in filter) {
23 if (filter[p] && filter[p].test ? !filter[p]
24 .test(ft.get(p)) : ft.get(p) != filter[p])
25 return false;
26 }
27 return true;
28 };
29 }
30 throw new Error("Unsupported filter");
31 }
32
33 /**
34 * @constructor
35 * @example
36 *
37 * <pre>
38 * var store = new VectorStore({
39 * source : vectorSource
40 * });
41 *
42 * var req = new VectorStoreQuery({
43 * city : &quot;Moscow&quot;
44 * }, [ 30, 50, 40, 60 ]);
45 *
46 * store.query(req).then(showResults);
47 * </pre>
48 */
49 return function(filter, extent) {
50 var match = filter && buildFilter(filter);
51
52 var query = function(ft) {
53 if (extent) {
54 var g = gt.getGeometry();
55 if (!g || !ol.extent.intersects(extent, g.getExtent()))
56 return false;
57 }
58
59 return !match || match(ft);
60 };
61
62 query.extent = extent;
63 query.predicate = match;
64
65 return query;
66 };
67 });