我有包含Polygon Grid.I属性的网格shapefile。我导入到GeoServer并创建了网格图层。对于图层的样式,我创建了带有LabelPlacement的SLD文件,其中包含锚点X和Y标记的位置显示在多边形的中间。它工作正常。 以下是SLD风格:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- a Named Layer is the basic building block of an SLD document -->
<NamedLayer>
<Name>default_polygon</Name>
<UserStyle>
<!-- Styles can have names, titles and abstracts -->
<Title>Default Polygon</Title>
<Abstract>A sample style that draws a polygon</Abstract>
<!-- FeatureTypeStyles describe how to render different features -->
<!-- A FeatureTypeStyle for rendering polygons -->
<FeatureTypeStyle>
<Rule>
<Name>rule1</Name>
<Title>Gray Polygon with Black Outline</Title>
<Abstract>A polygon with a gray fill and a 1 pixel black outline</Abstract>
<PolygonSymbolizer>
<Stroke>
<CssParameter name="stroke">#0000FF</CssParameter>
<CssParameter name="stroke-width">1.5</CssParameter>
</Stroke>
</PolygonSymbolizer>
<TextSymbolizer>
<Label>
0<ogc:PropertyName>TWP</ogc:PropertyName>-0<ogc:PropertyName>RGE</ogc:PropertyName>W<ogc:PropertyName>M</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>
<!--
<Displacement>
<DisplacementX>25</DisplacementX>
<DisplacementY>0</DisplacementY>
</Displacement>
-->
<Fill>
<CssParameter name="fill">#0000FF</CssParameter>
</Fill>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
获得输出是:
但是如何从图层属性中仅为网格的外边界指定标签水平和垂直。我想要像以下图像一样标记:
我试过标签Displacement和AnchorPoint。不知道如何创建(水平和垂直标签)。
请,任何帮助。
答案 0 :(得分:1)
这很难(也可能是不可能的),GeoServer会尝试(默认情况下)在其中心(或指定的几何体)标记每个要素,因此您首先需要设计一个过滤器,强制它仅标记要素在地图的边缘。您可能希望使用predefined variable wms_bbox
,它会为您提供地图外部的位置。
接下来,您需要计算标签的位置,这将是您要标记的要素与wms边界框之间的某种交集。在这里,您需要确定您是在顶部,底部,左侧还是右侧,并相应地调整标签位置。为此,您可以使用functions个范围。我怀疑您需要if_then_else
和env
函数来获取上面的边界框变量以及spatial functions以确定您的位置,最后创建geometric functions新几何。
前一段时间geoserver-user的邮件列表上有一个discussion,这个question on gis.stackexchange.com是相关的,但我不认为其中任何一个都能得出一个好的结论。