Um requisito comum em mapas é que os recursos de uma camada sejam exibidos com símbolos diferentes para que possam ser visualmente distinguidos uns dos outros. Por exemplo, em uma camada com recursos de árvores. Se nada for configurado, as árvores no mapa sempre terão o mesmo símbolo. Com a Simbolização de Valor Único (Unique Value Symbology), a camada pode ser ajustada para que, por exemplo, cada tipo de árvore tenha seu próprio símbolo, veja a imagem a seguir:<\/P>
<\/P>
Unique Value Symbology<\/span><\/P>Esta é a solução recomendada quando não há muitas distinções (permutações). Mas o que acontece se o número chegar a centenas/milhares e talvez símbolos complexos sejam necessários? <\/P>A partir desse ponto, deve-se considerar o uso da Simbolização de Dicionário (Dictionary Symbology). O exemplo mais proeminente disso são os Estilos de Simbologia Militar (Military Symbology Styles) com milhares de símbolos diferentes e às vezes muito complexos, usados na área militar para mapas táticos.<\/P> <\/P>
Dictionary Symbology – Military Symbology Styles<\/span><\/P>Para esclarecer desde já, camadas com Dictionary Symbology não podem ser exibidas na legenda do mapa, como no screenshot da Unique Value Symbology acima. Uma legenda com centenas de símbolos também não seria muito útil.<\/P> <\/H4>O Estilo Dictionary Symbology<\/H4>Com Dictionary Symbology Styles, os símbolos são gerados dinamicamente em tempo de execução com base nos valores de entrada. Existem vários tipos de Style, neste blog tudo o que segue se refere a Mobile Styles e Web Styles. Um Style pode conter símbolos para diferentes geometrias (ponto, linha, polígono). Os valores de entrada são tipicamente informações de atributos dos recursos que devem receber o símbolo correspondente no mapa. Isso significa que um Style deve ser criado antecipadamente com todos os componentes necessários, lógica de aplicação e opções de configuração. Como isso pode ser feito está muito bem descrito neste Blog ArcGIS.<\/P>O resultado é um Mobile Style, que é um banco de dados SQLite com a extensão de arquivo .stylx. Este pode ser usado diretamente no ArcGIS Pro e nos ArcGIS Maps SDKs for native (também conhecido como ArcGIS Runtime) offline, mas também pode ser publicado como um Web Style Service e assim usado tanto em apps desktop quanto em aplicações web.<\/P>Isso é teoria. Para entender melhor Dictionary Symbology, como em tudo, é útil experimentar na prática. Para isso modifiquei um pouco o Mobile Style para restaurantes do autor do blog ArcGIS mencionado acima e disponibilizei:<\/P>para Download como Mobile Style (arquivo Stylx)<\/LI>publicado como Web Style Service no ArcGIS Online<\/LI>E um correspondente Restaurant FeatureService para testar o Style em apps.<\/LI><\/UL>Nosso Mobile Style para restaurantes gera símbolos complexos baseados em atributos, mostrando à primeira vista o nome, tipo do restaurante (aqui Pizzaria), avaliação, horário de funcionamento e muito mais, sem precisar abrir um popup extra.<\/P> <\/P>
Componentes de um símbolo de restaurante<\/span><\/P> <\/H4>Criar ou Modificar um Mobile Style<\/H4>Mobile Styles são criados no ArcGIS Pro. Estilos existentes também podem ser usados como modelo para novos estilos, pois têm estrutura idêntica. Mobile Styles podem ser modificados. Para isso é necessário usar o ArcGIS Pro para criar/ajustar os componentes gráficos e textuais dos símbolos, além de um editor SQLite DB (por exemplo o DB Browser for SQLite) para a lógica da aplicação e configurações do estilo.<\/P>No ArcGIS Pro basta arrastar e soltar o Mobile Style do restaurante para o catálogo; ele aparecerá listado em Styles. Clicando com o botão direito nele aparece a opção para gerenciar estilos. Dando duplo clique no estilo do restaurante na janela de gerenciamento é possível ajustar componentes existentes e criar novos.<\/P>Ao abrir o estilo num editor SQLite DB as opções ficam na tabela meta. Lá em dictionary_configuration estão as configurações — em nosso estilo apenas a opção para mostrar ou ocultar o nome do restaurante no símbolo. E em dictionary_script está a lógica da aplicação como script ArcGIS Arcade, incluindo o cálculo dos componentes das estrelas baseado nos valores da avaliação.<\/P> <\/H4>Publicar um Web Style Service<\/H4>Mobile Styles podem ser publicados com ArcGIS Pro no ArcGIS Online e ArcGIS Enterprise. Basta clicar com o botão direito sobre o estilo desejado no catálogo do ArcGIS Pro e escolher Share as Web Style. Eu já preparei isso, mas qualquer pessoa pode publicar seu próprio Web Style Service a partir do Mobile Style do restaurante. Ao publicar é criada uma estrutura com vários arquivos JSON contendo todas as informações do estilo acessíveis via URL. Um Web Style não usa diretamente o Mobile Style nos bastidores.<\/P>Aqui vai uma dica: Web Styles também podem ser hospedados num servidor web próprio. Basta baixar os arquivos JSON usando o AGOL Assistant com a opção Download All (clicar nos três pontos do item do estilo e escolher View Item Resources) e publicar a estrutura descompactada exatamente como está. Provavelmente será necessário configurar algumas coisas do lado do servidor web para acesso.<\/P> <\/H4>Usando Dictionary Symbology no ArcGIS Pro<\/H4>No ArcGIS Pro camadas podem usar tanto Mobile Styles quanto Web Styles para simbolização. Para nossos restaurantes os passos seriam:<\/P>Inserir um Mapa<\/LI>O Restaurant-FeatureService no Ribbon-Item Add Data com Data from Path como camada incorporadaClique com o botão direito do mouse na camada e selecione SymbologyNo menu Symbology, sob Primary Symbology, selecione DictionaryNo menu suspenso More, clique na opção Add dictionaryAqui pode-se selecionar o estilo móvel do restaurante a partir do sistema de arquivos ou o Web Style (procure pelo nome ou ID do Web Style no Portal/ArcGIS Online)Em Symbology Fields e Text Fields, podem ser indicados os nomes dos campos dos atributos da feature correspondentes, caso sejam diferentes dos valores de entrada definidos no estilo. No nosso caso, tudo pode permanecer como está.Se desejar, altere a configuração (texto ligado/desligado)Concluído
Dictionary Symbology in ArcGIS Pro
Uso do Dictionary Symbology em ArcGIS Maps SDKs for native
Em todos os ArcGIS Maps SDKs for native, assim como no ArcGIS Pro, tanto Mobile Styles quanto Web Styles podem ser usados para a simbologia das camadas. Para nossos restaurantes, existem exemplos adequados na documentação, aqui por exemplo para .NET. O código pode ser totalmente reaproveitado, apenas os caminhos/IDs para nossos próprios estilos podem precisar ser substituídos. Nos Sample Viewers dos respectivos SDKs vocês também podem testar ao vivo. Este Viewer está disponível nas lojas de aplicativos correspondentes (Microsoft, Apple, Google, procure por ArcGIS Samples) e para Java e Qt para download. Nosso exemplo é chamado em todos os lugares de Custom dictionary style.
Dictionary Symbology in ArcGIS Maps SDKs for native
Os métodos para sobrescrever os nomes dos campos dos atributos da feature, caso não correspondam, ou para definir a configuração (texto ligado/desligado) estão descritos na documentação do respectivo SDK, aqui por exemplo novamente para .NET.
Interessante também é a possibilidade de consultar os símbolos do estilo diretamente sem um mapa. Esta seria a solução para, por exemplo, símbolos para "Single Graphics" em GraphicsOverlays sem renderer, seletores de símbolo próprios para edição ou para usar as imagens dos símbolos fora do controle de mapa em tabelas ou botões. Como fazer isso também está descrito na documentação, aqui para .NET. As imagens para uso fora do controle de mapa podem então ser geradas com os métodos Symbol.CreateSwatchAsync() e RuntimeImageExtensions.ToImageSourceAsync().
Uso do Dictionary Symbology em ArcGIS Maps SDKs for JavaScript
Para Dictionary Symbology em aplicações web só podem ser usados os Web Styles. Com o ArcGIS Maps SDKs for JavaScript, basicamente pode-se fazer o mesmo que nos SDKs nativos. Para facilitar, publiquei o código JS do nosso exemplo de restaurante no CodePen.
Dictionary Symbology in ArcGIS Maps SDKs for JavaScript
Também com o ArcGIS Maps SDKs for JavaScript é possível consultar símbolos do estilo para "uso individual" em GraphicsLayer ou para uso como imagens fora do mapa em outros controles. Para isso, também disponibilizei um pequeno exemplo no CodePen. O truque aqui é fornecer ao DictionaryRenderer, usando o método GetSymbolAsync(), uma Graphic contendo apenas uma tabela de atributos. Isso retorna o símbolo correspondente, que pode ser usado como símbolo de uma nova Graphic em GraphicsLayer ou como imagem fora do mapa usando métodos do objeto symbolUtils.
Se vocês tiverem perguntas ou sugestões sobre este tema, basta usar a função de comentários. Caso contrário, desejamos muita diversão e sucesso ao experimentar!