O cruzalinhas permite obter a lista completa das linhas de ônibus municipais que passam por um determinado lugar da cidade de São Paulo. É só colocar o marcador no mapa (clicando ou usando a caixa de busca) e o sistema lista e desenha as linhas.
Se você colocar outros marcadores, o sistema vai mostrar apenas as linhas que passam entre cada um deles. Com isso dá pra montar trajetos e comparar alternativas.
A localização pelo ponto é aproximada por um método pouco convencional, então podem aparecer linhas próximas (aproveite isso para achar alternativas). Em caso de dúvida, clique no nome da linha e veja a informação oficial e detalhadano site da SPTrans.
Lembre-se sempre que o serviço é experimental e não tem qualquer relação com a SPTrans ou com qualquer outra empresa, nem oferece qualquer garantia de funcionamento ou precisão dos dados - sempre confirme antes de sair por aí!
Quem usa transporte público em São Paulo sabe que existem algumas opções bacanas para se informar, tais como:
Infelizmente nenhuma delas listava todas as linhas em um local (ou entre dois locais), daí o projeto. A idéia não é substituir esses sites, e sim complementar o serviço deles.
A motivação inicial era recuperar os dados de itinerário das linhas, que inicialmente eram extraídos na marra. Atualmente a SPTrans disponibiliza eles em seu site para desenvolvedores, mas nem sempre foi assim.
A aplicação foi feita em Ruby On Rails, usando mapas gerados pela comunidade OpenStreetMap e tiles servidos pela Wikimedia Foundation através da biblioteca Leaflet, com busca de endereços via Nominatim.
Fazer uma busca por proximidade entre um ponto e cada trajeto é complicado: a princípio, seria preciso analisar cada segmento de reta, isso dentro de uma geometria nada trivial. Entra em cena o geohash.
O que o sistema faz é manter pré-calculado o geohash da caixa que contem cada segmento de reta, num tamanho (6 caracteres) que dá uma margem de manobra menor que 1 Km. A busca é feita sobre o geohash do ponto a ser localizado, reduzido para esse mesmo tamanho.
Com isso, localiza-se as linhas, com uma margem de erro compatível com o fato de que o pino pode não cair exatamente sobre um trajeto (e que há interesse em pegar ônibus que passem "perto").
Os hashes da linha também são usados localmente para que, caso haja mais de um ponto no mapa, o cliente possa identificar as linhas que conectam cada um deles.
Da mesma forma que eu tinha uma necessidade que os outros sites não atendiam, esse site certamente não vai atender a todos. Se você quer fazer algo diferente com esses trajetos, essa é a sua chance: as chamadas abaixo permitem incluir as mesmas informações que aparecem no cruzalinhas no seu site*.
Elas são chamadas AJAX simples, nas quais os parâmetros devem ser passados via GET, e o resultado é um objeto JSON:
URL:
http://cruzalinhas.appspot.com/linhasquepassam.json
Parâmetros: latitude (lat) e longitude (lng).
Retorno:
Array cujos elementos contém o Nome, URL, chave (key) e lista de geohashes de cada linha.
Exemplo:
linhasquepassam.json?lat=-23.546953&lng=-46.638787
URL:
http://cruzalinhas.appspot.com/linha.json
Parâmetros: chave da linha (key)
Retorno:
Array com os pontos (latitude, longitude) que compõem o trajeto.
Exemplo:
linha.json?key=10
Se você for chamar via JavaScript (AJAX), pode passar o nome de uma função no parâmetro callback, e o retorno virá "empacotado" numa chamada a esta função, permitindo chamadas a partir de outros domínios (JSONP).
* TERMOS DE USO: Você pode usar essa API no seu site, desde que ele seja público e gratuito, preste serviços à população e não pratique o mal. Um link para o cruzalinhas (ex.: "powered by cruzalinhas", ou algo que o valha) é de bom tom, assim como mandar um e-mail me falando do seu site. O serviço de API, como todo o resto, é uma cortesia bem-intencionada, não havendo garantia de funcionamento ou precisão dos dados, e eu me reservo o direito de interromper o serviço (mas farei o possível para que isso não aconteça). Não é obrigatório, mas, se possível, faça cache das informações.
digite um endereço →
ou clique no mapa →