api_distance_public_transportation

API Distância do Transporte público em São Paulo-BR 🚌

Python tests


English version: README.md


Sobre a API:

O principal objetivo dessa API REST é calcular a distância entre um ponto específico (latitude, longitude) e o transporte público mais próximo.

Usando como base:

Framework FastAPI:

Documentação: https://fastapi.tiangolo.com

Código Fonte: https://github.com/tiangolo/fastapi

GeoPandas:

Documentação: https://geopandas.org/en/stable/

Código Fonte: https://github.com/geopandas/geopandas

Dados:

Shapefiles: https://geosampa.prefeitura.sp.gov.br/PaginasPublicas/_SBC.aspx


Rodando o Projeto:

Local 🥉 :

Recomendo utilizar um virtualenv.

Instalação dos pacotes:

poetry install

ou

pip install --no-cache-dir --upgrade -r requirements.txt

Run:

uvicorn api_distance_public_transportation.main:app --reload

Documentação 👇

http://127.0.0.1:8000/docs

http://127.0.0.1:8000/redoc


Docker 🥈 :

Build e Run:

docker build -t {name_docker} .
docker run -p 8080:8080 {name_docker}

Documentação 👇

http://127.0.0.1:8080/docs

http://127.0.0.1:8080/redoc


K8s 🥇 :

Eu usei o Minikube então pode ser necessário adaptar dependendo do caso.

Algumas configurações interessantes se for usar Minikube:

minikube start
minikube addons enable ingress
alias kubectl="minikube kubectl --"

Criando nossos recursos no K8s:

kubectl apply -f k8s/kube_deployment.yaml

Pegando informações do nosso ingress:

kubectl get ingress

Utilizando a IP do ADDRESS podemos acessar a aplicação. get ingress

Documentação 👇

http://192.168.49.2/docs

http://192.168.49.2/redoc

Observação usamos uma imagem no DockerHub 👉 bmesquitaa


Exemplo:

Request body

{
   "lat": -23.563949,
   "lon": -46.6568110
}

Responses

{
   "estacao_metro_km": 0.45,
   "estacao_trem_km": 3.31,
   "ponto_onibus_km": 0.26,
   "terminal_onibus_km": 2.35
}