Class: LazyStransClient

Inherits:
StransClient show all
Defined in:
lib/lazy-strans-client.rb

Overview

cliente com alguns servicos facilitadores

Constant Summary collapse

RAIO_TERRA =

KM

6378.137

Constants inherited from StransClient

StransClient::PATHS

Instance Method Summary collapse

Methods inherited from StransClient

#get, #initialize

Constructor Details

This class inherits a constructor from StransClient

Instance Method Details

#linhas_parada(codigoParada) ⇒ Object

Retrona todas as linhas de uma parada.



61
62
63
64
65
# File 'lib/lazy-strans-client.rb', line 61

def linhas_parada(codigoParada)
  codigoParada = codigoParada.to_i
  load() if @linhas.nil?
  @linhas_parada[codigoParada]
end

#loadObject

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



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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) ⇒ Object

pega as paradas com distancia máxima da localização passada.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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