OpenLayers OpenLayers

Changeset 6554

Show
Ignore:
Timestamp:
03/19/08 15:45:34 (8 months ago)
Author:
tschaub
Message:

write support for comparison filters

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sandbox/topp/geoext/lib/OpenLayers/Format/SLD/v1.js

    r6552 r6554  
    670670                    this.writeNode(node, "ElseFilter"); 
    671671                } else { 
    672                     var filter = this.writeNode(node, "ogc:Filter"); 
    673                     var sub = rule.CLASS_NAME.split(".").pop(); 
    674                     if(sub == "FeatureId") { 
    675                         for(var i=0; i<rule.fids.length; ++i) { 
    676                             this.writeNode(filter, "FeatureId", rule.fids[i]); 
    677                         } 
    678                     } // TODO: other filter types 
     672                    this.writeNode(node, "ogc:Filter", rule); 
    679673                } 
    680674                 
     
    860854        }, 
    861855        "ogc": { 
    862             "Filter": function() { 
    863                 return this.createElementNSPlus("ogc:Filter"); 
     856            "Filter": function(rule) { 
     857                var node = this.createElementNSPlus("ogc:Filter"); 
     858                var sub = rule.CLASS_NAME.split(".").pop(); 
     859                if(sub == "FeatureId") { 
     860                    for(var i=0; i<rule.fids.length; ++i) { 
     861                        this.writeNode(node, "FeatureId", rule.fids[i]); 
     862                    } 
     863                } else { 
     864                    this.writeNode(node, this.getFilterType(rule), rule); 
     865                } 
     866                return node; 
    864867            }, 
    865868            "FeatureId": function(fid) { 
     
    867870                    attributes: {fid: fid} 
    868871                }); 
     872            }, 
     873            "And": function(rule) { 
     874                var node = this.createElementNSPlus("ogc:And"); 
     875                var childRule; 
     876                for(var i=0; i<rule.rules.length; ++i) { 
     877                    childRule = rule.rules[i]; 
     878                    this.writeNode( 
     879                        node, this.getFilterType(childRule), childRule 
     880                    ); 
     881                } 
     882                return node; 
     883            }, 
     884            "Or": function(rule) { 
     885                var node = this.createElementNSPlus("ogc:Or"); 
     886                var childRule; 
     887                for(var i=0; i<rule.rules.length; ++i) { 
     888                    childRule = rule.rules[i]; 
     889                    this.writeNode( 
     890                        node, this.getFilterType(childRule), childRule 
     891                    ); 
     892                } 
     893                return node; 
     894            }, 
     895            "Not": function(rule) { 
     896                var node = this.createElementNSPlus("ogc:Not"); 
     897                var childRule = rule.rules[0]; 
     898                this.writeNode( 
     899                    node, this.getFilterType(childRule), childRule 
     900                ); 
     901                return node; 
     902            }, 
     903            "PropertyIsEqualTo": function(rule) { 
     904                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     905                // no ogc:expression handling for now 
     906                this.writeNode(node, "PropertyName", rule); 
     907                this.writeNode(node, "Literal", rule); 
     908                return node; 
     909            }, 
     910            "PropertyIsNotEqualTo": function(rule) { 
     911                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     912                // no ogc:expression handling for now 
     913                this.writeNode(node, "PropertyName", rule); 
     914                this.writeNode(node, "Literal", rule); 
     915                return node; 
     916            }, 
     917            "PropertyIsLessThan": function(rule) { 
     918                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     919                // no ogc:expression handling for now 
     920                this.writeNode(node, "PropertyName", rule); 
     921                this.writeNode(node, "Literal", rule);                 
     922                return node; 
     923            }, 
     924            "PropertyIsGreaterThan": function(rule) { 
     925                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     926                // no ogc:expression handling for now 
     927                this.writeNode(node, "PropertyName", rule); 
     928                this.writeNode(node, "Literal", rule); 
     929                return node; 
     930            }, 
     931            "PropertyIsLessThanOrEqualTo": function(rule) { 
     932                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     933                // no ogc:expression handling for now 
     934                this.writeNode(node, "PropertyName", rule); 
     935                this.writeNode(node, "Literal", rule); 
     936                return node; 
     937            }, 
     938            "PropertyIsGreaterThanOrEqualTo": function(rule) { 
     939                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     940                // no ogc:expression handling for now 
     941                this.writeNode(node, "PropertyName", rule); 
     942                this.writeNode(node, "Literal", rule); 
     943                return node; 
     944            }, 
     945            "PropertyIsBetween": function(rule) { 
     946                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     947                // no ogc:expression handling for now 
     948                this.writeNode(node, "PropertyName", rule); 
     949                this.writeNode(node, "LowerBoundary", rule); 
     950                this.writeNode(node, "UpperBoundary", rule); 
     951                return node; 
     952            }, 
     953            "PropertyIsLike": function(rule) { 
     954                var node = this.createElementNSPlus("ogc:PropertyIsEqualTo"); 
     955                // no ogc:expression handling for now 
     956                this.writeNode(node, "PropertyName", rule); 
     957                this.writeNode(node, "Literal", rule); 
     958                return node; 
     959            }, 
     960            "PropertyName": function(rule) { 
     961                // no ogc:expression handling for now 
     962                return this.createElementNSPlus("ogc:PropertyName", { 
     963                    value: rule.property 
     964                }); 
     965            }, 
     966            "Literal": function(rule) { 
     967                // no ogc:expression handling for now 
     968                return this.createElementNSPlus("ogc:Literal", { 
     969                    value: rule.value 
     970                }); 
    869971            } 
    870972        } 
     
    873975    /** 
    874976     * Method: getFilterType 
    875      * Given a rule, return the node name (local name) of the corresponding 
    876      *     OGC filter. 
    877      * 
    878      * Parameters: 
    879      * rule - {OpenLayers.Rule} 
    880      * 
    881      * Returns: 
    882      * {String} The local name of an OGC filter element. 
    883977     */ 
    884978    getFilterType: function(rule) { 
    885         var sub = rule.CLASS_NAME.split(".").pop(); 
    886         // Comparison, Logical, or FeatureId 
     979        var filterType = this.filterMap[rule.type]; 
     980        if(!filterType) { 
     981            throw "SLD writing not supported for rule type: " + rule.type; 
     982        } 
     983        return filterType; 
     984    }, 
     985     
     986    /** 
     987     * Property: filterMap 
     988     * {Object} Contains a member for each rule type.  Values are node names 
     989     *     for corresponding OGC Filter child elements. 
     990     */ 
     991    filterMap: { 
     992        "&&": "And", 
     993        "||": "Or", 
     994        "!": "Not", 
     995        "==": "PropertyIsEqualTo", 
     996        "!=": "PropertyIsNotEqualTo", 
     997        "<": "PropertyIsLessThan", 
     998        ">": "PropertyIsGreaterThan", 
     999        "<=": "PropertyIsLessThanOrEqualTo", 
     1000        ">=": "PropertyIsGreaterThanOrEqualTo", 
     1001        "..": "PropertyIsBetween", 
     1002        "~": "PropertyIsLike" 
    8871003    }, 
    8881004