3

OPENLAYERS + GEOSERVER + JAVASCRIPT + SERVLET+AJAXを使用

ajax呼び出しを受信し、すべての国の人口を返すサーブレットがあります。人口が50,000人未満の国ではWMSレイヤーが赤色で表示され、人口が50,000人を超える国では緑色が表示されるようにSLDを追加したいと思います。したがって、最終的には、ajax呼び出しから取得した結果に従って、JavaScriptでWMSレイヤーのSLDスタイルを設計したいと思います。JavaScriptでSLDを適用することは可能ですか?その場合、plzはサンプルコードを提供します。しばらくお待ちいただきますようお願いいたします。

4

1 に答える 1

5

自分で試したことはありませんが、次のように機能します。

まず、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);

もちろん、これで既存のレイヤーを更新する必要がある場合は、最初に古いレイヤーを削除する必要があります。

于 2013-01-07T10:42:34.137 に答える