geoserver是应用很广的地图服务器,但是如何在geoserver中设置随着比例尺变化而变化的地图样式呢?这就要自己写geoserver的sld了 。
下面的样式是为室内地图的面要素设置的,该面要素的label标签会随着比例尺的变化而改变字体,且该label标签会根据图层的lblrotate属性进行旋转。在sld样式中添加了一个
<sld:VendorOption name="spaceAround">-5</sld:VendorOption>
属性,该属性是设置label的外包举行是否允许重叠的,设置为负值为允许重叠。
<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor 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" version="1.0.0"> <sld:UserLayer> <sld:LayerFeatureConstraints> <sld:FeatureTypeConstraint/> </sld:LayerFeatureConstraints> <sld:UserStyle> <sld:Name>tingchewei</sld:Name> <sld:FeatureTypeStyle> <sld:Name>group 0</sld:Name> <sld:FeatureTypeName>Feature</sld:FeatureTypeName> <sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier> <sld:SemanticTypeIdentifier>simple</sld:SemanticTypeIdentifier> <sld:Rule> <sld:Name>Large</sld:Name> <sld:MaxScaleDenominator>200.0</sld:MaxScaleDenominator> <sld:PolygonSymbolizer> <sld:Fill> <sld:CssParameter name="fill">#FFE7A6</sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#E8D1AE</sld:CssParameter> <sld:CssParameter name="stroke-width">0.2</sld:CssParameter> </sld:Stroke> </sld:PolygonSymbolizer> <sld:TextSymbolizer> <sld:Label> <ogc:PropertyName>number</ogc:PropertyName> </sld:Label> <sld:Font> <sld:CssParameter name="font-family">Arial</sld:CssParameter> <sld:CssParameter name="font-size">12.0</sld:CssParameter> <sld:CssParameter name="font-style">normal</sld:CssParameter> <sld:CssParameter name="font-weight">normal</sld:CssParameter> </sld:Font> <sld:LabelPlacement> <sld:PointPlacement> <sld:AnchorPoint> <sld:AnchorPointX>0.5</sld:AnchorPointX> <sld:AnchorPointY>0.5</sld:AnchorPointY> </sld:AnchorPoint> <sld:Displacement> <sld:DisplacementX>0.0</sld:DisplacementX> <sld:DisplacementY>0.0</sld:DisplacementY> </sld:Displacement> <sld:Rotation> <ogc:PropertyName>lblrotate</ogc:PropertyName> </sld:Rotation> </sld:PointPlacement> </sld:LabelPlacement> <sld:Fill> <sld:CssParameter name="fill">#404040</sld:CssParameter> </sld:Fill> <sld:VendorOption name="maxDisplacement">0</sld:VendorOption> <sld:VendorOption name="spaceAround">-5</sld:VendorOption> </sld:TextSymbolizer> </sld:Rule> <sld:Rule> <sld:Name>small</sld:Name> <sld:MinScaleDenominator>200.0</sld:MinScaleDenominator> <sld:MaxScaleDenominator>400.0</sld:MaxScaleDenominator> <sld:PolygonSymbolizer> <sld:Fill> <sld:CssParameter name="fill">#FFE7A6</sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#E8D1AE</sld:CssParameter> <sld:CssParameter name="stroke-width">0.2</sld:CssParameter> </sld:Stroke> </sld:PolygonSymbolizer> <sld:TextSymbolizer> <sld:Label> <ogc:PropertyName>number</ogc:PropertyName> </sld:Label> <sld:Font> <sld:CssParameter name="font-family">Arial</sld:CssParameter> <sld:CssParameter name="font-size">10.0</sld:CssParameter> <sld:CssParameter name="font-style">normal</sld:CssParameter> <sld:CssParameter name="font-weight">normal</sld:CssParameter> </sld:Font> <sld:LabelPlacement> <sld:PointPlacement> <sld:AnchorPoint> <sld:AnchorPointX>0.5</sld:AnchorPointX> <sld:AnchorPointY>0.5</sld:AnchorPointY> </sld:AnchorPoint> <sld:Displacement> <sld:DisplacementX>0.0</sld:DisplacementX> <sld:DisplacementY>0.0</sld:DisplacementY> </sld:Displacement> <sld:Rotation> <ogc:PropertyName>lblrotate</ogc:PropertyName> </sld:Rotation> </sld:PointPlacement> </sld:LabelPlacement> <sld:Fill> <sld:CssParameter name="fill">#404040</sld:CssParameter> </sld:Fill> <sld:VendorOption name="maxDisplacement">0</sld:VendorOption> <sld:VendorOption name="spaceAround">-5</sld:VendorOption> </sld:TextSymbolizer> </sld:Rule> <sld:Rule> <sld:Name>medium</sld:Name> <sld:MinScaleDenominator>400.0</sld:MinScaleDenominator> <sld:MaxScaleDenominator>600.0</sld:MaxScaleDenominator> <sld:PolygonSymbolizer> <sld:Fill> <sld:CssParameter name="fill">#FFE7A6</sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#E8D1AE</sld:CssParameter> <sld:CssParameter name="stroke-width">0.2</sld:CssParameter> </sld:Stroke> </sld:PolygonSymbolizer> <sld:TextSymbolizer> <sld:Label> <ogc:PropertyName>number</ogc:PropertyName> </sld:Label> <sld:Font> <sld:CssParameter name="font-family">Arial</sld:CssParameter> <sld:CssParameter name="font-size">6.0</sld:CssParameter> <sld:CssParameter name="font-style">normal</sld:CssParameter> <sld:CssParameter name="font-weight">normal</sld:CssParameter> </sld:Font> <sld:LabelPlacement> <sld:PointPlacement> <sld:AnchorPoint> <sld:AnchorPointX>0.5</sld:AnchorPointX> <sld:AnchorPointY>0.5</sld:AnchorPointY> </sld:AnchorPoint> <sld:Displacement> <sld:DisplacementX>0.0</sld:DisplacementX> <sld:DisplacementY>0.0</sld:DisplacementY> </sld:Displacement> <sld:Rotation> <ogc:PropertyName>lblrotate</ogc:PropertyName> </sld:Rotation> </sld:PointPlacement> </sld:LabelPlacement> <sld:Fill> <sld:CssParameter name="fill">#404040</sld:CssParameter> </sld:Fill> <sld:VendorOption name="maxDisplacement">0</sld:VendorOption> <sld:VendorOption name="spaceAround">-5</sld:VendorOption> </sld:TextSymbolizer> </sld:Rule> <sld:Rule> <sld:Name>Smallest</sld:Name> <sld:MinScaleDenominator>600.0</sld:MinScaleDenominator> <sld:PolygonSymbolizer> <sld:Fill> <sld:CssParameter name="fill">#FFE7A6</sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#E8D1AE</sld:CssParameter> <sld:CssParameter name="stroke-width">0.2</sld:CssParameter> </sld:Stroke> </sld:PolygonSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:UserLayer> </sld:StyledLayerDescriptor>