{"id":10008,"date":"2025-10-08T09:00:29","date_gmt":"2025-10-08T12:00:29","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=10008"},"modified":"2025-10-23T15:16:58","modified_gmt":"2025-10-23T18:16:58","slug":"geonode-ia-enriquecimento-automatico-de-metadados","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2025\/10\/08\/geonode-ia-enriquecimento-automatico-de-metadados\/","title":{"rendered":"GeoNode + IA: enriquecimento autom\u00e1tico de metadados"},"content":{"rendered":"<p>O GeoNode \u00e9 hoje uma das <strong>plataformas mais completas<\/strong> de cat\u00e1logos e portais WebGIS de c\u00f3digo aberto. Ele centraliza camadas, mapas, documentos e metadados em um ambiente colaborativo.<\/p>\n<p>Mas existe um ponto cr\u00edtico em qualquer infraestrutura GeoNode:<strong> A qualidade e a completude dos metadados<\/strong>.<\/p>\n<p>Sem bons metadados, o portal perde valor: os dados se tornam dif\u00edceis de localizar, interpretar e reutilizar. E o problema \u00e9 bem conhecido, quem nunca publicou uma camada com descri\u00e7\u00e3o gen\u00e9rica tipo \u201cdados de teste\u201d ou \u201cimportado do PostGIS\u201d?<\/p>\n<p>A boa not\u00edcia \u00e9 que, com o apoio da Intelig\u00eancia Artificial (IA), \u00e9 poss\u00edvel automatizar grande parte do processo de enriquecimento de metadados, tornando o GeoNode mais inteligente e autodescritivo.<\/p>\n<p><strong>1. O desafio dos metadados no GeoNode<\/strong><\/p>\n<p>Ao publicar uma camada, o GeoNode gera automaticamente informa\u00e7\u00f5es b\u00e1sicas como nome, resumo, bounding box, SRC. Mas n\u00e3o consegue:<\/p>\n<ul>\n<li>Criar descri\u00e7\u00f5es detalhadas do conte\u00fado;<\/li>\n<li>Gerar palavras-chave contextuais;<\/li>\n<li>Escrever resumos t\u00e9cnicos e anal\u00edticos;<\/li>\n<li>Padronizar a linguagem entre diferentes camadas.<\/li>\n<\/ul>\n<p>Isso deixa o cat\u00e1logo inconsistente, especialmente quando diferentes analistas publicam dados com estilos e linguagens diferentes.<\/p>\n<p>\u00c9 exatamente esse tipo de trabalho repetitivo e sem\u00e2ntico que uma IA generativa pode resolver com perfei\u00e7\u00e3o.<\/p>\n<p><strong>2. Como a IA pode ajudar:<\/strong><\/p>\n<p>Com um modelo de linguagem (LLM) como o GPT, podemos:<\/p>\n<ol>\n<li>\n    <strong>Analisar o nome da camada, atributos e amostras de dados;<\/strong>\n  <\/li>\n<li>\n    <strong>Gerar automaticamente:<\/strong><\/p>\n<ul>\n<li>Descri\u00e7\u00e3o detalhada (\u201cO que essa camada representa e por que \u00e9 importante\u201d);<\/li>\n<li>Palavras-chave (keywords) baseadas no conte\u00fado;<\/li>\n<li>Sugest\u00f5es de categoria tem\u00e1tica (ex.: \u201cmeio ambiente\u201d, \u201cinfraestrutura\u201d, \u201cdemografia\u201d);<\/li>\n<li>Texto de resumo padronizado.<\/li>\n<\/ul>\n<\/li>\n<li>\n    <strong>Enviar esses metadados diretamente para o GeoNode via API.<\/strong>\n  <\/li>\n<\/ol>\n<p><strong>3. GeoNode + IA + Python<\/strong><\/p>\n<p>Vamos montar um pipeline automatizado que:<\/p>\n<ul>\n<li>Consulta os metadados existentes via API do GeoNode;<\/li>\n<li>Gera descri\u00e7\u00f5es e palavras-chave com IA;<\/li>\n<li>Atualiza o registro da camada no cat\u00e1logo.<\/li>\n<\/ul>\n<p>Veja como ficaria esse script:<\/p>\n<pre>\r\nimport requests\r\nimport openai\r\n\r\n# Configura\u00e7\u00f5es do GeoNode (GeoNode 4.x usa \/api\/v2\/datasets\/)\r\nGEONODE_URL = \"http:\/\/localhost:8000\/api\/v2\/datasets\/\"\r\nGEONODE_USER = \"admin\"\r\nGEONODE_PASS = \"geonode\"\r\n\r\n# Configura\u00e7\u00e3o da IA\r\nMODEL = \"gpt-4o-mini\"\r\n# coloque sua chave de API do OpenAI em OPENAI_API_KEY antes de rodar\r\nopenai.api_key = \"YOUR_OPENAI_API_KEY\"\r\n\r\n# 1. Obter lista de camadas (datasets)\r\nr = requests.get(GEONODE_URL, auth=(GEONODE_USER, GEONODE_PASS), headers={\"Accept\":\"application\/json\"})\r\nr.raise_for_status()\r\nlayers = r.json().get(\"results\", [])\r\n\r\nfor layer in layers:\r\n    title = layer.get(\"title\")\r\n    # GeoNode pode usar 'abstract' ou 'description' dependendo da configura\u00e7\u00e3o; pegamos ambos\r\n    abstract = layer.get(\"abstract\", \"\") or layer.get(\"description\", \"\")\r\n    keywords = layer.get(\"keywords\", []) or []\r\n\r\n    # 2. Gerar enriquecimento com IA\r\n    prompt = f\"\"\"\r\n    Analise o t\u00edtulo e o resumo abaixo e gere:\r\n    1. Uma descri\u00e7\u00e3o aprimorada do dado (3 a 4 linhas);\r\n    2. 5 palavras-chave relevantes;\r\n    3. Categoria tem\u00e1tica sugerida.\r\n    ---\r\n    T\u00edtulo: {title}\r\n    Resumo atual: {abstract}\r\n    Palavras-chave atuais: {keywords}\r\n    \"\"\"\r\n\r\n    resposta = openai.ChatCompletion.create(\r\n        model=MODEL,\r\n        messages=[{\"role\": \"user\", \"content\": prompt}]\r\n    )\r\n\r\n    enriquecido = resposta.choices[0].message.content\r\n    print(f\"\\nCamada: {title}\\n{enriquecido}\\n\")\r\n\r\n    # 3. Atualizar camada no GeoNode (opcional)\r\n    # Atualiza o campo 'abstract' (GeoNode 4.x aceita PATCH \/api\/v2\/datasets\/{id}\/)\r\n    payload = {\"abstract\": enriquecido}\r\n    update = requests.patch(\r\n        f\"{GEONODE_URL}{layer['id']}\/\",\r\n        json=payload,\r\n        auth=(GEONODE_USER, GEONODE_PASS),\r\n        headers={\"Content-Type\": \"application\/json\", \"Accept\": \"application\/json\"}\r\n    )\r\n\r\n    if update.status_code in [200, 202]:\r\n        print(\"Metadados atualizados com sucesso.\")\r\n    else:\r\n        print(\"Erro ao atualizar:\", update.status_code, update.text)\r\n\r\n<\/pre>\n<p>Em resumo: <\/p>\n<ul>\n<li>O script percorre todas as camadas publicadas.<\/li>\n<li>Para cada uma, envia o t\u00edtulo e resumo atual \u00e0 IA.<\/li>\n<li>A IA retorna um texto padronizado e enriquecido, junto com keywords.<\/li>\n<li>O script atualiza a camada via API REST do GeoNode.<\/li>\n<\/ul>\n<p>O resultado \u00e9 um cat\u00e1logo muito mais coerente, padronizado e informativo sem depender de preenchimento manual.<\/p>\n<p><strong>4. Exemplo pr\u00e1tico<\/strong><\/p>\n<p>Camada original:<\/p>\n<ul>\n<li><strong>T\u00edtulo:<\/strong> \u201cLimite municipal SC\u201d<\/li>\n<li><strong>Resumo:<\/strong> \u201cLimites administrativos.\u201d<\/li>\n<\/ul>\n<p>Ap\u00f3s enriquecimento com IA:<\/p>\n<p><strong>Descri\u00e7\u00e3o aprimorada:<\/strong><br \/>\n  Esta camada representa os limites municipais oficiais do estado de Santa Catarina, derivados de bases cartogr\u00e1ficas oficiais. Pode ser utilizada para an\u00e1lises de planejamento territorial, gest\u00e3o p\u00fablica e integra\u00e7\u00e3o de dados geoespaciais de infraestrutura.<\/p>\n<p><strong>Palavras-chave sugeridas:<\/strong><br \/>\n  limites, munic\u00edpios, cartografia oficial, Santa Catarina, administra\u00e7\u00e3o p\u00fablica<\/p>\n<p><strong>Categoria:<\/strong> Governan\u00e7a \/ Administra\u00e7\u00e3o P\u00fablica<\/p>\n<p>Em segundos, o dado fica <strong>muito mais informativo.<\/strong><\/p>\n<p>Podemos ir al\u00e9m: se as camadas do GeoNode v\u00eam do PostGIS, o script pode extrair informa\u00e7\u00f5es diretas do banco:<\/p>\n<ul>\n<li>Nomes e tipos de campos (geometry, text, numeric);<\/li>\n<li>Contagem de registros;<\/li>\n<li>Amostra de valores (ex.: primeiros 10 nomes de munic\u00edpios);<\/li>\n<\/ul>\n<p>Esses dados podem ser enviados \u00e0 IA para gerar descri\u00e7\u00f5es ainda mais precisas, contextualizadas com base no conte\u00fado real da tabela.<\/p>\n<p><strong>5. Conclus\u00e3o<\/strong><\/p>\n<p>Integrar IA ao GeoNode transforma o portal em uma plataforma muito mais inteligente, descritiva e aut\u00f4noma. Voc\u00ea passa a ter metadados consistentes, atrativos e \u00fateis para quem consome os dados sem depender de preenchimento manual.<\/p>\n<p>Al\u00e9m disso pode ter os seguintes benef\u00edcios pr\u00e1ticos:<\/p>\n<ul>\n<li>Automa\u00e7\u00e3o completa do enriquecimento de metadados.<\/li>\n<li>Padroniza\u00e7\u00e3o lingu\u00edstica e sem\u00e2ntica entre camadas.<\/li>\n<li>Melhor desempenho de busca dentro do GeoNode.<\/li>\n<li>Economia de tempo na curadoria de dados.<\/li>\n<li>Cat\u00e1logo inteligente, com IA atuando como \u201ceditor autom\u00e1tico\u201d de conte\u00fado.<\/li>\n<\/ul>\n<p>Gostou desse post? Deixe um coment\u00e1rio dando sua opini\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O GeoNode \u00e9 hoje uma das plataformas mais completas de cat\u00e1logos e portais WebGIS de c\u00f3digo aberto. Ele centraliza camadas, mapas, documentos e metadados em um ambiente colaborativo. Mas existe um ponto cr\u00edtico em qualquer infraestrutura GeoNode: A qualidade e&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2025\/10\/08\/geonode-ia-enriquecimento-automatico-de-metadados\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":10020,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[196,343],"class_list":["post-10008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-geonode","tag-ia"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=10008"}],"version-history":[{"count":14,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10008\/revisions"}],"predecessor-version":[{"id":10044,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10008\/revisions\/10044"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/10020"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=10008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=10008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=10008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}