API REST de alto desempenho para servir fatias (tiles) de arquivos GeoTIFF com suporte a visualizações RGB e mapeamento de índice vegetativo VARI em tempo real.
Explore a documentação »
Reportar Bug
·
Solicitar Recurso
Índice
O pytiler_proxy é uma API REST desenvolvida em Express e TypeScript criada para atuar como um servidor proxy dinâmico de tiles para arquivos GeoTIFF (ortofotos geoespaciais). O projeto resolve a complexidade de manipular dados raster de alta resolução no front-end ao renderizar e fatiar imagens sob demanda a nível de servidor, integrando um script Python de processamento espectral ultrarrápido.
Além de disponibilizar fatias no formato visível (RGB), o servidor realiza cálculos aritméticos de bandas espectrais para obter o índice VARI (Visible Atmospherically Resistant Index), gerando um mapa de calor colorido sobre a vegetação para análises agrícolas e ambientais rápidas.
- Fatiamento Dinâmico: Integração nativa com
rio-tilerpara carregar apenas as coordenadas do tile requisitado sem sobrecarregar a memória do servidor. - Índices de Vegetação: Processamento matemático dinâmico usando arrays NumPy para calcular o índice VARI no backend.
- Cache Inteligente: Configuração automatizada de cache (
Cache-Control) para otimizar chamadas repetidas a fatias de mapas. - Utilitários de Performance: Script embarcado em Python para medir latências e gerar estatísticas combinadas de performance nos endpoints.
Esta seção lista os principais frameworks, linguagens e bibliotecas essenciais utilizados no projeto.
Siga as instruções abaixo para configurar uma cópia local do projeto e executá-lo em ambiente de desenvolvimento ou produção.
Certifique-se de possuir instalado em sua máquina:
- Node.js (versão
>= 20.0.0recomendada) - Python 3 (versão
>= 3.9recomendada)
- Clone o repositório:
git clone https://github.com/alissonpef/pytiler_proxy.git
- Instale as dependências gerais do projeto (isso criará o ambiente virtual Python
.venv, instalará as bibliotecas necessárias de Python e de Node.js):npm run setup
- Copie o arquivo de variáveis de ambiente de exemplo e ajuste os caminhos se necessário (por padrão aponta para
./data/ortophoto.tif):cp .env.example .env
Para executar o servidor Node em modo de desenvolvimento utilizando ts-node-dev:
npx ts-node-dev src/server.tsPara compilar o código TypeScript em JavaScript otimizado (pasta dist/) e iniciar o servidor em ambiente de produção:
- Compile o projeto:
npm run build
- Inicie o servidor Node:
npm run start
Alternativamente, você pode rodar o comando que ativa o .venv local e inicializa o servidor de uma vez:
npm run run:server- GET
/tile/:z/:x/:y: Retorna a imagem do tile recortado do raster GeoTIFF no espectro RGB tradicional. - GET
/vari/:z/:x/:y: Retorna a imagem do tile recortado com o mapeamento espectral do índice VARI aplicado em um gradiente de cores (Vermelho-Amarelo-Verde).
Exemplo de requisição (via curl):
curl http://localhost:3001/tile/18/95249/146380 -o tile.pngVocê pode analisar o tempo de resposta e a latência de geração de tiles por meio do script de testes integrado:
# Medir performance apenas do endpoint RGB
npm run perf:tile
# Medir performance apenas do endpoint VARI
npm run perf:vari
# Medir performance de ambos os endpoints simultaneamente
npm run perf:bothOs relatórios detalhados contendo estatísticas de latência média, mínima, máxima e desvio padrão serão exportados automaticamente para a pasta logs/ no formato JSON.
Contribuições tornam a comunidade open-source um espaço incrível de aprendizado, inspiração e criação. Qualquer contribuição feita será muito apreciada.
Se possuir alguma sugestão de melhoria ou correção:
- Faça um Fork do projeto
- Crie uma Branch para a sua funcionalidade (
git checkout -b feature/FuncionalidadeIncrivel) - Faça o Commit de suas alterações (
git commit -m 'Adiciona funcionalidade incrivel') - Faça o Push para a Branch (
git push origin feature/FuncionalidadeIncrivel) - Abra um Pull Request
Distribuído sob a licença MIT. Veja LICENSE para mais informações.
Alisson Pereira Ferreira - alissonpef@gmail.com - LinkedIn
Link do Projeto: https://github.com/alissonpef/pytiler_proxy
Made with ❤️ by Alisson Pereira.