Big thanks to Andreas Hocevar for this SLD format class - this continues to extend his Rule and Style work by giving us the ability to read SLD docs - onward with style r=tschaub (closes #533).

git-svn-id: http://svn.openlayers.org/trunk/openlayers@5520 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2007-12-20 00:24:20 +00:00
parent acc8cfc0f2
commit 7011c0f470
10 changed files with 1757 additions and 0 deletions

116
examples/sld.html Normal file
View File

@@ -0,0 +1,116 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
#map {
width: 800px;
height: 475px;
border: 1px solid black;
}
</style>
<script src="../lib/Firebug/firebug.js"></script>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
var lon = 5;
var lat = 40;
var zoom = 5;
var map, layer, gmlLayers, styles, waterStyle, hover;
function load(){
OpenLayers.loadURL("tasmania/sld-tasmania.xml", "", null, init);
}
function init(req){
map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
map.addLayer(layer);
map.zoomToExtent(new OpenLayers.Bounds(143,-39,150,-45));
sld = new OpenLayers.Format.SLD().read(req.responseText,
{withNamedLayer: true});
styles = sld[1];
waterStyle = styles["WaterBodies"];
gmlLayers = [
// use the sld UserStyle named "Default Styler"
new OpenLayers.Layer.GML("StateBoundaries",
"tasmania/TasmaniaStateBoundaries.xml", {
style: waterStyle["default"]}),
new OpenLayers.Layer.GML("Roads",
"tasmania/TasmaniaRoads.xml", {
style: waterStyle["default"]}),
new OpenLayers.Layer.GML("WaterBodies",
"tasmania/TasmaniaWaterBodies.xml", {
style: waterStyle["default"]}),
new OpenLayers.Layer.GML("Cities",
"tasmania/TasmaniaCities.xml", {
style: waterStyle["default"]})];
// add the first layer with the style passed to the constructor
map.addLayer(gmlLayers[0]);
// add the other layers after setting the style using the
// setStyle() method, which will pick the correct default style
// from the styles hash we got back from
// OpenLayers.Format.SLD.read()
for (var i=1; i<gmlLayers.length; i++) {
gmlLayers[i].style = styles[gmlLayers[i].name]["default"];
map.addLayer(gmlLayers[i]);
gmlLayers[i].redraw();
}
// SLD can also be used for the SelectFeature control
waterStyle["Hover Styler"].defaultStyle =
OpenLayers.Feature.Vector.style["select"];
hover = new OpenLayers.Control.SelectFeature(gmlLayers[2], {
selectStyle: waterStyle["Hover Styler"],
hover: true,
select: select
});
map.addControl(hover);
hover.activate();
}
// replaces OpenLayers.Control.Select.select
var select = function(feature) {
// store layer style
var style = feature.layer.style;
// set temporary layer style for hover rendering
feature.layer.style = hover.selectStyle;
OpenLayers.Control.SelectFeature.prototype.select.apply(hover, arguments);
// restore layer style
feature.layer.style = style;
}
// set a new style when the radio button changes
function setStyle(styleName) {
// change the style of the features of the WaterBodies layer
var features = gmlLayers[2].features;
for (var i=0; i<features.length; i++) {
features[i].style = waterStyle[styleName];
}
gmlLayers[2].redraw();
}
</script>
</head>
<body onload="load()">
<div id="map"></div>
<p>This example uses a <a target="_blank" href="xml/sld-tasmania.xml">SLD
file</a> to style the vector features. The style to be used is either
determined by the NamedLayer and IsDefault properties in the sld file, or
can directly be applied by addressing a style from the styles
hash with the UserStyle name from the sld file as key. Select a new style for the WaterBodies layer below:<p>
<form>
<input type="radio" name="style" onclick="setStyle(this.value)" checked="checked" value="default">Default Styler (zoom in to see more features)</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsEqualTo">Styler Test PropertyIsEqualTo</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test Not FeatureId">Styler Test Not FeatureId</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test WATER_TYPE">Styler Test WATER_TYPE</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsGreaterThanOrEqualTo">Styler Test PropertyIsGreaterThanOrEqualTo</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsLessThanOrEqualTo">Styler Test PropertyIsLessThanOrEqualTo</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsGreaterThan">Styler Test PropertyIsGreaterThan</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsLessThan">Styler Test PropertyIsLessThan</input><br/>
<input type="radio" name="style" onclick="setStyle(this.value)" value="Styler Test PropertyIsLike">Styler Test PropertyIsLike</input><br/>
</form>
</body>
</html>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:topp="http://www.openplans.org/topp" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openplans.org/topp http://192.168.0.100:8080/geoserver-1.4.0-RC3/wfs/DescribeFeatureType?typeName=topp:tasmania_cities http://www.opengis.net/wfs http://192.168.0.100:8080/geoserver-1.4.0-RC3/schemas/wfs/1.0.0/WFS-basic.xsd">
<gml:boundedBy>
<gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.29100045,-42.85100182 147.29100045,-42.85100182</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
<topp:tasmania_cities fid="tasmania_cities.1">
<topp:the_geom>
<gml:MultiPoint srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:pointMember>
<gml:Point>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.29100045,-42.85100182</gml:coordinates>
</gml:Point>
</gml:pointMember>
</gml:MultiPoint>
</topp:the_geom>
<topp:CITY_NAME>Hobart</topp:CITY_NAME>
<topp:ADMIN_NAME>Tasmania</topp:ADMIN_NAME>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:STATUS>Provincial capital</topp:STATUS>
<topp:POP_CLASS>100,000 to 250,000</topp:POP_CLASS>
</topp:tasmania_cities>
</gml:featureMember>
</wfs:FeatureCollection>

View File

@@ -0,0 +1,204 @@
<?xml version="1.0" encoding="UTF-8"?>
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:topp="http://www.openplans.org/topp" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openplans.org/topp http://192.168.0.100:8080/geoserver-1.4.0-RC3/wfs/DescribeFeatureType?typeName=topp:tasmania_roads http://www.opengis.net/wfs http://192.168.0.100:8080/geoserver-1.4.0-RC3/schemas/wfs/1.0.0/WFS-basic.xsd">
<gml:boundedBy>
<gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">145.19754,-43.423512 148.27298,-40.852802</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.1">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.468582,-41.241478 146.574768,-41.251186 146.640411,-41.255154 146.766129,-41.332348 146.794189,-41.34417 146.822174,-41.362988 146.863434,-41.380234 146.899521,-41.379452 146.929504,-41.378227 147.008041,-41.356079 147.098343,-41.362919</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>alley</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.2">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.098343,-41.362919 147.17305,-41.452778 147.213867,-41.503773 147.234894,-41.546661 147.251129,-41.573826 147.264664,-41.602474 147.284485,-41.617554 147.300583,-41.637878</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>highway</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.3">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.300583,-41.637878 147.225815,-41.626938 147.183319,-41.619236 147.082367,-41.577755 147.031326,-41.565205 146.961487,-41.564186 146.924545,-41.568565 146.876328,-41.569614 146.783722,-41.56073 146.684937,-41.536232 146.614258,-41.478153 146.619995,-41.423958 146.582581,-41.365482 146.52478,-41.29541 146.477493,-41.277622 146.468582,-41.241478</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>lane</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.4">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.522247,-41.859921 147.551865,-41.927834 147.597321,-42.017418 147.578644,-42.113216 147.541656,-42.217743 147.468674,-42.22662</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>highway</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.5">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.103699,-41.171677 146.303619,-41.237202 146.362228,-41.236279 146.39418,-41.245384 146.443726,-41.244308 146.468582,-41.241478</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>gravel</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.6">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">145.856018,-41.08007 145.944839,-41.119896 146.037994,-41.150059 146.103699,-41.171677</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>road</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.7">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.468674,-42.22662 147.474945,-42.292259 147.467697,-42.301292 147.451828,-42.341656 147.424545,-42.378723 147.366013,-42.412552 147.345779,-42.432449 147.289322,-42.476475 147.264511,-42.503899 147.259918,-42.547539 147.249405,-42.614006 147.278351,-42.693249 147.284271,-42.757759 147.256744,-42.778393</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>highway</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.8">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">148.249252,-41.860851 148.234436,-41.901783 148.192123,-41.93721 148.155762,-41.953667 148.127731,-41.994537 148.053131,-42.100563</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>road</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.9">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">145.19754,-40.878323 145.246674,-40.86021 145.293289,-40.852802 145.465225,-40.897865 145.538498,-40.936264 145.554062,-40.939201 145.602112,-40.962936 145.646362,-40.98243 145.683838,-40.989883 145.710587,-40.996201 145.744293,-41.007545 145.801956,-41.041782 145.856018,-41.08007</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>logging</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.10">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.360001,-42.91993 147.348816,-42.93726 147.285049,-42.979027 147.220886,-42.995876 147.164429,-43.027004 147.068237,-43.06319 146.96463,-43.116447 146.949554,-43.17004 146.95369,-43.209591 146.964127,-43.224545 146.975723,-43.250484 146.980759,-43.2701 146.982605,-43.287716 146.970871,-43.31691 146.940521,-43.33812 146.943054,-43.362263 146.952194,-43.39278 146.955429,-43.423512</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>road</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.11">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.300583,-41.637878 147.372009,-41.695503 147.402588,-41.725574 147.444061,-41.749676 147.490433,-41.782482 147.506866,-41.795624 147.522919,-41.835609 147.522247,-41.859921</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>highway</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.12">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">148.053131,-42.100563 148.028229,-42.188286 148.002258,-42.2295 147.969955,-42.254417 147.960297,-42.284897 147.942719,-42.398819 147.926407,-42.486034 147.875092,-42.538582 147.832001,-42.587299 147.744217,-42.631607 147.693298,-42.656067 147.618195,-42.691135 147.575317,-42.743092 147.578293,-42.769539 147.547852,-42.814312 147.506699,-42.842907 147.488312,-42.877041 147.449692,-42.901054 147.416809,-42.902828</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>road</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.13">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.098343,-41.362919 147.065445,-41.311977 147.024078,-41.257534 146.981445,-41.211391 146.948227,-41.181595 146.926773,-41.172501 146.905029,-41.147144 146.940765,-41.085857 146.962662,-41.075096 147.021088,-41.080925 147.099228,-41.123959 147.187607,-41.150597 147.282028,-41.104244 147.295715,-41.075798 147.306595,-41.062832 147.325745,-41.053524 147.362991,-41.080441 147.419022,-41.081764 147.465881,-41.06089 147.519302,-41.092793 147.528595,-41.137089 147.552521,-41.193565 147.594223,-41.233875 147.734406,-41.239891 147.829376,-41.196636 147.882614,-41.163197 147.91127,-41.163109 147.985168,-41.226128 148.022156,-41.292599 148.075119,-41.313915 148.200104,-41.323097 148.236191,-41.339245 148.27298,-41.383488 148.25,-41.45713 148.254395,-41.53941 148.262436,-41.585217 148.249252,-41.860851</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>road</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_roads fid="tasmania_roads.14">
<topp:the_geom>
<gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:lineStringMember>
<gml:LineString>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.256744,-42.778393 147.220184,-42.824776 147.179596,-42.82143 147.111328,-42.795731 147.057098,-42.741581 147.003479,-42.704803 146.919098,-42.622734 146.910538,-42.610928 146.889984,-42.585396 146.83844,-42.572792 146.78569,-42.539352 146.724335,-42.485966 146.695023,-42.469582 146.649872,-42.450371 146.604965,-42.432274 146.578781,-42.408531 146.539307,-42.364208 146.525055,-42.30883 146.558044,-42.275948 146.576248,-42.23777 146.581467,-42.203426 146.490005,-42.180222 146.3797,-42.146332 146.334061,-42.138741 146.270966,-42.165703 146.197296,-42.224072 146.167908,-42.244835 146.164932,-42.245171 146.111023,-42.265202 146.037476,-42.239738 145.981628,-42.187851 145.853912,-42.133492 145.819611,-42.129154 145.72052,-42.104084 145.618576,-42.056023 145.541718,-42.027241 145.486282,-41.983326 145.452744,-41.926544 145.494034,-41.896477 145.591736,-41.860214 145.64212,-41.838398 145.669449,-41.830734 145.680923,-41.795753 145.682968,-41.743221 145.675156,-41.710377 145.680115,-41.688908 145.701065,-41.648228 145.714798,-41.609509 145.629196,-41.462051 145.648895,-41.470337 145.633423,-41.420902 145.631866,-41.36528 145.640854,-41.301533 145.700424,-41.242611 145.77243,-41.193897 145.802338,-41.161488 145.856018,-41.08007</gml:coordinates>
</gml:LineString>
</gml:lineStringMember>
</gml:MultiLineString>
</topp:the_geom>
<topp:TYPE>road</topp:TYPE>
</topp:tasmania_roads>
</gml:featureMember>
</wfs:FeatureCollection>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:topp="http://www.openplans.org/topp" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openplans.org/topp http://192.168.0.100:8080/geoserver-1.4.0-RC3/wfs/DescribeFeatureType?typeName=topp:tasmania_water_bodies http://www.opengis.net/wfs http://192.168.0.100:8080/geoserver-1.4.0-RC3/schemas/wfs/1.0.0/WFS-basic.xsd">
<gml:boundedBy>
<gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">145.971619,-43.031944 147.219696,-41.775558</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
<topp:tasmania_water_bodies fid="tasmania_water_bodies.1">
<topp:the_geom>
<gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:polygonMember>
<gml:Polygon>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.232727,-42.157501 146.238007,-42.16111 146.24411,-42.169724 146.257202,-42.193329 146.272217,-42.209442 146.274689,-42.214165 146.27832,-42.21833 146.282471,-42.228882 146.282745,-42.241943 146.291351,-42.255836 146.290253,-42.261948 146.288025,-42.267502 146.282471,-42.269997 146.274994,-42.271111 146.266663,-42.270279 146.251373,-42.262505 146.246918,-42.258057 146.241333,-42.256111 146.23468,-42.257782 146.221344,-42.269165 146.210785,-42.274445 146.20163,-42.27417 146.196075,-42.271385 146.186646,-42.258057 146.188568,-42.252785 146.193298,-42.249443 146.200806,-42.248055 146.209137,-42.249168 146.217468,-42.248611 146.222473,-42.245277 146.22525,-42.240555 146.224121,-42.22805 146.224396,-42.221382 146.228302,-42.217216 146.231354,-42.212502 146.231628,-42.205559 146.219421,-42.186943 146.21637,-42.17028 146.216644,-42.16333 146.219696,-42.158607 146.225525,-42.156105 146.232727,-42.157501</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:polygonMember>
</gml:MultiPolygon>
</topp:the_geom>
<topp:AREA>1064866676</topp:AREA>
<topp:PERIMETER>1071221047</topp:PERIMETER>
<topp:WATER_TYPE>Lake</topp:WATER_TYPE>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:CONTINENT>Australia</topp:CONTINENT>
</topp:tasmania_water_bodies>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_water_bodies fid="tasmania_water_bodies.2">
<topp:the_geom>
<gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:polygonMember>
<gml:Polygon>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.284424,-43.031944 146.265808,-43.029442 146.257751,-43.021667 146.252197,-43.01889 146.243561,-43.017776 146.23053,-43.021667 146.21524,-43.02417 146.209686,-43.021942 146.209961,-43.015007 146.21579,-42.991112 146.21524,-42.985001 146.213593,-42.979439 146.21109,-42.974716 146.207458,-42.970276 146.193024,-42.959724 146.181915,-42.95472 146.166931,-42.951393 146.1586,-42.950554 146.123016,-42.951111 146.116364,-42.948883 146.112732,-42.944717 146.110229,-42.93972 146.101349,-42.932777 146.094971,-42.929726 146.084961,-42.922775 146.054138,-42.897781 146.041656,-42.886665 146.038025,-42.882217 146.035522,-42.877495 146.035248,-42.86528 146.036652,-42.852226 146.034424,-42.840279 146.030823,-42.836113 146.026367,-42.832504 146.018036,-42.831673 146.010529,-42.832779 146.003876,-42.834724 145.995514,-42.835274 145.990784,-42.831673 145.990234,-42.825562 145.996338,-42.815277 146.000549,-42.805275 145.997192,-42.800278 145.984406,-42.789726 145.981079,-42.785561 145.976898,-42.775002 145.97995,-42.770279 145.985504,-42.767776 145.994965,-42.768059 146.002472,-42.769447 146.008881,-42.772499 146.025818,-42.786667 146.032196,-42.788895 146.040802,-42.788338 146.061646,-42.783333 146.068848,-42.785004 146.074402,-42.787781 146.086914,-42.799995 146.109131,-42.825279 146.117188,-42.832222 146.122742,-42.834442 146.131073,-42.835274 146.139709,-42.834999 146.147217,-42.833061 146.163025,-42.83139 146.170532,-42.833611 146.174988,-42.837219 146.176636,-42.841942 146.17746,-42.848053 146.173309,-42.852226 146.165802,-42.853333 146.155243,-42.859169 146.141937,-42.86306 146.12912,-42.858612 146.118011,-42.852783 146.110779,-42.851395 146.102173,-42.852501 146.098297,-42.855003 146.097198,-42.861389 146.102173,-42.871666 146.111359,-42.878883 146.121338,-42.884445 146.132446,-42.889442 146.146942,-42.899445 146.154968,-42.907219 146.164978,-42.914444 146.174988,-42.92028 146.181366,-42.923058 146.195251,-42.926109 146.204681,-42.926392 146.220795,-42.924721 146.227448,-42.922775 146.233032,-42.92028 146.241913,-42.913612 146.247742,-42.904167 146.260529,-42.891945 146.265533,-42.888611 146.272217,-42.886948 146.281372,-42.886948 146.289703,-42.888054 146.300812,-42.893616 146.308014,-42.902779 146.308594,-42.908333 146.302185,-42.925278 146.301086,-42.931389 146.301636,-42.9375 146.303314,-42.943054 146.307739,-42.946663 146.320801,-42.951111 146.330261,-42.951393 146.352753,-42.947777 146.360229,-42.949165 146.361908,-42.95472 146.358002,-42.959442 146.347473,-42.965553 146.335785,-42.969994 146.331085,-42.973328 146.328033,-42.97805 146.329681,-42.983612 146.33609,-42.985832 146.36496,-42.9925 146.371338,-42.99472 146.383331,-43.000557 146.389984,-43.002785 146.39444,-43.006393 146.391357,-43.011116 146.383881,-43.012222 146.368561,-43.020836 146.355225,-43.024719 146.339142,-43.02639 146.332458,-43.028336 146.323853,-43.02861 146.313019,-43.023056 146.306366,-43.020836 146.298859,-43.022774 146.290253,-43.029442 146.284424,-43.031944</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:polygonMember>
</gml:MultiPolygon>
</topp:the_geom>
<topp:AREA>1067509088</topp:AREA>
<topp:PERIMETER>1073140989</topp:PERIMETER>
<topp:WATER_TYPE>Lake</topp:WATER_TYPE>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:CONTINENT>Australia</topp:CONTINENT>
</topp:tasmania_water_bodies>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_water_bodies fid="tasmania_water_bodies.3">
<topp:the_geom>
<gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:polygonMember>
<gml:Polygon>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.191925,-42.116112 146.184692,-42.114449 146.174988,-42.107506 146.171356,-42.103333 146.167755,-42.101944 146.167206,-42.095001 146.170532,-42.077225 146.169128,-42.071671 146.163879,-42.061943 146.159698,-42.057777 146.140808,-42.044167 146.09024,-42.014168 146.08609,-42.010559 146.083313,-42.005005 146.084686,-41.999443 146.089417,-41.996109 146.097748,-41.99778 146.109406,-42.002228 146.129395,-42.008057 146.146637,-42.016113 146.153046,-42.018333 146.169128,-42.026947 146.179138,-42.033615 146.182739,-42.036949 146.203583,-42.062775 146.20636,-42.06778 146.207733,-42.073334 146.206635,-42.079445 146.207184,-42.085556 146.208862,-42.09111 146.214417,-42.094162 146.21579,-42.099724 146.209961,-42.109169 146.205231,-42.11306 146.200256,-42.115555 146.191925,-42.116112</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:polygonMember>
</gml:MultiPolygon>
</topp:the_geom>
<topp:AREA>1064598241</topp:AREA>
<topp:PERIMETER>1071187492</topp:PERIMETER>
<topp:WATER_TYPE>Lake</topp:WATER_TYPE>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:CONTINENT>Australia</topp:CONTINENT>
</topp:tasmania_water_bodies>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_water_bodies fid="tasmania_water_bodies.4">
<topp:the_geom>
<gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:polygonMember>
<gml:Polygon>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.697205,-41.988892 146.688873,-41.988052 146.682465,-41.985832 146.67746,-41.976105 146.673859,-41.973328 146.674133,-41.966393 146.673309,-41.960281 146.674408,-41.95417 146.680817,-41.937218 146.696625,-41.907219 146.69693,-41.900551 146.694122,-41.895554 146.693573,-41.889442 146.695526,-41.883888 146.702179,-41.875275 146.703583,-41.869164 146.700256,-41.858055 146.697754,-41.853058 146.684418,-41.834999 146.680817,-41.83139 146.675812,-41.821671 146.674988,-41.815552 146.680267,-41.797783 146.683319,-41.792503 146.684418,-41.786949 146.691071,-41.778336 146.69693,-41.775558 146.704132,-41.776947 146.708588,-41.781387 146.714691,-41.789726 146.722748,-41.797226 146.728027,-41.800835 146.733582,-41.803055 146.75,-41.804718 146.761658,-41.816666 146.766663,-41.826393 146.772217,-41.828613 146.780548,-41.828613 146.808319,-41.821671 146.815796,-41.820557 146.823029,-41.822777 146.825531,-41.833061 146.824677,-41.853615 146.822754,-41.858894 146.816925,-41.868607 146.80304,-41.871666 146.786377,-41.872772 146.777191,-41.872498 146.764984,-41.876389 146.761108,-41.880554 146.759979,-41.886665 146.762207,-41.898338 146.767487,-41.908607 146.774414,-41.917221 146.779694,-41.927498 146.777771,-41.93222 146.765259,-41.943611 146.754425,-41.963333 146.749695,-41.96666 146.732727,-41.974716 146.728027,-41.97805 146.703857,-41.987778 146.697205,-41.988892</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:polygonMember>
</gml:MultiPolygon>
</topp:the_geom>
<topp:AREA>1066494066</topp:AREA>
<topp:PERIMETER>1071999090</topp:PERIMETER>
<topp:WATER_TYPE>Lake</topp:WATER_TYPE>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:CONTINENT>Australia</topp:CONTINENT>
</topp:tasmania_water_bodies>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_water_bodies fid="tasmania_water_bodies.5">
<topp:the_geom>
<gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:polygonMember>
<gml:Polygon>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.899719,-42.032776 146.892487,-42.030556 146.886932,-42.027779 146.882446,-42.02417 146.87912,-42.018608 146.878571,-42.006111 146.876892,-42 146.871338,-41.99778 146.864136,-41.996391 146.859406,-41.993614 146.855225,-41.983055 146.856354,-41.976944 146.866913,-41.963615 146.871613,-41.959999 146.883881,-41.955559 146.88858,-41.951668 146.891663,-41.947495 146.893585,-41.941383 146.88858,-41.92556 146.887756,-41.919167 146.888031,-41.912498 146.891937,-41.907776 146.896637,-41.904999 146.90387,-41.906387 146.907471,-41.910828 146.911652,-41.922501 146.914429,-41.926666 146.919708,-41.929443 146.926361,-41.931671 146.953033,-41.931389 146.961365,-41.93222 146.968567,-41.933884 146.973846,-41.936661 146.983032,-41.943611 146.985504,-41.948334 146.987183,-41.953888 146.982178,-41.965004 146.972748,-41.978333 146.971619,-41.983887 146.966644,-41.99472 146.963593,-41.999443 146.958862,-42.003616 146.956085,-42.007782 146.946625,-42.015007 146.940796,-42.016945 146.932739,-42.016113 146.926086,-42.018059 146.921356,-42.022224 146.914703,-42.030281 146.90802,-42.032219 146.899719,-42.032776</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:polygonMember>
</gml:MultiPolygon>
</topp:the_geom>
<topp:AREA>1065512599</topp:AREA>
<topp:PERIMETER>1071304933</topp:PERIMETER>
<topp:WATER_TYPE>Lake</topp:WATER_TYPE>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:CONTINENT>Australia</topp:CONTINENT>
</topp:tasmania_water_bodies>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_water_bodies fid="tasmania_water_bodies.6">
<topp:the_geom>
<gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:polygonMember>
<gml:Polygon>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">147.149719,-42.203056 147.142212,-42.201668 147.131348,-42.195831 147.127747,-42.191666 147.125244,-42.186111 147.12439,-42.180832 147.126343,-42.175278 147.132172,-42.165833 147.136108,-42.16111 147.137207,-42.155556 147.135529,-42.149994 147.12912,-42.14167 147.126617,-42.136948 147.128845,-42.124443 147.12912,-42.117775 147.122742,-42.115555 147.11441,-42.116112 147.101349,-42.120552 147.093842,-42.119164 147.092194,-42.114449 147.093292,-42.108337 147.097198,-42.097221 147.103302,-42.080833 147.108307,-42.07 147.112183,-42.066666 147.117737,-42.063889 147.124115,-42.061943 147.131622,-42.060829 147.138031,-42.063614 147.140808,-42.06778 147.145264,-42.071945 147.150818,-42.074173 147.159973,-42.074173 147.16748,-42.073059 147.180542,-42.069725 147.188873,-42.069168 147.19693,-42.07 147.209686,-42.075005 147.216919,-42.082779 147.219696,-42.087502 147.219421,-42.094444 147.216644,-42.099167 147.211914,-42.103333 147.190521,-42.106949 147.185791,-42.110283 147.182739,-42.115005 147.180542,-42.127495 147.180267,-42.134445 147.18219,-42.140556 147.182739,-42.146111 147.187744,-42.16861 147.188568,-42.175003 147.187195,-42.187775 147.184143,-42.192772 147.180542,-42.196663 147.169128,-42.201942 147.149719,-42.203056</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:polygonMember>
</gml:MultiPolygon>
</topp:the_geom>
<topp:AREA>1065646817</topp:AREA>
<topp:PERIMETER>1071606923</topp:PERIMETER>
<topp:WATER_TYPE>Lake</topp:WATER_TYPE>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:CONTINENT>Australia</topp:CONTINENT>
</topp:tasmania_water_bodies>
</gml:featureMember>
<gml:featureMember>
<topp:tasmania_water_bodies fid="tasmania_water_bodies.7">
<topp:the_geom>
<gml:MultiPolygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:polygonMember>
<gml:Polygon>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">146.240784,-42.851112 146.231628,-42.850838 146.228027,-42.846664 146.218842,-42.83889 146.214691,-42.831116 146.206635,-42.823334 146.195801,-42.810829 146.173859,-42.77861 146.171356,-42.773888 146.169708,-42.768333 146.166382,-42.762779 146.160522,-42.748886 146.155243,-42.739166 146.151642,-42.735001 146.142761,-42.727776 146.127747,-42.725555 146.118561,-42.72583 146.111908,-42.726944 146.096344,-42.736389 146.09079,-42.738892 146.082184,-42.739998 146.077759,-42.737221 146.074127,-42.733055 146.060791,-42.722221 146.053314,-42.720833 146.041077,-42.725273 146.031372,-42.731941 146.01886,-42.736946 146.011383,-42.738335 145.994415,-42.739166 145.979675,-42.736115 145.974121,-42.733055 145.971619,-42.728333 145.973022,-42.721382 145.976074,-42.71666 145.985504,-42.709999 146.001923,-42.701668 146.011658,-42.695 146.01944,-42.686943 146.022491,-42.681671 146.02359,-42.676109 146.023041,-42.669724 146.01886,-42.65889 146.018311,-42.653328 146.014984,-42.642227 146.014435,-42.636116 146.016937,-42.623611 146.020813,-42.61972 146.025543,-42.616394 146.032196,-42.614449 146.03775,-42.6175 146.041351,-42.621666 146.043854,-42.626389 146.046936,-42.637505 146.048309,-42.649994 146.048035,-42.656662 146.049133,-42.669167 146.05246,-42.680832 146.054962,-42.684998 146.060516,-42.688049 146.068848,-42.6875 146.073853,-42.683609 146.075806,-42.678886 146.078308,-42.666389 146.079407,-42.645836 146.084412,-42.61528 146.088867,-42.604172 146.095795,-42.595001 146.099701,-42.590836 146.104401,-42.587502 146.111908,-42.589165 146.115234,-42.59333 146.116058,-42.599442 146.113586,-42.612503 146.113281,-42.619446 146.113861,-42.626106 146.113281,-42.639168 146.11441,-42.652222 146.116058,-42.657219 146.11969,-42.661385 146.126068,-42.664162 146.13443,-42.665276 146.161377,-42.665276 146.16803,-42.662498 146.171082,-42.658607 146.172211,-42.652496 146.173035,-42.638611 146.172211,-42.6325 146.173309,-42.611946 146.17746,-42.600281 146.183594,-42.590836 146.195801,-42.586388 146.203308,-42.585274 146.210785,-42.586662 146.21524,-42.590279 146.221344,-42.599998 146.221893,-42.60556 146.2258,-42.622223 146.228577,-42.626945 146.235779,-42.628609 146.247192,-42.623329 146.253876,-42.621384 146.261383,-42.623055 146.265808,-42.62722 146.267487,-42.631943 146.268036,-42.638893 146.264435,-42.656662 146.261658,-42.661385 146.254974,-42.66333 146.246613,-42.662498 146.240784,-42.665001 146.236084,-42.668335 146.233032,-42.673058 146.232727,-42.68 146.236084,-42.684723 146.241638,-42.686943 146.257477,-42.688889 146.265808,-42.688889 146.279694,-42.692772 146.283325,-42.696945 146.288574,-42.706665 146.291931,-42.710831 146.296356,-42.714447 146.307465,-42.720833 146.311096,-42.724442 146.308868,-42.730553 146.304962,-42.734444 146.293579,-42.739166 146.293304,-42.745834 146.29776,-42.749443 146.303314,-42.752502 146.306915,-42.756393 146.309418,-42.761391 146.315521,-42.769722 146.323578,-42.777496 146.334412,-42.790001 146.338867,-42.793617 146.346069,-42.801941 146.348572,-42.806946 146.349121,-42.813057 146.345245,-42.817223 146.340515,-42.820557 146.333862,-42.822227 146.324402,-42.822227 146.3172,-42.820557 146.306091,-42.815002 146.295532,-42.802223 146.28775,-42.787781 146.282196,-42.784729 146.273865,-42.785278 146.268036,-42.787781 146.263306,-42.791115 146.256378,-42.799995 146.254974,-42.806664 146.25415,-42.826668 146.251648,-42.83889 146.249695,-42.844444 146.246613,-42.849167 146.240784,-42.851112</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</gml:polygonMember>
</gml:MultiPolygon>
</topp:the_geom>
<topp:AREA>1067743969</topp:AREA>
<topp:PERIMETER>1073212293</topp:PERIMETER>
<topp:WATER_TYPE>Lake</topp:WATER_TYPE>
<topp:CNTRY_NAME>Australia</topp:CNTRY_NAME>
<topp:CONTINENT>Australia</topp:CONTINENT>
</topp:tasmania_water_bodies>
</gml:featureMember>
</wfs:FeatureCollection>

View File

@@ -0,0 +1,531 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<sld:NamedLayer>
<sld:Name>WaterBodies</sld:Name>
<sld:UserStyle>
<sld:Name>Default Styler</sld:Name>
<sld:Title>Default Styler</sld:Title>
<sld:Abstract></sld:Abstract>
<sld:IsDefault>1</sld:IsDefault>
<sld:FeatureTypeStyle>
<sld:Name>testStyleName</sld:Name>
<sld:Title>title</sld:Title>
<sld:Abstract>abstract</sld:Abstract>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<sld:Rule>
<sld:Name>testRuleName</sld:Name>
<sld:Title>title</sld:Title>
<sld:Abstract>Abstract</sld:Abstract>
<ogc:Filter>
<ogc:FeatureId fid="tasmania_water_bodies.2" />
<ogc:FeatureId fid="tasmania_water_bodies.3" />
</ogc:Filter>
<sld:MaxScaleDenominator>3000000</sld:MaxScaleDenominator>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">blue</sld:CssParameter>
<sld:CssParameter name="fill-opacity">
<ogc:Literal>1.0</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
<sld:Stroke>
<sld:CssParameter name="stroke">
<ogc:Literal>#C0C0C0</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-linecap">
<ogc:Literal>butt</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-linejoin">
<ogc:Literal>miter</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-opacity">
<ogc:Literal>1</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-width">
<ogc:Literal>1</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-dashoffset">
<ogc:Literal>0</ogc:Literal>
</sld:CssParameter>
</sld:Stroke>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Hover Styler</sld:Name>
<sld:Title>Hover Styler</sld:Title>
<sld:Abstract></sld:Abstract>
<sld:FeatureTypeStyle>
<sld:Name>testStyleHover</sld:Name>
<sld:Title>title</sld:Title>
<sld:Abstract>abstract</sld:Abstract>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<sld:Rule>
<sld:Name>testRuleNameHover</sld:Name>
<sld:Title>title</sld:Title>
<sld:Abstract>Abstract</sld:Abstract>
<ogc:Filter>
<ogc:Not>
<ogc:Or>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>PERIMETER</ogc:PropertyName>
<ogc:Literal>1071304933</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:Literal>1065512599</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Or>
</ogc:Not>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>black</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="fill-opacity">
<ogc:Literal>0.5</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
<sld:Stroke>
<sld:CssParameter name="stroke">
<ogc:Literal>green</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-linecap">
<ogc:Literal>butt</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-linejoin">
<ogc:Literal>miter</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-opacity">
<ogc:Literal>0.5</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-width">
<ogc:Literal>5</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-dashoffset">
<ogc:Literal>0</ogc:Literal>
</sld:CssParameter>
</sld:Stroke>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Attribute Filter Styler</sld:Name>
<sld:Title>Attribute Filter Styler</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>rulePropertyIsEqualTo</sld:Name>
<sld:Title>rulePropertyIsEqualTo</sld:Title>
<sld:Abstract>rulePropertyIsEqualTo</sld:Abstract>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>name</ogc:PropertyName>
<ogc:Literal>My simple Polygon</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>#000033</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Attribute Filter Styler</sld:Name>
<sld:Title>Attribute Filter Styler</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>rulePropertyIsEqualTo</sld:Name>
<sld:Title>rulePropertyIsEqualTo</sld:Title>
<sld:Abstract>rulePropertyIsEqualTo</sld:Abstract>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>name</ogc:PropertyName>
<ogc:Literal>My simple Polygon</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>#000033</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test PropertyIsEqualTo</sld:Name>
<sld:Title>Styler Test PropertyIsEqualTo</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>rulePropertyIsEqualTo</sld:Name>
<sld:Title>rulePropertyIsEqualTo</sld:Title>
<sld:Abstract>rulePropertyIsEqualTo</sld:Abstract>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:Literal>1067743969</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>red</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test Not FeatureId</sld:Name>
<sld:Title>Styler Test Not FeatureId</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>ruleNotFeatureId</sld:Name>
<sld:Title>ruleNotFeatureId</sld:Title>
<sld:Abstract>ruleNotFeatureId</sld:Abstract>
<ogc:Filter>
<ogc:Not>
<ogc:FeatureId fid="tasmania_water_bodies.7" />
</ogc:Not>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>red</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test WATER_TYPE</sld:Name>
<sld:Title>Styler Test WATER_TYPE</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>rulePropertyIsEqualTo</sld:Name>
<sld:Title>rulePropertyIsEqualTo</sld:Title>
<sld:Abstract>rulePropertyIsEqualTo</sld:Abstract>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>WATER_TYPE</ogc:PropertyName>
<ogc:Literal>Lake</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>red</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test PropertyIsGreaterThanOrEqualTo</sld:Name>
<sld:Title>Styler Test PropertyIsGreaterThanOrEqualTo</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>PropertyIsGreaterThanOrEqualTo</sld:Name>
<sld:Title>PropertyIsGreaterThanOrEqualTo</sld:Title>
<sld:Abstract>PropertyIsGreaterThanOrEqualTo</sld:Abstract>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>WATER_TYPE</ogc:PropertyName>
<ogc:Literal>Lake</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:Literal>1067509088</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
</ogc:And>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>yellow</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test PropertyIsLessThanOrEqualTo</sld:Name>
<sld:Title>Styler Test PropertyIsLessThanOrEqualTo</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>PropertyIsLessThanOrEqualTo</sld:Name>
<sld:Title>PropertyIsLessThanOrEqualTo</sld:Title>
<sld:Abstract>PropertyIsLessThanOrEqualTo</sld:Abstract>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>WATER_TYPE</ogc:PropertyName>
<ogc:Literal>Lake</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:Literal>1067509088</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:And>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>yellow</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test PropertyIsGreaterThan</sld:Name>
<sld:Title>Styler Test PropertyIsGreaterThan</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>PropertyIsGreaterThan</sld:Name>
<sld:Title>PropertyIsGreaterThan</sld:Title>
<sld:Abstract>PropertyIsGreaterThan</sld:Abstract>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>WATER_TYPE</ogc:PropertyName>
<ogc:Literal>Lake</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:Literal>1067000000</ogc:Literal>
</ogc:PropertyIsGreaterThan>
</ogc:And>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>yellow</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test PropertyIsLessThan</sld:Name>
<sld:Title>Styler Test PropertyIsLessThan</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>PropertyIsLessThan</sld:Name>
<sld:Title>PropertyIsLessThan</sld:Title>
<sld:Abstract>PropertyIsLessThan</sld:Abstract>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>WATER_TYPE</ogc:PropertyName>
<ogc:Literal>Lake</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:Literal>1067000000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>yellow</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test PropertyIsLike</sld:Name>
<sld:Title>Styler Test PropertyIsLike</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>PropertyIsLike</sld:Name>
<sld:Title>PropertyIsLike</sld:Title>
<sld:Abstract>PropertyIsLike</sld:Abstract>
<ogc:Filter>
<ogc:PropertyIsLike wildCard='*' singleChar='.' escape='!'>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:Literal>106774*</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>green</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
<sld:UserStyle>
<sld:Name>Styler Test PropertyIsBetween</sld:Name>
<sld:Title>Styler Test PropertyIsBetween</sld:Title>
<sld:FeatureTypeStyle>
<sld:Name>attribute filter type</sld:Name>
<sld:Title>attribute filter type</sld:Title>
<sld:FeatureTypeName>Feature</sld:FeatureTypeName>
<sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
<!-- Attribute filters -->
<sld:Rule>
<sld:Name>PropertyIsBetween</sld:Name>
<sld:Title>PropertyIsBetween</sld:Title>
<sld:Abstract>PropertyIsBetween</sld:Abstract>
<ogc:Filter>
<ogc:PropertyIsBetween>
<ogc:PropertyName>AREA</ogc:PropertyName>
<ogc:LowerBoundary>
<ogc:Literal>1060000000</ogc:Literal>
</ogc:LowerBoundary>
<ogc:UpperBoundary>
<ogc:Literal>1070000000</ogc:Literal>
</ogc:UpperBoundary>
</ogc:PropertyIsBetween>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">
<ogc:Literal>blue</ogc:Literal>
</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>
<sld:NamedLayer>
<sld:Name>Roads</sld:Name>
<sld:UserStyle>
<sld:Name>RoadsDefault</sld:Name>
<sld:IsDefault>1</sld:IsDefault>
<sld:Rule>
<sld:Name>justAStyler</sld:Name>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">
<ogc:Literal>red</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-width">
<ogc:Literal>2</ogc:Literal>
</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>
</sld:UserStyle>
</sld:NamedLayer>
<sld:NamedLayer>
<sld:Name>Cities</sld:Name>
<sld:UserStyle>
<sld:Name>DefaultCities</sld:Name>
<sld:IsDefault>1</sld:IsDefault>
<sld:Rule>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:ExternalGraphic>
<sld:OnlineResource xlink:href="../img/marker.png" />
<sld:Format>image/png</sld:Format>
</sld:ExternalGraphic>
<sld:Size>10</sld:Size>
<sld:Opacity>0.5</sld:Opacity>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
</sld:UserStyle>
</sld:NamedLayer>
</sld:StyledLayerDescriptor>

View File

@@ -177,6 +177,7 @@
"OpenLayers/Format/GeoRSS.js",
"OpenLayers/Format/WFS.js",
"OpenLayers/Format/WKT.js",
"OpenLayers/Format/SLD.js",
"OpenLayers/Format/Text.js",
"OpenLayers/Format/JSON.js",
"OpenLayers/Format/GeoJSON.js",

View File

@@ -0,0 +1,587 @@
/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
* See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
* for the full text of the license. */
/**
* @requires OpenLayers/Format/XML.js
* @requires OpenLayers/Style.js
* @requires OpenLayers/Rule/FeatureId.js
* @requires OpenLayers/Rule/Logical.js
* @requires OpenLayers/Rule/Comparison.js
*
* Class: OpenLayers.Format.SLD
* Read/Wite SLD. Create a new instance with the <OpenLayers.Format.SLD>
* constructor.
*
* Inherits from:
* - <OpenLayers.Format.XML>
*/
OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, {
/**
* APIProperty: sldns
* Namespace used for sld.
*/
sldns: "http://www.opengis.net/sld",
/**
* APIProperty: ogcns
* Namespace used for ogc.
*/
ogcns: "http://www.opengis.net/ogc",
/**
* APIProperty: gmlns
* Namespace used for gml.
*/
gmlns: "http://www.opengis.net/gml",
/**
* APIProperty: defaultStyle.
* {Object}
* A simple style, preset with the SLD defaults.
*/
defaultStyle: {
fillColor: "#808080",
fillOpacity: 1,
strokeColor: "#000000",
strokeOpacity: 1,
strokeWidth: 1,
pointRadius: 6
},
/**
* Property: withNamedLayer
* {Boolean} Option set during <read>. Default is false. If true, the
* return from <read> will be a two item array ([styles, namedLayer]):
* - styles - {Array(<OpenLayers.Style>)}
* - namedLayer - {Object} hash of userStyles, keyed by
* sld:NamedLayer/Name, each again keyed by
* sld:UserStyle/Name. Each entry of namedLayer is a
* StyleMap for a layer, with the userStyle names as style
* keys.
*/
withNamedLayer: false,
/**
* APIProperty: overrideDefaultStyleKey
* {Boolean} Store styles with key of "default" instead of user style name.
* If true, userStyles with sld:IsDefault==1 will be stored with
* key "default" instead of the sld:UserStyle/Name in the style map.
* Default is true.
*/
overrideDefaultStyleKey: true,
/**
* Constructor: OpenLayers.Format.SLD
* Create a new parser for SLD.
*
* Parameters:
* options - {Object} An optional object whose properties will be set on
* this instance.
*/
initialize: function(options) {
OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
},
/**
* APIMethod: read
* Read data from a string, and return a list of features.
*
* Parameters:
* data - {String} or {XMLNode} data to read/parse.
* options - {Object} Object that sets optional read configuration values.
* These include <withNamedLayer>, and <overrideDefaultStyleKey>.
*
* Returns:
* {Array(<OpenLayers.Style>)} List of styles. If <withNamedLayer> is
* true, return will be a two item array where the first item is
* a list of styles and the second is the namedLayer object.
*/
read: function(data, options) {
if (typeof data == "string") {
data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
}
OpenLayers.Util.applyDefaults(options, {
withNamedLayer: false,
overrideDefaultStyleKey: true
});
var userStyles = this.getElementsByTagNameNS(
data, this.sldns, "UserStyle"
);
var result = {};
if (userStyles.length > 0) {
var namedLayer = {};
var styles = new Array(userStyles.length);
var styleName, userStyle, style;
for (var i=0; i<userStyles.length; i++) {
userStyle = userStyles[i];
styleName = this.parseProperty(
userStyle, this.sldns, "Name"
);
style = this.parseUserStyle(userStyle, styleName);
if (options.overrideDefaultStyleKey && style.isDefault == true) {
styleName = "default";
}
if (!namedLayer[style.layerName]) {
namedLayer[style.layerName] = {};
}
namedLayer[style.layerName][styleName] = style;
styles[i] = style;
}
result = options.withNamedLayer ? [styles, namedLayer] : styles;
}
return result;
},
/**
* Method: parseUserStyle
* parses a sld userStyle for rules
*
* Parameters:
* xmlNode - {DOMElement} xml node to read the style from
* name - {String} name of the style
*
* Returns:
* {<OpenLayers.Style>}
*/
parseUserStyle: function(xmlNode, name) {
var userStyle = new OpenLayers.Style(this.defaultStyle, {name: name});
userStyle.isDefault = (
this.parseProperty(xmlNode, this.sldns, "IsDefault") == 1
);
// get the name of the layer if we have a NamedLayer
var namedLayerNode = xmlNode.parentNode;
var nameNodes = this.getElementsByTagNameNS(
namedLayerNode, this.sldns, "Name"
);
if (namedLayerNode.nodeName.indexOf("NamedLayer") != -1 &&
nameNodes &&
nameNodes.length > 0 &&
nameNodes[0].parentNode == namedLayerNode) {
userStyle.layerName = this.getChildValue(nameNodes[0]);
}
var ruleNodes = this.getElementsByTagNameNS(
xmlNode, this.sldns, "Rule"
);
// I don't think you really want to return [] here
if (ruleNodes.length == 0) { return []; }
var rules = userStyle.rules;
var ruleName;
for (var i=0; i<ruleNodes.length; i++) {
ruleName = this.parseProperty(ruleNodes[i], this.sldns, "Name");
rules.push(this.parseRule(ruleNodes[i], ruleName));
}
return userStyle;
},
/**
* Method: parseRule
* This function is the core of the SLD parsing code in OpenLayers.
* It creates the rule with its constraints and symbolizers.
*
* Parameters:
* xmlNode - {<DOMElement>}
*
* Returns:
* {Object} Hash of rule properties
*/
parseRule: function(xmlNode, name) {
// FILTERS
var filter = this.getElementsByTagNameNS(xmlNode, this.ogcns, "Filter");
if (filter && filter.length > 0) {
var rule = this.parseFilter(filter[0]);
} else {
// rule applies to all features
var rule = new OpenLayers.Rule();
}
rule.name = name;
// SCALE DENOMINATORS
// MinScaleDenominator
var minScale = this.getElementsByTagNameNS(
xmlNode, this.sldns, "MinScaleDenominator"
);
if (minScale && minScale.length > 0) {
rule.minScale = parseFloat(this.getChildValue(minScale[0]));
}
// MaxScaleDenominator
var maxScale = this.getElementsByTagNameNS(
xmlNode, this.sldns, "MaxScaleDenominator"
);
if (maxScale && maxScale.length > 0) {
rule.maxScale = parseFloat(this.getChildValue(maxScale[0]));
}
// STYLES
// walk through all symbolizers
var prefixes = OpenLayers.Style.SYMBOLIZER_PREFIXES;
for (var s=0; s<prefixes.length; s++) {
// symbolizer type
var symbolizer = this.getElementsByTagNameNS(
xmlNode, this.sldns, prefixes[s]+"Symbolizer"
);
if (symbolizer && symbolizer.length > 0) {
var style = {};
// externalGraphic
var graphic = this.getElementsByTagNameNS(
symbolizer[0], this.sldns, "Graphic"
);
if (graphic && graphic.length > 0) {
style.externalGraphic = this.parseProperty(
graphic[0], this.sldns, "OnlineResource", "xlink:href"
);
style.pointRadius = this.parseProperty(
graphic[0], this.sldns, "Size"
);
style.graphicOpacity = this.parseProperty(
graphic[0], this.sldns, "Opacity"
);
}
// fill
var fill = this.getElementsByTagNameNS(
symbolizer[0], this.sldns, "Fill"
);
if (fill && fill.length > 0) {
style.fillColor = this.parseProperty(
fill[0], this.sldns, "CssParameter", "name", "fill"
);
style.fillOpacity = this.parseProperty(
fill[0], this.sldns, "CssParameter",
"name", "fill-opacity"
) || 1;
}
// stroke
var stroke = this.getElementsByTagNameNS(
symbolizer[0], this.sldns, "Stroke"
);
if (stroke && stroke.length > 0) {
style.strokeColor = this.parseProperty(
stroke[0], this.sldns, "CssParameter", "name", "stroke"
);
style.strokeOpacity = this.parseProperty(
stroke[0], this.sldns, "CssParameter",
"name", "stroke-opacity"
) || 1;
style.strokeWidth = this.parseProperty(
stroke[0], this.sldns, "CssParameter",
"name", "stroke-width"
);
style.strokeLinecap = this.parseProperty(
stroke[0], this.sldns, "CssParameter",
"name", "stroke-linecap"
);
}
// set the [point|line|polygon]Symbolizer property of the rule
rule.symbolizer[prefixes[s]] = style;
}
}
return rule;
},
/**
* Method: parseFilter
* Parses ogc fiters.
*
* Parameters:
* xmlNode - {<DOMElement>}
*
* Returns:
* {<OpenLayers.Rule>} rule representing the filter
*/
parseFilter: function(xmlNode) {
// ogc:FeatureId filter
var filter = this.getNodeOrChildrenByTagName(xmlNode, "FeatureId");
if (filter) {
var rule = new OpenLayers.Rule.FeatureId();
for (var i=0; i<filter.length; i++) {
rule.fids.push(filter[i].getAttribute("fid"));
}
return rule;
}
// ogc:And filter
filter = this.getNodeOrChildrenByTagName(xmlNode, "And");
if (filter) {
var rule = new OpenLayers.Rule.Logical(
{type: OpenLayers.Rule.Logical.AND});
var filters = filter[0].childNodes;
for (var i=0; i<filters.length; i++) {
if (filters[i].nodeType == 1) {
rule.children.push(this.parseFilter(filters[i]));
}
}
return rule;
}
// ogc:Or filter
filter = this.getNodeOrChildrenByTagName(xmlNode, "Or");
if (filter) {
var rule = new OpenLayers.Rule.Logical(
{type: OpenLayers.Rule.Logical.OR})
var filters = filter[0].childNodes;
for (var i=0; i<filters.length; i++) {
if (filters[i].nodeType == 1) {
rule.children.push(this.parseFilter(filters[i]));
}
}
return rule;
}
// ogc:Not filter
filter = this.getNodeOrChildrenByTagName(xmlNode, "Not");
if (filter) {
var rule = new OpenLayers.Rule.Logical(
{type: OpenLayers.Rule.Logical.NOT});
rule.children.push(this.parseFilter(filter[0]));
return rule;
}
// Comparison filters
for (var type in this.TYPES) {
var filter = this.getNodeOrChildrenByTagName(xmlNode, type);
if (filter) {
filter = filter[0];
var rule = new OpenLayers.Rule.Comparison({
type: OpenLayers.Rule.Comparison[this.TYPES[type]],
property: this.parseProperty(
filter, this.ogcns, "PropertyName")});
// ogc:PropertyIsBetween
if (this.TYPES[type] == "BETWEEN") {
rule.lowerBoundary = this.parseProperty(
filter, this.ogcns, "LowerBoundary");
rule.upperBoudary = this.parseProperty(
filter, this.ogcns, "UpperBoundary");
} else {
rule.value = this.parseProperty(
filter, this.ogcns, "Literal");
// ogc:PropertyIsLike
if (this.TYPES[type] == "LIKE") {
var wildCard = filter.getAttribute("wildCard");
var singleChar = filter.getAttribute("singleChar");
var escape = filter.getAttribute("escape");
rule.value2regex(wildCard, singleChar, escape);
}
}
return rule;
}
}
// if we get here, the filter was empty
return new OpenLayers.Rule();
},
/**
* Method: getNodeOrChildrenByTagName
* Convenience method to get a node or its child nodes, but only
* those matching a tag name.
*
* Returns:
* {Array(<DOMElement>)} or null if no matching content is found
*/
getNodeOrChildrenByTagName: function(xmlNode, tagName) {
var nodeName = (xmlNode.prefix) ?
xmlNode.nodeName.split(":")[1] :
xmlNode.nodeName;
if (nodeName == tagName) {
return [xmlNode];
} else {
var nodelist = this.getElementsByTagNameNS(
xmlNode, this.ogcns, tagName);
}
// make a new list which only contains matching child nodes
if (nodelist.length > 0) {
var node;
var list = [];
for (var i=0; i<nodelist.length; i++) {
node = nodelist[i];
if (node.parentNode == xmlNode) {
list.push(node);
}
}
return list.length > 0 ? list : null;
}
return null;
},
/**
* Method: parseProperty
* Convenience method to parse the different kinds of properties
* found in the sld and ogc namespace.
*
* Parses an ogc node that can either contain a value directly,
* or inside a <Literal> property. The parsing can also be limited
* to nodes with certain attribute names and/or values.
*
* Parameters:
* xmlNode - {<DOMElement>}
* namespace - {String} namespace of the node to find
* propertyName - {String} name of the property to parse
* attributeName - {String} optional name of the property to match
* attributeValue - {String} optional value of the specified attribute
*
* Returns:
* {String} The value for the requested property.
*/
parseProperty: function(xmlNode, namespace, propertyName, attributeName,
attributeValue) {
var result = null;
var propertyNodeList = this.getElementsByTagNameNS(
xmlNode, namespace, propertyName);
if (propertyNodeList && propertyNodeList.length > 0) {
var propertyNode = attributeName ?
this.getNodeWithAttribute(propertyNodeList,
attributeName) :
propertyNodeList[0];
// strip namespace from attribute name for Opera browsers
if (window.opera && attributeName) {
var nsDelimiterPos = attributeName.indexOf(":");
if (nsDelimiterPos != -1) {
attributeName = attributeName.substring(++nsDelimiterPos);
}
}
// get the property value from the node matching attributeName
// and attributeValue, eg.:
// <CssParameter name="stroke">
// <ogc:Literal>red</ogc:Literal>
// </CssParameter>
// or:
// <CssParameter name="stroke">red</CssParameter>
if (attributeName && attributeValue) {
propertyNode = this.getNodeWithAttribute(propertyNodeList,
attributeName, attributeValue);
result = this.parseParameter(propertyNode);
}
// get the attribute value and use it as result, eg.:
// <sld:OnlineResource xlink:href="../img/marker.png"/>
if (attributeName && !attributeValue) {
var propertyNode = this.getNodeWithAttribute(propertyNodeList,
attributeName);
result = propertyNode.getAttribute(attributeName);
}
// get the property value directly or from an ogc:propertyName,
// ogc:Literal or any other property at the level of the property
// node, eg.:
// <sld:Opacity>0.5</sld:Opacity>
if (!attributeName) {
var result = this.parseParameter(propertyNode);
}
}
// adjust the result to be a trimmed string or a number
if (result) {
result = OpenLayers.String.trim(result);
if (!isNaN(result)) {
result = parseFloat(result);
}
}
return result;
},
/**
* Method: parseParameter
* parses a property for propertyNames, Literals and textContent and
* creates the according value string.
*
* Parameters:
* xmlNode - {<DOMElement>}
*
* Returns:
* {String} a string holding a value suitable for OpenLayers.Style.value
*/
parseParameter: function(xmlNode) {
if (!xmlNode) {
return null;
}
var childNodes = xmlNode.childNodes;
if (!childNodes) {
return null;
}
var value = new Array(childNodes.length);
for (var i=0; i<childNodes.length; i++) {
if (childNodes[i].nodeName.indexOf("Literal") != -1) {
value[i] = this.getChildValue(childNodes[i]);
} else
if (childNodes[i].nodeName.indexOf("propertyName") != -1) {
value[i] = "${" + this.getChildValue(childNodes[i]) + "}";
} else
if (childNodes[i].nodeType == 3) {
value[i] = childNodes[i].text || childNodes[i].textContent;
}
}
return value.join("");
},
/**
* Method: getNodeWithAttribute
* Walks through a list of xml nodes and returns the fist node that has an
* attribute with the name and optional value specified.
*
* Parameters:
* xmlNodeList - {Array(<DOMElement>)} list to search
* attributeName - {String} name of the attribute to match
* attributeValue - {String} optional value of the attribute
*/
getNodeWithAttribute: function(xmlNodeList, attributeName, attributeValue) {
for (var i=0; i<xmlNodeList.length; i++) {
var currentAttributeValue =
xmlNodeList[i].getAttribute(attributeName);
if (currentAttributeValue) {
if (!attributeValue) {
return xmlNodeList[i];
} else if (currentAttributeValue == attributeValue) {
return xmlNodeList[i];
}
}
}
},
/**
* Constant: TYPES
* {Object} Mapping between SLD rule names and rule type constants.
*
*/
TYPES: {'PropertyIsEqualTo': 'EQUAL_TO',
'PropertyIsNotEqualTo': 'NOT_EQUAL_TO',
'PropertyIsLessThan': 'LESS_THAN',
'PropertyIsGreaterThan': 'GREATER_THAN',
'PropertyIsLessThanOrEqualTo': 'LESS_THAN_OR_EQUAL_TO',
'PropertyIsGreaterThanOrEqualTo': 'GREATER_THAN_OR_EQUAL_TO',
'PropertyIsBetween': 'BETWEEN',
'PropertyIsLike': 'LIKE'},
CLASS_NAME: "OpenLayers.Format.SLD"
});

View File

@@ -0,0 +1,37 @@
<html>
<head>
<script src="../../lib/OpenLayers.js"></script>
<script type="text/javascript">
var test_content = '<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><sld:NamedLayer><sld:Name>TestLayer</sld:Name><sld:UserStyle><sld:Name>foo</sld:Name><sld:FeatureTypeStyle><sld:Rule><sld:Name>bar</sld:Name><ogc:Filter></ogc:Filter><sld:PolygonSymbolizer><sld:Fill><sld:CssParameter name="fill"><ogc:Literal>blue</ogc:Literal></sld:CssParameter></sld:Fill></sld:PolygonSymbolizer></sld:Rule></sld:FeatureTypeStyle></sld:UserStyle></sld:NamedLayer></sld:StyledLayerDescriptor>';
function test_Format_SLD_constructor(t) {
t.plan(3);
var options = {'foo': 'bar'};
var format = new OpenLayers.Format.SLD(options);
t.ok(format instanceof OpenLayers.Format.SLD,
"new OpenLayers.Format.SLD returns object" );
t.eq(format.foo, "bar", "constructor sets options correctly");
t.eq(typeof format.read, "function", "format has a read function");
}
function test_Format_SLD_read(t) {
t.plan(5);
var styles = new OpenLayers.Format.SLD().read(this.test_content,
{withNamedLayer: true});
var testLayer = styles[1].TestLayer;
t.ok(testLayer.foo != undefined, "SLD correctly reads a UserStyle named \"foo\"");
t.eq(testLayer.foo.rules.length, 1, "The number of rules for the UserStyle is correct");
t.eq(testLayer.foo.rules[0].name, "bar", "The first rule's name is \"bar\"");
t.eq(testLayer.foo.rules[0].symbolizer.Polygon.fillColor, "blue", "The fillColor for the Polygon symbolizer is correct");
t.eq(testLayer.foo.name, styles[0][0].name, "The content hash of the Format contains the correct rules.");
}
</script>
</head>
<body>
</body>
</html>

View File

@@ -22,6 +22,7 @@
<li>test_Format.html</li>
<li>Format/test_XML.html</li>
<li>Format/test_KML.html</li>
<li>Format/test_SLD.html</li>
<li>Format/test_GeoRSS.html</li>
<li>Format/test_JSON.html</li>
<li>Format/test_GeoJSON.html</li>