geoserver在生成多边形标签的时候,同一个多边形的标签有可能会出现多次,解决这个问题可以使用多边形的质心功能,将多边形的标签固定到该多边形的质心上,关于质心的官方介绍:
Name | Arguments | Description |
---|---|---|
centroid | geometry:Geometry | Returns the centroid of the geometry. Can be often used as a label point for polygons, though there is no guarantee it will actually lie inside the geometry |
<FeatureTypeStyle>
<Rule>
<Title>yellow polygon</Title>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#1f2f47</CssParameter>
</Fill> <!-- 多边形内填充的颜色 -->
<Stroke>
<CssParameter name="stroke">#038bc0</CssParameter><!-- 边界线条颜色 -->
<CssParameter name="stroke-width">0.5</CssParameter><!-- 边界线条宽度 -->
</Stroke>
</PolygonSymbolizer>
<TextSymbolizer>
<Geometry>
<ogc:Function name="centroid">
<ogc:PropertyName>the_geom</ogc:PropertyName><!-- 多边形图形字段名 -->
</ogc:Function>
</Geometry>
<Label>
<ogc:PropertyName>NAME</ogc:PropertyName><!-- 显示的标签字段名 -->
</Label>
<Font>
<CssParameter name="font-family">微软雅黑</CssParameter><!-- 字体 -->
<CssParameter name="font-weight">Bold</CssParameter><!-- 粗体 -->
<CssParameter name="font-size">11</CssParameter><!-- 字体大小 -->
</Font>
<LabelPlacement>
<PointPlacement>
<AnchorPoint>
<AnchorPointX>0.5</AnchorPointX>
<AnchorPointY>0.5</AnchorPointY>
</AnchorPoint>
<Displacement>
<DisplacementX>0</DisplacementX>
<DisplacementY>0</DisplacementY>
</Displacement>
</PointPlacement>
</LabelPlacement>
<Fill>
<CssParameter name="fill">#f4e925</CssParameter> <!-- 字体颜色 -->
</Fill>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
关键的代码就是这块:
<Geometry>
<ogc:Function name="centroid">
<ogc:PropertyName>the_geom</ogc:PropertyName><!-- 多边形图形字段名 -->
</ogc:Function>
</Geometry>
效果如图显示:
注意:
1,如果多边形包含多个闭合的子多边形,则每个子多边形的质心都会有一个标签
2,如果多边形的质心在多边形外,则标签也会显示到多边形外