Prezados leitores,
Quem trabalha com GeoServer sabe que definir estilos SLD (Styled Layer Descriptor) é uma das tarefas mais importantes e, ao mesmo tempo, pode ser bastante trabalhosa.
Um estilo mal configurado pode deixar o mapa confuso, pesado ou até inutilizável.
Já um estilo bem planejado torna os dados claros, comunicativos e eficientes.
O problema:
👉 Criar estilos manualmente exige tempo, conhecimento de XML e testes repetitivos.
👉 Definir cores adequadas para diferentes atributos (população, uso do solo, altimetria) é sempre um desafio.
É nesse ponto que a Inteligência Artificial (IA) pode transformar o jogo. Combinando o GeoServer REST API com modelos generativos (IA), é possível:
- Gerar paletas de cores automáticas e consistentes.
- Criar estilos dinâmicos adaptados ao tipo de dado.
- Automatizar a publicação de SLDs, economizando tempo e reduzindo erros.
2. Onde entra a IA
A IA pode atuar em diferentes etapas:
- Geração de paletas de cores automáticas → sugerindo cores distintas, legíveis e com contraste.
- Sugestão de simbologia → identificar o tipo de dado (ponto, linha, polígono) e propor estilos adequados.
- Automação de SLD → gerar automaticamente o XML completo a partir de metadados da camada.
- Explicação/documentação → IA pode comentar o estilo gerado, explicando a lógica.
3. Na prática: GeoServer + Python + IA
Para ajudar na criação de estilos automatizados, o nosso script vai buscar as classes distintas no banco para que a IA possa gerar automaticamente um SLD completo e válido, e na sequencia esse SLD ser publicado no GeoServer via API Rest, ou seja, tudo automatizado com zero edição manual no XML.
import psycopg2
import openai
import requests
# Configurações
DB_NAME = "gisdb"
DB_USER = "gis"
DB_PASS = "123"
DB_HOST = "localhost"
GEOSERVER_URL = "http://localhost:8080/geoserver/rest/styles"
GEOSERVER_USER = "admin"
GEOSERVER_PASS = "geoserver"
LAYER_NAME = "camada_uso_solo"
FIELD_NAME = "uso_solo"
STYLE_NAME = "uso_solo_auto"
# 1. Coletar classes distintas no PostGIS
conn = psycopg2.connect(f"dbname={DB_NAME} user={DB_USER} password={DB_PASS} host={DB_HOST}")
cur = conn.cursor()
cur.execute(f"SELECT DISTINCT {FIELD_NAME} FROM {LAYER_NAME};")
classes = [row[0] for row in cur.fetchall()]
# 2. Pedir à IA paleta + SLD
prompt = f"""
Gere um SLD válido (XML) para a camada {LAYER_NAME},
usando o atributo {FIELD_NAME} como regra de simbologia.
Classes encontradas: {classes}.
Use uma paleta de cores HEX contrastante, acessível e semântica:
- água = azul
- floresta = verde
- urbano = cinza/vermelho
- solo exposto = laranja
- agrícola = amarelo
"""
resposta = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
sld_xml = resposta.choices[0].message.content
# 3. Publicar estilo no GeoServer
headers = {"Content-type": "application/vnd.ogc.sld+xml"}
r = requests.post(
f"{GEOSERVER_URL}?name={STYLE_NAME}",
data=sld_xml.encode("utf-8"),
headers=headers,
auth=(GEOSERVER_USER, GEOSERVER_PASS)
)
if r.status_code in [200, 201]:
print(f"Estilo '{STYLE_NAME}' publicado com sucesso!")
else:
print("Erro ao publicar estilo:", r.status_code, r.text)
Esse processo pode ser facilmente acoplado a um pipeline de publicação de dados:
- Cada vez que uma nova camada for publicada → o script roda.
- Ele gera e publica o estilo de forma automática.
- Você garante consistência visual em todo o projeto WebGIS.
4. Benefícios práticos
- Simbologia automática e inteligente.
- Redução drástica no tempo gasto criando estilos.
- Padronização visual em múltiplas camadas.
- IA atuando como assistente cartográfico.
5. Conclusão
Com esse pipeline, você transforma o trabalho de estilização no GeoServer em um processo rápido, automatizado e padronizado, deixando para a IA a parte mais repetitiva e demorada.