Configuração de Camadas

Estrutura e possibilidades para configuração de camadas de mapa.

Este documento descreve a estrutura e as possibilidades para configuração de camadas de mapa, funcionalidade de busca e contexto do mapa na aplicação.

Estrutura Raiz

A configuração é retornada como um objeto JSON com duas chaves principais: searchContext e mapContext.

1. Contexto de Busca (searchContext)

Configura a funcionalidade da barra de busca, incluindo fontes de busca disponíveis e histórico.

PropriedadeTipoDescrição
currentTermstringO termo de busca digitado atualmente.
historystring[]Array de termos de busca anteriores.
searchQueryObjectEstado da query de busca atual (dados, carregando, erro).
searchConfigSearchConfig[]Configuração para fontes de busca disponíveis.

Configuração de Busca (SearchConfig)

Define uma fonte de dados pesquisável.

PropriedadeTipoDescrição
idstringIdentificador único para a config de busca (ex: "lotes").
namestringNome de exibição na UI.
originstringURL base para o serviço WFS/WMS (ex: URL do GeoServer).
method"GET" | "POST"Método HTTP a ser usado para a requisição.
indexnumberPrioridade de ordem para resultados de busca.
isActivebooleanSe esta fonte de busca está habilitada.
transformParamsstring (Function)String de função JS para transformar o termo de busca em parâmetros de requisição (ex: filtros CQL).
transformRequeststring (Function) | nullFunção opcional para transformar a requisição antes de enviar.
transformResponsestring (Function)String de função JS para transformar a resposta da API em um formato de resultado de busca padronizado.
clickActionClickAction | nullAção a ser executada quando um resultado é clicado.
layerSchemaIdstring | nullID do layerSchema associado a este resultado de busca.
layerSchemaLayerSchema | nullConfiguração de camada embutida se o resultado deve adicionar uma camada ao mapa.

2. Contexto do Mapa (mapContext)

Configura o estado do mapa, camadas, grupos e modelos de interação.

PropriedadeTipoDescrição
layerSchemasLayerSchema[]Lista de todas as camadas de mapa disponíveis.
layerGroupsLayerGroup[]Estrutura hierárquica de agrupamento para camadas.
selectedFeaturesany[]Array de features do mapa atualmente selecionadas.
boundingBox[number, number, number, number]Limites atuais de visualização do mapa [minLon, minLat, maxLon, maxLat].
viewportViewportEstado atual da viewport do mapa (lat, lon, zoom, bearing, pitch).
zoomnumberNível de zoom atual.
is3DActivebooleanSe o modo terreno/prédios 3D está ativo.
selectedBaseMapstringID do estilo de mapa base ativo (ex: "standard").
editFeatureTemplateTemplate[]Modelos para a interface de edição/seleção.
layerWithRootEditTemplatestringID da camada que fornece o modelo raiz para edição.

Esquema de Camada (LayerSchema)

Define como uma camada é buscada, renderizada e interagida.

PropriedadeTipoDescrição
idstringIdentificador único para a camada.
namestringNome de exibição no controlador de camadas.
originstringFonte URL para os dados da camada (WFS para GeoJSON, WMS para imagens).
isActivebooleanSe a camada está disponível/ativa no sistema.
typeLayerTypeTipo de camada: "GeoJsonLayer", "Stream" (tiled), ou "CustomWMSLayer".
isVisiblebooleanSe a camada está atualmente visível no mapa.
minZoomnumber | nullNível mínimo de zoom para renderizar a camada.
getTextColorPropNamestring | nullChave de propriedade para lógica de cor do texto.
getFillColorPropNamestring | nullChave de propriedade para lógica de cor de preenchimento.
getLineColorPropNamestring | nullChave de propriedade para lógica de cor da linha.
groupIdstringID do grupo ao qual esta camada pertence.
colorsLayerColor[]Array de cores/estilos de legenda associados à camada.
clickActionClickAction | nullAção a ser disparada quando uma feature nesta camada é clicada.
viewTemplateTemplate[] | nullArray de modelos para renderizar na barra lateral quando uma feature é selecionada.
propertiesObjectPropriedades adicionais do DeckGL para renderização (preenchimento, traço, largura da linha, etc.).

Propriedades da Camada (properties) Configuração passada diretamente para camadas DeckGL ou lógica personalizada.

  • filled: boolean - Renderizar preenchimento para polígonos.
  • stroked: boolean - Renderizar traço para polígonos.
  • getFillColor: Function string ou Array - Lógica para cor de preenchimento.
  • getLineColor: Function string ou Array - Lógica para cor da linha.
  • getLineWidth: number ou Function - Largura da linha.
  • getText: Function string - Lógica para extrair rótulos de texto.
  • autoHighlight: boolean - Realçar ao passar o mouse.
  • highlightColor: Array - Cor RGBA para realce.
  • layerActions: Array - Ações personalizadas (botões) para o item da camada na lista.

Grupo de Camadas (LayerGroup)

Define a hierarquia no Controlador de Camadas.

PropriedadeTipoDescrição
idstringID único do grupo.
namestringNome de exibição.
ownerGroupstring | nullID do grupo pai (null para grupos raiz).
childGroupsLayerGroup[]Array recursivo de subgrupos.

Modelo de Visualização (Template)

Define os componentes de UI renderizados na barra lateral quando uma feature é selecionada.

PropriedadeTipoDescrição
typestringTipo de componente: wrapper-card, label-value, wrapper-list-items, polygon-map, wrapper-request, button, edit-polygon, etc.
labelstringRótulo ou título para o componente.
templatesTemplate[]Modelos aninhados (para wrappers).
valuestringValor a ser exibido (suporta interpolação estilo EJS <%- %>).
propertiesObjectPropriedades específicas do componente (ex: helper, action, url, transformResponse, columnClass).

Tipos de Modelo Especiais:

  • wrapper-request: Faz uma requisição HTTP para buscar dados adicionais (ex: interseções) e renderiza modelos aninhados com a resposta.
  • polygon-map: Renderiza um mini-mapa focando na feature selecionada.
  • edit-polygon: Renderiza as ferramentas de edição de geometria.
  • wrapper-list-items: Renderiza uma lista de itens (texto primário/secundário) baseada em dados.

Exemplo: Adicionando uma Camada WMS via Configuração

Para adicionar uma camada WMS, você criaria um LayerSchema assim:

{
  "id": "pracas_e_canteiros",
  "name": "Praças e Canteiros",
  "origin": "https://geoserver.slui.dev/geoserver/slui/wms?LAYERS=slui%3Apracas_e_canteiros&FORMAT=image%2Fjpeg&TRANSPARENT=true",
  "isActive": true,
  "type": "CustomWMSLayer",
  "isVisible": true,
  "minZoom": null,
  "getTextColorPropName": null,
  "getFillColorPropName": null,
  "getLineColorPropName": null,
  "clickAction": null,
  "viewTemplate": null,
  "properties": {},
  "groupId": "areas_publicas",
  "colors": [
    {
      "id": 307,
      "color": [147, 196, 125, 240],
      "type": "fill",
      "pattern": "full",
      "label": "default",
      "value": null,
      "layerSchemaId": "pracas_e_canteiros"
    }
  ]
}

Exemplo: Adicionando uma Camada GeoJSON com Ação de Clique

{
  "id": "distrito_municipal",
  "name": "Distritos",
  "origin": "https://geoserver.slui.dev/geoserver/slui/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=slui:distrito_municipal&maxFeatures=10000&outputFormat=json&srsName=EPSG:4326",
  "isActive": true,
  "type": "GeoJsonLayer",
  "isVisible": true,
  "minZoom": null,
  "getTextColorPropName": null,
  "getFillColorPropName": null,
  "getLineColorPropName": null,
  "clickAction": {
    "action": "setZoom",
    "params": {
      "zoom": 17.1
    }
  },
  "viewTemplate": null,
  "properties": {
    "filled": true,
    "getText": "(d) => d?.properties?.nm_distrito_municipal",
    "maxZoom": 17,
    "stroked": true,
    "pickable": true,
    "pointType": "circle+text",
    "wireframe": true,
    "getTextSize": 12,
    "minZoomText": 10,
    "getElevation": -10,
    "getLineWidth": 12,
    "autoHighlight": true,
    "getTextAnchor": "middle",
    "getPointRadius": 12,
    "highlightColor": [153, 203, 255, 140]
  },
  "groupId": "geral",
  "colors": [
    {
      "id": 305,
      "color": [0, 0, 0, 120],
      "type": "line",
      "pattern": "full",
      "label": "default",
      "value": null,
      "layerSchemaId": "distrito_municipal"
    },
    {
      "id": 303,
      "color": [153, 203, 255, 120],
      "type": "fill",
      "pattern": "full",
      "label": "default",
      "value": null,
      "layerSchemaId": "distrito_municipal"
    },
    {
      "id": 304,
      "color": [65, 92, 119, 255],
      "type": "text",
      "pattern": "full",
      "label": "default",
      "value": null,
      "layerSchemaId": "distrito_municipal"
    }
  ]
}