Antes do roteamento, havia um grafo para confiar
O planejamento preliminar de saneamento costuma começar com uma bagunça de dados geoespaciais públicos, informação de terreno, restrições de rede e julgamento de especialistas. Antes que alguém consiga fazer uma análise de engenharia detalhada, alguém precisa transformar essa bagunça numa rede coerente, que possa ser inspecionada, editada e roteada levando a gravidade em conta.
O Urbanus é a plataforma de pesquisa que construímos para essa etapa. Ele puxa dados públicos de mapas, enriquece a elevação, guarda o estado do projeto num banco espacial, deixa um especialista editar o grafo de ruas no navegador e roda validação e roteamento automatizados em cima desse grafo.
Minha parte na plataforma de pesquisa
Co-desenvolvi a plataforma web e trabalhei no editor interativo, na persistência espacial, no pipeline de processamento geoespacial, na integração com dados públicos, no roteamento em grafo e na validação funcional. Minha responsabilidade era manter o grafo revisado pelo especialista consistente, desde a edição no navegador até a rede processada salva no PostGIS.
Isso foi software de pesquisa de graduação feito em colaboração, não o lançamento de um produto solo. Mantivemos dados públicos, edição por especialistas e processamento automatizado num único fluxo revisável, em vez de separá-los em ferramentas que poderiam discordar em silêncio.
O Urbanus parte de um grafo de ruas editado (G=(V,E)). O conjunto de vértices (V) contém interseções, extremidades, curvas, pontos de coleta e pontos topográficos relevantes. O conjunto de arestas (E) contém segmentos de rua ou de coletor com geometria, comprimento, categoria da via e contexto de elevação.
O editor no navegador faz parte do contrato de processamento. Depois que os dados públicos de ruas e as amostras de elevação são carregados, o grafo que o usuário revisa e altera vira a fonte da verdade enviada ao backend. Isso importa: não reconstruímos silenciosamente uma rede diferente a partir do GeoJSON original pelas costas do especialista.
Ensinando a rede a seguir a gravidade
Para uma aresta direcionada candidata de (u) para (v), o Urbanus calcula a declividade do terreno a partir da queda de elevação e do comprimento horizontal da aresta:
Um valor positivo significa que a aresta desce de (u) para (v). Quando as duas elevações são conhecidas, candidatas planas ou em subida recebem custo infinito e ficam fora da rota. Elevação ausente mantém as duas direções disponíveis, mas adiciona uma penalidade conservadora, porque a gravidade não pode ser verificada.
O RSPH usa o algoritmo de Dijkstra com uma pontuação de roteamento que prefere segmentos curtos e em descida, penaliza declividades pequenas e pode recompensar o reaproveitamento de um tronco coletor existente:
Esse valor é uma pontuação adimensional de ordenação usada pelo algoritmo de roteamento. Não é preço de obra, simulação hidráulica nem cálculo de dimensionamento de tubulação. Quando uma aresta já pertence à árvore em construção, sua pontuação passa a ser (C_k(u,v)=0.5C_0(u,v)), o que torna mais provável que caminhos posteriores convirjam para o mesmo tronco.
A Repeated Shortest Path Heuristic processa os nós obrigatórios da maior para a menor elevação. Para cada nó (n_k), ela busca o caminho de menor custo até um sumidouro virtual (S) que representa o exutório e quaisquer pontos de coleta locais selecionados:
O caminho (P_k) é adicionado à árvore direcionada (T_k), e suas arestas passam a ser elegíveis para o desconto de reaproveitamento nas buscas seguintes. Nós obrigatórios sem um caminho viável por gravidade são reportados como inalcançáveis, em vez de serem forçados para dentro da rede.
Uma execução de processamento recebe o grafo que foi inspecionado e editado no navegador, limpa artefatos espúrios de elevação zero, preserva pontos estruturais obrigatórios e remove nós redundantes. Ela detecta extremos de elevação, quebras de declividade e pontos de coleta, e então roteia os nós obrigatórios em direção ao exutório ou aos coletores locais com o RSPH. Depois disso, restaura a cobertura de ruas que faltou, quebra ciclos direcionados inválidos, reduz os nós não obrigatórios restantes, atribui acessórios de inspeção e serializa a rede direcionada no PostGIS.
O NetworkX nos dá construção explícita de grafos, roteamento por caminho mínimo e checagens de topologia. O PostGIS guarda estado do projeto, geometrias e dados da rede processada no mesmo modelo de persistência espacial. TypeScript e Python ficam alinhados por contratos compartilhados, constantes e testes de paridade, em vez de forçar um único runtime no sistema inteiro.
O que a pesquisa estabeleceu
Testes automatizados cobrem cálculos geográficos, custo de roteamento, RSPH, tratamento de elevação, reparo de cobertura, prevenção de ciclos e redução de nós. Isso ajuda na confiança funcional e computacional. Não prova precisão de terreno em nível de levantamento topográfico, adequação hidráulica, prontidão para obra nem desempenho em campo.
O ciclo de pesquisa 2025–2026 está concluído. Um artigo relacionado foi apresentado no workshop Data Science for Social Good (DS4SG) do SBBD 2026 e está publicado nos anais estendidos do SBBD. O Urbanus continua sendo software de pesquisa preliminar, não um sistema de saneamento implantado em campo.
Feito com
Next.js / React / TypeScript / FastAPI / Python / PostgreSQL / PostGIS / NetworkX
.png)