我写了一些SLD代码来设置地图图层的样式,该图层存储在GeoServer中。 SLD的GeoServer输入窗口没有显示任何错误消息,但是当我在OpenLayers中打开地图时,它没有按我的意愿显示地图。 在这种情况下,我的意图是为国家/地区多边形上色类似于安全级别的颜色,该颜色在我的postgres数据库中为小数,因此最终危险区域应为红色,安全区域应为绿色。
我的代码:
<!-- Template taken from: http://docs.geoserver.org/stable/en/user/styling/sld/cookbook/polygons.html#attribute-based-polygon -->
<?xml version="1.0" encoding="UTF-8"?>
<sld:UserStyle xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml">
<sld:Title/>
<FeatureTypeStyle>
<Rule>
<Name>HighRisk</Name>
<Title>WGI < -0.5</Title>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>wgi</ogc:PropertyName>
<ogc:Literal>-0.5</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#fc8d59</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<Rule>
<Name>MediumRisk</Name>
<Title>WGI > -0.5 und < 0.5</Title>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>wgi</ogc:PropertyName>
<ogc:Literal>-0.5</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>wgi</ogc:PropertyName>
<ogc:Literal>0.5</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#ffffbf</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<Rule>
<Name>LowRisk</Name>
<Title>WGI > 0.5</Title>
<ogc:Filter>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>WGI</ogc:PropertyName>
<ogc:Literal>0.5</ogc:Literal>
</ogc:PropertyIsGreaterThan>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#91cf60</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<Rule>
<Title>Boundary</Title>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke-width">0.2</CssParameter>
<CssParameter name="stroke">#e2e2e2</CssParameter>
</Stroke>
</LineSymbolizer>
<TextSymbolizer>
<Label>
<ogc:PropertyName>STATE_ABBR</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Times New Roman</CssParameter>
<CssParameter name="font-style">Normal</CssParameter>
<CssParameter name="font-size">14</CssParameter>
</Font>
<LabelPlacement>
<PointPlacement>
<AnchorPoint>
<AnchorPointX>-0.5</AnchorPointX>
<AnchorPointY>0.5</AnchorPointY>
</AnchorPoint>
</PointPlacement>
</LabelPlacement>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</sld:UserStyle>
不幸的是,到目前为止,我的地图是这样的:
感谢您的帮助和提示!
答案 0 :(得分:1)
首先,在我的情况下,您的SLD无法在我的GeoServer上正确验证。
您都缺少所有周围的 StyledLayerDescriptor 标签和 UserStyle 附近的 NamedLayer 标签。另外, sld:Title 的结束标记不是必需的,可能会使解释器后面出现一些错误。
好像GeoServer还原为默认样式,即灰色填充和黑色笔划。
我认为您的SLD应该是这样的,GeoServer会对其进行正确验证,甚至可以为此创建图例。
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>A named Layer</Name>
<UserStyle>
<Title>Dangerous and safe regions</Title>
<FeatureTypeStyle>
<Rule>
<Name>HighRisk</Name>
<Title>WGI < -0.5</Title>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>wgi</ogc:PropertyName>
<ogc:Literal>-0.5</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#fc8d59</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<Rule>
<Name>MediumRisk</Name>
<Title>WGI > -0.5 und < 0.5</Title>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>wgi</ogc:PropertyName>
<ogc:Literal>-0.5</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>wgi</ogc:PropertyName>
<ogc:Literal>0.5</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#ffffbf</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<Rule>
<Name>LowRisk</Name>
<Title>WGI > 0.5</Title>
<ogc:Filter>
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>WGI</ogc:PropertyName>
<ogc:Literal>0.5</ogc:Literal>
</ogc:PropertyIsGreaterThan>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#91cf60</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
<Rule>
<Title>Boundary</Title>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke-width">0.2</CssParameter>
<CssParameter name="stroke">#e2e2e2</CssParameter>
</Stroke>
</LineSymbolizer>
<TextSymbolizer>
<Label>
<ogc:PropertyName>STATE_ABBR</ogc:PropertyName>
</Label>
<Font>
<CssParameter name="font-family">Times New Roman</CssParameter>
<CssParameter name="font-style">Normal</CssParameter>
<CssParameter name="font-size">14</CssParameter>
</Font>
<LabelPlacement>
<PointPlacement>
<AnchorPoint>
<AnchorPointX>-0.5</AnchorPointX>
<AnchorPointY>0.5</AnchorPointY>
</AnchorPoint>
</PointPlacement>
</LabelPlacement>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
还请确保在GeoServer本身中将图层的样式设置为默认样式,或在OpenLayers正在创建的请求中发送样式-参数。
希望我在这里提供了帮助,如果我做错了或者似乎也不起作用,请告诉我。