annotate src/djol/VectorStoreQuery.js @ 19:8332e287d552

fix (click on cospas)
author nickolay
date Wed, 04 Oct 2017 21:05:21 +0300
parents f0035923ff3e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
1 define([ "ol" ], function(ol) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
2
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
3 function buildFilter(filter) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
4 if (filter instanceof Function)
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
5 return filter;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
6 if (filter) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
7 var match = function(str) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
8 return {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
9 test : function(x) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
10 if (x === null || x === undefined)
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
11 return false;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
12 return x.toString().startsWith(str);
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
13 }
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
14 };
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
15 };
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
16
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
17 for ( var p in filter) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
18 if (typeof (filter[p]) == "string" && filter[p].endsWith("*"))
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
19 filter[p] = match(filter[p].substr(0, filter[p].length));
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
20 }
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
21 return function(ft) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
22 for ( var p in filter) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
23 if (filter[p] && filter[p].test ? !filter[p]
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
24 .test(ft.get(p)) : ft.get(p) != filter[p])
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
25 return false;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
26 }
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
27 return true;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
28 };
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
29 }
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
30 throw new Error("Unsupported filter");
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
31 }
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
32
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
33 /**
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
34 * @constructor
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
35 * @example
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
36 *
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
37 * <pre>
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
38 * var store = new VectorStore({
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
39 * source : vectorSource
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
40 * });
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
41 *
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
42 * var req = new VectorStoreQuery({
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
43 * city : &quot;Moscow&quot;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
44 * }, [ 30, 50, 40, 60 ]);
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
45 *
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
46 * store.query(req).then(showResults);
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
47 * </pre>
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
48 */
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
49 return function(filter, extent) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
50 var match = filter && buildFilter(filter);
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
51
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
52 var query = function(ft) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
53 if (extent) {
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
54 var g = gt.getGeometry();
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
55 if (!g || !ol.extent.intersects(extent, g.getExtent()))
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
56 return false;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
57 }
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
58
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
59 return !match || match(ft);
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
60 };
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
61
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
62 query.extent = extent;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
63 query.predicate = match;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
64
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
65 return query;
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
66 };
f0035923ff3e добавлена библиотека для работы с openlayers 3+
cin
parents:
diff changeset
67 });