Вам нужно добавить TextSymbolizer
к вашему стилю, чтобы нарисовать текст.
Style style = SLD.createPointStyle("square", Color.red, Color.red, 1.0f, 8.0f);
StyleBuilder styleBuilder = new StyleBuilder();
String attributeName = "name";
Font font = styleBuilder.createFont("Times New Roman", 10.0);
TextSymbolizer textSymb = styleBuilder.createTextSymbolizer(Color.black, font, attributeName);
Rule rule = styleBuilder.createRule(textSymb);
style.featureTypeStyles().get(0).rules().add(rule);
должен это сделать. Ключевая строка - TextSymbolizer textSymb = styleBuilder.createTextSymbolizer(Color.black, font, attributeName);
, которая создает символизатор с использованием Black
в качестве цвета текста, font
в качестве используемого шрифта (это должен быть шрифт на вашем компьютере), и, наконец, attributeName
- это столбец данных (атрибут) это должно быть использовано для создания метки. Если вместо этого вам нужна фиксированная строка, вы можете использовать styleBuilder.createStaticTextSymbolizer
, который просто использует последний параметр в качестве текста метки.
В общем случае для реального кода лучше использовать StyleBuilder
, а не SLD
методы для полного контроля над вашим стилем. Внутренне стили GeoTools представлены в виде дескрипторов слоя в стиле OGC (SLD), так что SLD Cookbook может оказаться полезным. Я также регулярно использую этот метод при отладке.
private static void printStyle(Style style) throws TransformerException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(style, bos);
String styleStr = bos.toString();
System.out.println(styleStr);
}
Который напечатает это для вышеуказанного кода:
<?xml version="1.0" encoding="UTF-8"?><sld:UserStyle xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc">
<sld:Name>Default Styler</sld:Name>
<sld:FeatureTypeStyle>
<sld:Name>name</sld:Name>
<sld:Rule>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:Mark>
<sld:Fill>
<sld:CssParameter name="fill">#FF0000</sld:CssParameter>
</sld:Fill>
<sld:Stroke>
<sld:CssParameter name="stroke">#FF0000</sld:CssParameter>
</sld:Stroke>
</sld:Mark>
<sld:Size>8.0</sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
<sld:Rule>
<sld:TextSymbolizer>
<sld:Label>
<ogc:PropertyName>name</ogc:PropertyName>
</sld:Label>
<sld:Font>
<sld:CssParameter name="font-family">Times New Roman</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.0</sld:AnchorPointX>
<sld:AnchorPointY>0.5</sld:AnchorPointY>
</sld:AnchorPoint>
</sld:PointPlacement>
</sld:LabelPlacement>
<sld:Fill>
<sld:CssParameter name="fill">#000000</sld:CssParameter>
</sld:Fill>
</sld:TextSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>