Skip to content

Funcionamento

Raphael Rivas edited this page Dec 14, 2023 · 2 revisions

O que a API faz

O GTFS gerado pela equipe de dados é armazenado regularmente no banco de dados dessa API e exibido para o app e para o público.

  • Os dados GTFS são armazenados nas tabelas:

    • pontos_agency
    • pontos_calendar
    • pontos_calendardates
    • pontos_frequencies
    • pontos_routes
    • pontos_shaped
    • pontos_stops
    • pontos_stoptimes
    • pontos_trips

    Veja os modelos dessas tabelas em pontos/views.py

  • O GTFS armazenado é usado para que o aplicativo mostre coisas como:

    • Qual estação aquele QRCode representa
    • Quais linhas passam por aquela estação
    • Os ônibus que passam por aquela estação
    • A previsão de chegada desses ônibus
    • O trajeto que o ônibus selecionado irá percorrer (que é a própria linha desse ônibus)

⚠️ Por enquanto a operação de atualizar os dados é feita manualmente, futuramente esperamos que seja automatizado.

O GTFS na API

O GTFS dessa API possui endpoints com as seguintes regras de filtro:

  • gtfs/agency/

    • Filtros: nenhum
  • gtfs/calendar/

    • Filtros: nenhum
  • gtfs/calendar_dates/

    • Filtros: nenhum
  • gtfs/routes/

    • Filtros: nenhum
  • gtfs/trips/

    • Filtros: trip_id, trip_short_name, direction_id, service_id
  • gtfs/shapes/

    • Filtros: shape_id
  • gtfs/stops/

    • Filtros: stop_id, stop_code, stop_name
  • gtfs/stop_times/

    • Filtros: trip_id, trip_short_name, direction_id, service_id, stop_id
  • gtfs/frequencies/

    • Filtros: stop_id, stop_times, trip_id, trip_short_name, direction_id, service_id
  • Note que:

    • Em qualquer um dos endpoints ao adicionar 2 ou mais filtros eles são usados numa operação E. Exemplo: trip_id = t_1 E service_id = s_2
    • Todos os filtros permitem inserir um ou mais valores separados por vírgula. Exemplo: trip_id = t_1,t_2,t_3

Alguns endpoints possuem regras adicionais:

  • gtfs/stop_times/

    • Por padrão este endpoint mostra apenas stoptimes de trips não redundantes, ou seja, apenas uma trip para cada combinação única de trip_short_name, direction_id, service_id e shape_id.

      Para exibir trips redundantes adicione o parâmetro show_all=true. Exemplo: gtfs/stop_times/trip_short_name=601,603&show_all=true

      É feito desta maneira para evitar o envio ao aplicativo de trips com a mesma combinação de atributos, só variando o trip_id.

      Afinal, o aplicativo só precisa de uma trip por combinação única de atributos para renderizar as viagens no mapa.

      O motivo de haver trips redundantes é explicado nesta seção.

    • Ao filtrar por stop_id é aplicada a seguinte regra:

      • Se o primeiro stop_id passado como argumento for uma estação (location_type = 1), retorna apenas os stops que são plataformas.

      • Mas se o primeiro stop_id for uma plataforma (location_type = 0), retorna os stops pesquisados como parâmetro normalmente.

        Tal regra está comentada neste código fonte.

  • gtfs/frequencies/

    • Ao filtrar por stop_id, é aplicada a mesma regra de stops em stop_times:
      • Se o primeiro stop_id passado como argumento for uma estação (location_type = 1), retorna apenas os stops que são plataformas.
      • Mas se o primeiro stop_id for uma plataforma (location_type = 0), retorna os stops pesquisados como parâmetro normalmente.
Clone this wiki locally