]> dev.renevier.net Git - syp.git/blob - openlayers/lib/OpenLayers/Filter/Spatial.js
initial commit
[syp.git] / openlayers / lib / OpenLayers / Filter / Spatial.js
1 /* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
2  * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the
3   * full text of the license. */
4
5 /**
6  * @requires OpenLayers/Filter.js
7  * @requires OpenLayers/Console.js
8  */
9
10 /**
11  * Class: OpenLayers.Filter.Spatial
12  * This class represents a spatial filter.
13  * Currently implemented: BBOX, DWithin and Intersects
14  * 
15  * Inherits from
16  * - <OpenLayers.Filter>
17  */
18 OpenLayers.Filter.Spatial = OpenLayers.Class(OpenLayers.Filter, {
19
20     /**
21      * APIProperty: type
22      * {String} Type of spatial filter.
23      *
24      * The type should be one of:
25      * - OpenLayers.Filter.Spatial.BBOX
26      * - OpenLayers.Filter.Spatial.INTERSECTS
27      * - OpenLayers.Filter.Spatial.DWITHIN
28      * - OpenLayers.Filter.Spatial.WITHIN
29      * - OpenLayers.Filter.Spatial.CONTAINS
30      */
31     type: null,
32     
33     /**
34      * APIProperty: property
35      * {String} Name of the context property to compare.
36      */
37     property: null,
38     
39     /**
40      * APIProperty: value
41      * {<OpenLayers.Bounds> || <OpenLayers.Geometry>} The bounds or geometry
42      *     to be used by the filter.  Use bounds for BBOX filters and geometry
43      *     for INTERSECTS or DWITHIN filters.
44      */
45     value: null,
46
47     /**
48      * APIProperty: distance
49      * {Number} The distance to use in a DWithin spatial filter.
50      */
51     distance: null,
52
53     /**
54      * APIProperty: distanceUnits
55      * {String} The units to use for the distance, e.g. 'm'.
56      */
57     distanceUnits: null,
58     
59     /** 
60      * Constructor: OpenLayers.Filter.Spatial
61      * Creates a spatial filter.
62      *
63      * Parameters:
64      * options - {Object} An optional object with properties to set on the
65      *     filter.
66      * 
67      * Returns:
68      * {<OpenLayers.Filter.Spatial>}
69      */
70     initialize: function(options) {
71         OpenLayers.Filter.prototype.initialize.apply(this, [options]);
72     },
73
74    /**
75     * Method: evaluate
76     * Evaluates this filter for a specific feature.
77     * 
78     * Parameters:
79     * feature - {<OpenLayers.Feature.Vector>} feature to apply the filter to.
80     * 
81     * Returns:
82     * {Boolean} The feature meets filter criteria.
83     */
84     evaluate: function(feature) {
85         var intersect = false;
86         switch(this.type) {
87             case OpenLayers.Filter.Spatial.BBOX:
88             case OpenLayers.Filter.Spatial.INTERSECTS:
89                 if(feature.geometry) {
90                     var geom = this.value;
91                     if(this.value.CLASS_NAME == "OpenLayers.Bounds") {
92                         geom = this.value.toGeometry();
93                     }
94                     if(feature.geometry.intersects(geom)) {
95                         intersect = true;
96                     }
97                 }
98                 break;
99             default:
100                 OpenLayers.Console.error(
101                     OpenLayers.i18n("filterEvaluateNotImplemented"));
102                 break;
103         }
104         return intersect;
105     },
106
107     /**
108      * APIMethod: clone
109      * Clones this filter.
110      * 
111      * Returns:
112      * {<OpenLayers.Filter.Spatial>} Clone of this filter.
113      */
114     clone: function() {
115         var options = OpenLayers.Util.applyDefaults({
116             value: this.value && this.value.clone && this.value.clone()
117         }, this);
118         return new OpenLayers.Filter.Spatial(options);
119     },
120     CLASS_NAME: "OpenLayers.Filter.Spatial"
121 });
122
123 OpenLayers.Filter.Spatial.BBOX = "BBOX";
124 OpenLayers.Filter.Spatial.INTERSECTS = "INTERSECTS";
125 OpenLayers.Filter.Spatial.DWITHIN = "DWITHIN";
126 OpenLayers.Filter.Spatial.WITHIN = "WITHIN";
127 OpenLayers.Filter.Spatial.CONTAINS = "CONTAINS";