自分で試したことはありませんが、次のように機能します。
まず、jsコードでSLDを定義します
var sld = '<?xml version="1.0" encoding="ISO-8859-1"?>';
sld += '<StyledLayerDescriptor version="1.0.0"';
sld += ' xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" ';
sld += ' xmlns="http://www.opengis.net/sld" ';
sld += ' xmlns:ogc="http://www.opengis.net/ogc" ';
sld += ' xmlns:xlink="http://www.w3.org/1999/xlink" ';
sld += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">';
sld += ' <NamedLayer>';
sld += ' <Name>Attribute-based polygon</Name>';
sld += ' <UserStyle>';
sld += ' <Title>SLD Cook Book: Attribute-based polygon</Title>';
sld += ' <FeatureTypeStyle>';
sld += ' <Rule>';
sld += ' <Name>SmallPop</Name>';
sld += ' <Title>Less Than 200,000</Title>';
sld += ' <ogc:Filter>';
sld += ' <ogc:PropertyIsLessThan>';
sld += ' <ogc:PropertyName>pop</ogc:PropertyName>';
sld += ' <ogc:Literal>200000</ogc:Literal>';
sld += ' </ogc:PropertyIsLessThan>';
sld += ' </ogc:Filter>';
sld += ' <PolygonSymbolizer>';
sld += ' <Fill>';
sld += ' <CssParameter name="fill">#66FF66</CssParameter>';
sld += ' </Fill>';
sld += ' </PolygonSymbolizer>';
sld += ' </Rule>';
sld += ' <Rule>';
sld += ' <Name>MediumPop</Name>';
sld += ' <Title>200,000 to 500,000</Title>';
sld += ' <ogc:Filter>';
sld += ' <ogc:And>';
sld += ' <ogc:PropertyIsGreaterThanOrEqualTo>';
sld += ' <ogc:PropertyName>pop</ogc:PropertyName>';
sld += ' <ogc:Literal>200000</ogc:Literal>';
sld += ' </ogc:PropertyIsGreaterThanOrEqualTo>';
sld += ' <ogc:PropertyIsLessThan>';
sld += ' <ogc:PropertyName>pop</ogc:PropertyName>';
sld += ' <ogc:Literal>500000</ogc:Literal>';
sld += ' </ogc:PropertyIsLessThan>';
sld += ' </ogc:And>';
sld += ' </ogc:Filter>';
sld += ' <PolygonSymbolizer>';
sld += ' <Fill>';
sld += ' <CssParameter name="fill">#33CC33</CssParameter>';
sld += ' </Fill>';
sld += ' </PolygonSymbolizer>';
sld += ' </Rule>';
sld += ' <Rule>';
sld += ' <Name>LargePop</Name>';
sld += ' <Title>Greater Than 500,000</Title>';
sld += ' <ogc:Filter>';
sld += ' <ogc:PropertyIsGreaterThan>';
sld += ' <ogc:PropertyName>pop</ogc:PropertyName>';
sld += ' <ogc:Literal>500000</ogc:Literal>';
sld += ' </ogc:PropertyIsGreaterThan>';
sld += ' </ogc:Filter>';
sld += ' <PolygonSymbolizer>';
sld += ' <Fill>';
sld += ' <CssParameter name="fill">#009900</CssParameter>';
sld += ' </Fill>';
sld += ' </PolygonSymbolizer>';
sld += ' </Rule>';
sld += ' </FeatureTypeStyle>';
sld += ' </UserStyle>';
sld += ' </NamedLayer>';
sld += '</StyledLayerDescriptor>';
これは、GeoserverSLDクックブックから引用したものです。GeoserverSLDクックブックはこの種のものに非常に適したサイトです。データ(レイヤー名、データプロパティなど)に応じてSLDを変更することを忘れないでください。クックブックでは、データがどのように表示されるかを確認することもできます。
SLDを定義したら、それを使用して新しいWMSレイヤーを作成するだけです。
newWmsLayer = new OpenLayers.Layer.WMS.Post(layerName, wmsUrl,
{
layers: layerName,
sld_body: sld
});
そして最後にそれを地図に追加します:
map.addLayer(newWmsLayer);
もちろん、これで既存のレイヤーを更新する必要がある場合は、最初に古いレイヤーを削除する必要があります。