OpenLayers OpenLayers

Changeset 6544

Show
Ignore:
Timestamp:
03/17/08 16:41:19 (9 months ago)
Author:
tschaub
Message:

recreating the sld.html example using the new parser

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sandbox/topp/geoext/examples/sld.html

    r6538 r6544  
    1212    <script src="../lib/OpenLayers.js"></script> 
    1313    <script type="text/javascript"> 
    14         var lon = 5; 
    15         var lat = 40
    16         var zoom = 5
    17         var map, layer, gmlLayers, styles, waterStyle, hover; 
     14         
     15        var map, sld, gmlLayers
     16        var format = new OpenLayers.Format.SLD()
     17        function init() { 
    1818 
    19         function load(){ 
    20            OpenLayers.loadURL("tasmania/sld-tasmania.xml", "", null, init); 
     19            map = new OpenLayers.Map('map'); 
     20            var layer = new OpenLayers.Layer.WMS( 
     21                "OpenLayers WMS",  
     22                "http://labs.metacarta.com/wms/vmap0", 
     23                {layers: 'basic'} 
     24            ); 
     25 
     26            map.addLayer(layer); 
     27            map.addControl(new OpenLayers.Control.LayerSwitcher()); 
     28            map.zoomToExtent(new OpenLayers.Bounds(143,-39,150,-45)); 
     29 
     30            OpenLayers.loadURL("tasmania/sld-tasmania.xml", null, null, complete); 
     31 
    2132        } 
    2233         
    23         var f = new OpenLayers.Format.SLD(); 
    24         var request; 
    25          
    26         function init(req){ 
    27             request = req; 
    28             map = new OpenLayers.Map('map'); 
    29             layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",  
    30                     "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} ); 
    31             map.addLayer(layer);            
    32                   map.zoomToExtent(new OpenLayers.Bounds(143,-39,150,-45)); 
     34        function getDefaultStyle(sld, layerName) { 
     35            var styles = sld.namedLayers[layerName].userStyles; 
     36            var style; 
     37            for(var i=0; i<styles.length; ++i) { 
     38                style = styles[i]; 
     39                if(style.isDefault) { 
     40                    break; 
     41                } 
     42            } 
     43            return style; 
     44        } 
    3345 
    34             sld = f.read(req.responseText, 
    35                     {withNamedLayer: true}); 
     46        function complete(req) { 
     47 
     48            sld = format.read(req.responseXML || req.responseText); 
     49            console.log(sld); 
     50            var hoverStyle = sld.namedLayers["WaterBodies"].userStyles[1]; 
     51            hoverStyle.defaultStyle = OpenLayers.Util.extend( 
     52                {}, OpenLayers.Feature.Vector.style["select"] 
     53            ); 
     54 
     55            gmlLayers = [ 
     56                // use the sld UserStyle named "Default Styler" 
     57                new OpenLayers.Layer.GML( 
     58                    "StateBoundaries", 
     59                    "tasmania/TasmaniaStateBoundaries.xml", 
     60                    {styleMap: new OpenLayers.StyleMap(getDefaultStyle(sld, "WaterBodies"))} 
     61                ), 
     62                new OpenLayers.Layer.GML( 
     63                    "Roads", 
     64                    "tasmania/TasmaniaRoads.xml", 
     65                    {styleMap: new OpenLayers.StyleMap(getDefaultStyle(sld, "Roads"))} 
     66                ), 
     67                new OpenLayers.Layer.GML( 
     68                    "WaterBodies", 
     69                    "tasmania/TasmaniaWaterBodies.xml", 
     70                    { 
     71                        styleMap: new OpenLayers.StyleMap({ 
     72                            "default": getDefaultStyle(sld, "WaterBodies"), 
     73                            "select": hoverStyle 
     74                        }) 
     75                    } 
     76                ), 
     77                new OpenLayers.Layer.GML( 
     78                    "Cities", 
     79                    "tasmania/TasmaniaCities.xml", 
     80                    {styleMap: new OpenLayers.StyleMap(getDefaultStyle(sld, "Cities"))} 
     81                ) 
     82            ]; 
    3683             
    37             styles = sld[1]
     84            map.addLayers(gmlLayers)
    3885             
    39             // for the hover style, we do not want to use the SLD default as 
    40             // base style 
    41             styles["WaterBodies"]["Hover Styler"].defaultStyle = OpenLayers.Util.extend({}, 
    42                 OpenLayers.Feature.Vector.style["select"]); 
    43              
    44             gmlLayers = [ 
    45                     // use the sld UserStyle named "Default Styler" 
    46                     new OpenLayers.Layer.GML("StateBoundaries", 
    47                             "tasmania/TasmaniaStateBoundaries.xml", { 
    48                             styleMap: new OpenLayers.StyleMap(styles["WaterBodies"])}), 
    49                     new OpenLayers.Layer.GML("Roads", 
    50                             "tasmania/TasmaniaRoads.xml", { 
    51                             styleMap: new OpenLayers.StyleMap(styles["Roads"])}), 
    52                     new OpenLayers.Layer.GML("WaterBodies", 
    53                             "tasmania/TasmaniaWaterBodies.xml", { 
    54                             styleMap: new OpenLayers.StyleMap(styles["WaterBodies"])}), 
    55                     new OpenLayers.Layer.GML("Cities", 
    56                             "tasmania/TasmaniaCities.xml", { 
    57                             styleMap: new OpenLayers.StyleMap(styles["Cities"])})]; 
    58   
    59             for (var i=0; i<gmlLayers.length; i++) { 
    60                 map.addLayer(gmlLayers[i]); 
    61             } 
    62              
    63             hover = new OpenLayers.Control.SelectFeature(gmlLayers[2], { 
    64                     hover: true, 
    65                     renderIntent: "Hover Styler" 
    66                 }); 
     86            var hover = new OpenLayers.Control.SelectFeature( 
     87                gmlLayers[2], {hover: true} 
     88            ); 
    6789            map.addControl(hover); 
    6890            hover.activate(); 
     
    7092         
    7193        // set a new style when the radio button changes 
    72         function setStyle(styleName) { 
    73             gmlLayers[2].styleMap.styles["default"] = styles["WaterBodies"][styleName]; 
     94        function setStyle(index) { 
     95            gmlLayers[2].styleMap.styles["default"] = sld.namedLayers["WaterBodies"].userStyles[index]; 
    7496            // change the style of the features of the WaterBodies layer 
    7597            gmlLayers[2].redraw(); 
     
    7799    </script> 
    78100  </head> 
    79   <body onload="load()"> 
     101  <body onload="init()"> 
    80102    <div id="map"></div> 
    81103    <p>This example uses a <a target="_blank" href="tasmania/sld-tasmania.xml">SLD 
    82     file</a> to style the vector features. The style to be used is either 
    83     determined by the NamedLayer and IsDefault properties in the sld file, or 
    84     can directly be applied by addressing a style from the styles 
    85     hash with the UserStyle name from the sld file as key. Select a new style for the WaterBodies layer below:<p> 
     104    file</a> to style the vector features. To construct layers that use styles 
     105    from SLD, create a StyleMap for the layer that uses one of the userStyles in the 
     106    namedLayers object of the return from format.read().</p> 
     107    <p>Select a new style for the WaterBodies layer below:</p> 
    86108    <form> 
    87       <input type="radio" name="style" onclick="setStyle(this.value)" checked="checked" value="default">Default Styler (zoom in to see more features)</input><br/> 
    88       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsEqualTo">Styler Test PropertyIsEqualTo</input><br/> 
    89       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test Not FeatureId">Styler Test Not FeatureId</input><br/> 
    90       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test WATER_TYPE">Styler Test WATER_TYPE</input><br/> 
    91       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsGreaterThanOrEqualTo">Styler Test PropertyIsGreaterThanOrEqualTo</input><br/> 
    92       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsLessThanOrEqualTo">Styler Test PropertyIsLessThanOrEqualTo</input><br/> 
    93       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsGreaterThan">Styler Test PropertyIsGreaterThan</input><br/> 
    94       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsLessThan">Styler Test PropertyIsLessThan</input><br/> 
    95       <input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsLike">Styler Test PropertyIsLike</input><br/> 
     109      <input type="radio" name="style" onclick="setStyle(this.value)" checked="checked" value="0">Default Styler (zoom in to see more features)</input><br/> 
     110      <input type="radio" name="style" onclick="setStyle(this.value)" value="4">Styler Test PropertyIsEqualTo</input><br/> 
     111      <input type="radio" name="style" onclick="setStyle(this.value)" value="5">Styler Test Not FeatureId</input><br/> 
     112      <input type="radio" name="style" onclick="setStyle(this.value)" value="6">Styler Test WATER_TYPE</input><br/> 
     113      <input type="radio" name="style" onclick="setStyle(this.value)" value="7">Styler Test PropertyIsGreaterThanOrEqualTo</input><br/> 
     114      <input type="radio" name="style" onclick="setStyle(this.value)" value="8">Styler Test PropertyIsLessThanOrEqualTo</input><br/> 
     115      <input type="radio" name="style" onclick="setStyle(this.value)" value="9">Styler Test PropertyIsGreaterThan</input><br/> 
     116      <input type="radio" name="style" onclick="setStyle(this.value)" value="10">Styler Test PropertyIsLessThan</input><br/> 
     117      <input type="radio" name="style" onclick="setStyle(this.value)" value="11">Styler Test PropertyIsLike</input><br/> 
    96118    </form> 
    97119  </body> 
  • sandbox/topp/geoext/examples/tasmania/sld-tasmania.xml

    r6537 r6544  
    11<?xml version="1.0" encoding="UTF-8"?> 
    2 <sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="www.w3.org/1999/xlink"> 
     2<sld:StyledLayerDescriptor 
     3    xmlns:sld="http://www.opengis.net/sld" 
     4    xmlns:ogc="http://www.opengis.net/ogc" 
     5    xmlns:gml="http://www.opengis.net/gml" 
     6    xmlns:xlink="http://www.w3.org/1999/xlink"> 
    37  <sld:NamedLayer> 
    48    <sld:Name>WaterBodies</sld:Name> 
  • sandbox/topp/geoext/lib/OpenLayers/Format/SLD.js

    r6538 r6544  
    145145     * {Object} An object representing the SLD. 
    146146     */ 
    147     _read: function(data) { 
     147    read: function(data) { 
    148148        if(typeof data == "string") { 
    149149            data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); 
     
    186186     *     a list of styles and the second is the namedLayer object. 
    187187     */ 
    188     read: function(data, options) { 
     188    _read: function(data, options) { 
    189189        if (typeof data == "string") {  
    190190            data = OpenLayers.Format.XML.prototype.read.apply(this, [data]); 
  • sandbox/topp/geoext/lib/OpenLayers/Format/SLD/v1.js

    r6541 r6544  
    204204                if(symProperty) { 
    205205                    // No support for parsing of OGC expressions 
    206                     var value = this.getChildValue(node); 
     206                    // Could be wrapped in ogc:Literal 
     207                    var obj = {}; 
     208                    this.readChildNodes(node, obj); 
     209                    var value = obj.value; 
     210                    if(!value) { 
     211                        value = this.getChildValue(node); 
     212                    } 
    207213                    // always string, could be an empty string 
    208214                    if(value) { 
     
    314320                if(rule.fids.length > 0) { 
    315321                    rule.rules.push(new OpenLayers.Rule.FeatureId({ 
    316                         fids: filter.fids 
     322                        fids: rule.fids 
    317323                    })); 
    318324                } 
     
    329335                if(rule.fids.length > 0) { 
    330336                    rule.rules.push(new OpenLayers.Rule.FeatureId({ 
    331                         fids: filter.fids 
     337                        fids: rule.fids 
    332338                    })); 
    333339                } 
     
    344350                if(rule.fids.length > 0) { 
    345351                    rule.rules.push(new OpenLayers.Rule.FeatureId({ 
    346                         fids: filter.fids 
     352                        fids: rule.fids 
    347353                    })); 
    348354                } 
     
    410416                filter.rules.push(rule); 
    411417            }, 
    412             "Literal": function(node, rule) { 
    413                 rule.value = this.getChildValue(node); 
     418            "Literal": function(node, obj) { 
     419                obj.value = this.getChildValue(node); 
    414420            }, 
    415421            "PropertyName": function(node, rule) {