Table of Contents
Symbology Encoding
Symbology Encoding (SE) é um padrão OpenGIS® que surgiu devido a necessidade dos usuários e softwares de controlar os estilos utilizados para representação de dados geográficos. Até a versão 1.0.0 da especificação Styled Layer Descriptor (SLD), o SE era parte desta. Com o lançamento da versão 1.1.0, houve uma divisão, sendo que:
- O SE é uma linguagem para definição de estilos;
- O SLD um padrão que estende o padrão WMSpara permitir o controle do visual
dos mapas gerados por este serviço. Basicamente, um documento SLD associa, para cada camada, elementos definidos na especifiação SE.
O padrão SE é independente de qualquer descrição OGC Web Service. Consequentemente, pode também ser utilizado para descrever a forma de apresentacao dos dados geográficos em sistemas desktop. Um padrão complementar ao SE é o Filter, responsável pela codificação de expressões de restrições. Estas restrições podem ser utilizadas para definir que um determinado estilo deve ser aplicado a um determinado conjunto de objetos que atendem determinada restrição.
Especificação
FeatureTypeStyle
Este elemento define qual o estilo a ser aplicado em uma determinada feição. Um FeatureTypeStyle
possui uma ou mais regras.
Rules
As regras são utilizadas para definir de que forma as feições serão apresentadas, dado uma propriedade ou então diferentes escalas do mapa. Um elemento Rule
pode ou não possuir uma restrição, neste caso, representada por um elemento Filter
. No caso da regra não possuir restrição, a interpretação é que todos os objetos sejam representados utilizando o mesmo estilo.
Segue abaixo o exemplo de uma regra com restrição (número de pistas >= 4) codificada utilizando o padrão Filter
.
<se:FeatureTypeStyle> <se:Rule> <ogc:Filter> <ogc:PropertyIsGreaterThanOrEqualTo> <ogc:PropertyName>num_lanes<ogc:PropertyName> <ogc:Literal>4</ogc:Literal> </ogc:PropertyIsGreaterThanOrEqualTo> </ogc:Filter> Symbolizers goes here... </se:Rule> </se:FeatureTypeStyle>
Cada regra também possui um ou mais elementos do tipo Symbolizer
.
Symbolizers
Um symbolizer
descreve de que forma uma determinada feição irá aparecer no mapa. Basicamente, este elemento encapsula os parâmetros gráficos de desenho. Cinco tipos são definidos:
LineSymbolizer
PolygonSymbolizer
PointSymbolizer
TextSymbolizer
RasterSymbolizer
A seguir, é apresentado de forma resumida os parâmetros de cada elemento acima.
Nota: É importante dizer que alguns desses parâmetros (ex.: Graphic
) são complexos e devem ser analisados a partir da especificação para maiores detalhes.
LineSymbolizer
Define o estilo de uma linha e encapsula os parâmetros gráficos associados a este tipo de geometria.
Parâmetros:
- stroke: define a cor da linha;
- stroke-width: define a expessura;
- stroke-linecap: define como os pontos finais da linha são desenhados (butt | round | square);
- stroke-linejoin: define como a junção entre as linhas é desenhada (mitre | round | bevel);
- stroke-opacity: opacidade da linha [0,1];
- stroke-dasharray: define o tipo de traço da linha (ex.: traço, traço-ponto, traço-traço-ponto, etc.).
- Graphic-stroke: define um símbolo que é desenhado sobre a linha;
- Graphic-fill: define um símbolo que é utilizado para preeencher a linha.
Graphic-fill e Graphic-stroke possuem um elemento Graphic
. Basicamente, um Graphic
pode ser uma imagem (.png, .gif, etc) - elemento ExternalGraphic
- ou uma marca conhecida (square, star, circle) vetorial - elemento Mark
. Para maiores detalhes, consultar a especificação.
Para exemplos de LineSymbolizers
, clique aqui!
PolygonSymbolizer
Define o estilo de um polígono e encapsula os parâmetros gráficos associados a este tipo de geometria.
Nota: Para o estilo do contorno do polígono, os parâmetros são os mesmo apresentados acima para a linha.
Para o preenchimento, os parâmetros são:
- fill: define a cor de preenchimento;
- fill-opacity: define a opacidade do preenchimento [0,1];
- Graphic-fill: define um símbolo que é utilizado para realizar o preenchimento.
Exemplos de PolygonSymbolizers
aqui.
PointSymbolizer
Define o estilo de um ponto e encapsula os parâmetros gráficos associados a este tipo de geometria.
O elemento PointSymbolizer
possui um Graphic
. Basicamente, os parâmetros são:
- rotation: indica a rotação do símbolo;
- size : indica o tamanho do símbolo. Pela especificação, este tamanho corresponde a altura e a largura deve ser calculada de modo a manter a relação de aspecto;
- opacity: opacitdade do símbolo;
- Para o tipo
ExternalGraphic
:- format: indica o formato do símbolo (.png, .svg, .gif, etc);
- onlineResource: caminho para o símbolo (ex.: C:/images/airport.png, www.mysite.br/images/terralib.png);
- Para o tipo
Mark
:- wellKnownName: um novo bem conhecido para uma marca. Segundo a especificação, deve-se incluir pelo menos square, circle, triangle, star, cross e x.
- O elemento
Mark
possui ainda elementos para definição do preenchimento e também do contorno.
Exemplos aqui!
TextSymbolizer
Define o estilo para exibição de textos.
RasterSymbolizer
Renderer
// Something like that... Renderer::draw(AbstractLayer* layer, Canvas* canvas) { // Gets the style and rules Style* style = layer->getStyle(); std::vector<Rule*> rules = style->getRules(); for(unsigned int i = 0; i < rules.size(); i++) // for each rule { Rule* r = rules[i]; /* Gets the objects that obey the rule's restriction. Case there isn't restriction, gets all objects! */ // Gets the symbolizers std::vector<Symbolizer*> symbs = r->getSymbolizers(); for(unsigned int i = 0; i < symbs.size(); i++) // for each symbolizer { /* Sets the graphics parameters on canvas and for each geometry, let´s draw! */ } } }