| | 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 | }); |
|---|
| 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" |
|---|