O suporte ao rótulo “shield” do GeoTools já permite reunir um gráfico junto com um rótulo, com o objetivo de oferecer suporte ao escudo de etiqueta rodoviária. O GeoServer 2.17.0 inclui a capacidade de organizá-los separadamente, para que a marca e os rótulos não fiquem centralizados um no outro, mas, por exemplo, um acima do outro. Isso permite configurar marcadores de ponto que aparecem apenas enquanto o rótulo também aparece, veja:
Também é possível a partir de agora configurar uma cor de fundo (os MapServer maníacos agradecem) para o mapa no nível do estilo, usando um novo elemento chamado Background na propriedade UserStyle, veja:
<?xml version="1.0" encoding="UTF-8"?><sld:StyledLayerDescriptor 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" version="1.0.0"> <sld:NamedLayer> <sld:Name>Sea color background</sld:Name> <sld:UserStyle> <sld:Name>Background sample</sld:Name> <sld:Background> <sld:CssParameter name="fill">#F2EFE9</sld:CssParameter> </sld:Background> <sld:FeatureTypeStyle> <sld:Rule> ... </sld:Rule> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor>
O resultado do código acima pode ser visto através da imagem abaixo:
Tradicionalmente, já é possível renderizar rótulos com vários scripts, especificando uma longa lista de “família de fontes”, por exemplo:
<sld:Font> <sld:CssParameter name="font-family">Noto Sans Regular</sld:CssParameter> <sld:CssParameter name="font-family">Noto Sans Adlam Regular</sld:CssParameter> <sld:CssParameter name="font-family">Noto Sans Adlam Unjoined Regular</sld:CssParameter> <sld:CssParameter name="font-family">Noto Sans Armenian Regular</sld:CssParameter> <sld:CssParameter name="font-family">Noto Sans Balinese Regular</sld:CssParameter> ... </sld:Font>
Se todos os nomes de fontes compartilham um prefixo comum, agora é possível ser mais conciso e usar apenas uma função, especificando o nome base comum, permitindo que o GeoServer encontre todas as variantes possíveis, por exemplo:
<sld:Font> <sld:CssParameter name="font-family"> <ogc:Function name="fontAlternatives"> <ogc:Literal>Noto Sans</ogc:Literal> </ogc:Function> </sld:CssParameter> ... </sld:Font>
Como um recurso adicional relacionado à rotulagem, agora pode-se tentar reduzir o tamanho dos rótulos em busca de um local para ajustá-los. A nova opção é chamada “fontShrinkSizeMin” e representa o tamanho mínimo a ser usado. Aqui está um exemplo, os dois polígonos compartilham a mesma definição do TextSymbolizer, em que o tamanho do rótulo foi reduzido para permitir que o rótulo se encaixe ao polígono:
Passando para os simbolizadores de linha, agora é possível fazer uma marca linear ao longo de uma linha. Antes, era apenas possível repeti-la ao longo de uma linha, mas a saída não parecia contínua, especialmente nas curvas. Agora, se você tem uma marca que começa e termina na mesma altura, ela pode literalmente ser tornada contínua ao longo da linha, por exemplo, usando este estilo:
<LineSymbolizer> <Stroke> <GraphicStroke> <Graphic> <Mark> <WellKnownName>wkt://LINESTRING (0 0, 0 -0.5, 0.5 -0.5, 0.5 0.5, 1 0.5, 1 0)</WellKnownName> <Stroke> <CssParameter name="stroke">0xFF0000 </CssParameter> <CssParameter name="stroke-width">2</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke> </Mark> <Size>20</Size> </Graphic> </GraphicStroke> </Stroke> <VendorOption name="markAlongLine">true</VendorOption> </LineSymbolizer>
No resultados abaixo você pode não vê-lo a princípio, mas o tamanho da marca (mark) pode ser ligeiramente alterado para se ajustar ao comprimento dos segmentos e, se não for suficiente, é cortado e reconectado)
Para finalizar este post, além das melhorias citadas acima houveram várias pequenas melhorias no desempenho da renderização, que serão especialmente visíveis ao renderizar um mapa complexo, com muitas regras, recursos a serem renderizados e rótulos (como o OpenStreetMap).