class LazyStransClient

cliente com alguns servicos facilitadores

Constants

RAIO_TERRA

Public Instance Methods

linhas_parada(codigoParada) click to toggle source

Retrona todas as linhas de uma parada.

# File lib/lazy-strans-client.rb, line 61
def linhas_parada(codigoParada)
  codigoParada = codigoParada.to_i
  load() if @linhas.nil?
  @linhas_parada[codigoParada]
end
load() click to toggle source

Constroi um cach para informações Estaticas da api.

# File lib/lazy-strans-client.rb, line 10
def load
  @linhas = get(:linhas)
  return @linhas if @linhas.is_a? Erro
  @paradas_linha = {} # paradas de uma linha
  @linhas_parada = {} # linhas de uma parada
  @linhas.each do |l|
    paradas = get(:paradas_linha, l.codigoLinha)
    next if paradas.is_a? ErroStrans
    @paradas_linha[l.codigoLinha] = paradas
    paradas.each do |p|
    @linhas_parada[p.codigoParada] = [] unless @linhas_parada.key?(p.codigoParada)
    @linhas_parada[p.codigoParada] << p.linha
    end
  end
  @linhas_parada
end
paradas_proximas(long, lat, dist) click to toggle source

pega as paradas com distancia máxima

da localização passada.
# File lib/lazy-strans-client.rb, line 29
def paradas_proximas(long, lat, dist)
  long = long.to_f
  lat  = lat.to_f
  dist = dist.to_f
  paradas = []
  get(:paradas).each do |parada|
    if(!parada.long.nil? && !parada.long.nil?)
      dLong = calc_distan(long, parada.long)
      dLat  = calc_distan(lat, parada.lat)

      #mutiplicacao do sen da metade da distancia da Lat;
      msmdl = Math::sin(dLat/2) * Math::sin(dLat/2)
      #mutiplicaçao cos da Latitude * PI
      mclPI = Math::cos(lat * Math::PI / 180) * Math::cos(parada.lat * Math::PI / 180)
      #mutiplicacao da metade do seno
      mmds = Math::sin(dLong/2) * Math::sin(dLong/2)
      a = msmdl + mclPI * mmds

      c = 2 * Math::atan2(Math::sqrt(a), Math::sqrt(1-a))
      d = RAIO_TERRA * c
      dist_parada = d * 1000 # distancia em metros

      if(dist_parada < dist)
        parada.dist = dist_parada # metros
        paradas << parada
      end
    end
  end
  paradas
end

Private Instance Methods

calc_distan(pos1, pos2) click to toggle source

Calcula da diferenca entre duas lats ou longs.

# File lib/lazy-strans-client.rb, line 70
def calc_distan(pos1, pos2)
  (pos1 - pos2) * Math::PI / 180
end