Boa noite pessoal,
Hoje eu e o pessoal aqui da empresa se batemos um tempo para conseguir fazer uma layer que tivesse a projeção de diversas propriedades (pontos XY de localização) e que a cor dos pontos fosse determinada por algum atributo que gerasse uma cor de acordo com a instituição pertencente, exemplo: as propriedades da instituição Exemplo 01 teriam o ponto no mapa na cor amarela, as propriedades da instituição Exemplo 02 teriam os pontos vermelhos, etc.
Bom, depois de muito pesquisar, acabei achando uma página explicando sobre as funções o OGC no Geoserver, esse namespace contém diversas funções, mais ou menos no estilo da JSTL do JSP. Esse namespace permitia dentro de uma função, acessar uma propriedade (campo) da tabela do banco em que a layer está conectada ou senão da respectiva view do banco, assim eu removi o único modo até então encontrado, a rule usando betweens.
Na aplicação que possui a base de dados, adicionamos um novo campo no cadastro de instituições onde o usuário pode selecionar uma cor qualquer em um color picker do jQuery UI, esse campo é persistido como uma String normal e deixamos um valor padrão como vermelho (#990000). Já no Geoserver, tivemos que fazer as seguintes configurações:
Configuração do Style
A configuração do style, inicialmente eu copiei do modelo do raster padrão do Geoserver, mas não é necessário, você pode ir diretamente em ‘Novo’ e criar uma a partir de algum modelo, talvez esse do tutorial :). Enfim, abaixo segue a estrutura do arquivo SLD configurado.
[sourcecode language=”xml”]
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<StyledLayerDescriptor version=”1.0.0″ 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” xmlns:gml=”http://www.opengis.net/gml”
xsi:schemaLocation=”http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd”>
<NamedLayer>
<Name>Pontos das propriedades por instituição</Name>
<UserStyle>
<Name>propriedades</Name>
<Title>Pontos das propriedades por instituição</Title>
<Abstract>Todos os pontos das propriedades por instituição com filtro de organização.</Abstract>
<FeatureTypeStyle>
<Rule>
<Title>Boundary</Title>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name=”fill”>
<ogc:Function name=”strToUpperCase”>
<ogc:PropertyName>cor</ogc:PropertyName>
</ogc:Function>
</CssParameter>
</Fill>
</Mark>
<Size>10</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
[/sourcecode]
Repare no elemento <CssParameter>, o seu conteúdo está sendo gerado dinamicamente de acordo com o valor do campo da view ou da tabela do banco a qual a Layer está vinculado através da função <ogc:PropertyName>. Se você quiser saber de outras funções tem neste endereço.
Referências e leituras recomendadas
https://courseware.e-education.psu.edu/courses/geog585/content/lesson09/5.html – explicação dos métodos e funções.
http://docs.geoserver.org/stable/en/user/styling/sld-extensions/geometry-transformations.html – manipulação de geometrias.
Resultado final
Bom, acho que é isso por enquanto. Abraços e até a próxima.