Module: BaiduApi::Geocoding::V2::Geocoder

Extended by:
Geocoder
Included in:
Geocoder
Defined in:
lib/baidu_api/geocoding/v2/geocoder.rb

Constant Summary collapse

API_HOST =
'http://api.map.baidu.com'
GEOCODER_PATH =
'/geocoder/v2/'

Instance Method Summary collapse

Instance Method Details

#calculate_ak_sn(queries, sk) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 30

def calculate_ak_sn(queries, sk)
  query_str = ERB::Util.url_encode("#{GEOCODER_PATH}?#{to_query(queries)}#{sk}")
  debug('unencrypted query', query_str)
  sn = Digest::MD5.hexdigest(query_str)
  debug('sn', sn)
  sn
end

#debug(subject, msg) ⇒ Object



46
47
48
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 46

def debug(subject, msg)
  puts "#{subject}: #{msg}" if BaiduApi::Geocoding.config.debug
end

#geocode(address, options) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 16

def geocode(address, options)
  queries = [
    [:address, address],
    [:output, 'json'],
    [:ak, options[:ak]]
  ]
  url = "#{API_HOST}#{GEOCODER_PATH}?#{to_query(queries)}"
  url << "&sn=#{calculate_ak_sn(queries, options[:sk])}" if options[:sk]
  debug('url', url)
  open(url) do |http|
    ret = JSON.parse(http.read)
  end
end

#to_query(arr) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 38

def to_query(arr)
  query_str = arr.map do |k, v|
    "#{CGI.escape(k.to_s)}=#{CGI.escape(v)}"
  end.join('&')
  debug('query_str', query_str)
  query_str
end