2015-03-04 18:12:26 -05:00
|
|
|
require 'net/http'
|
|
|
|
|
|
|
|
HOST = "http://127.0.0.1:#{OSRM_PORT}"
|
|
|
|
|
|
|
|
def request_matching trace=[], timestamps=[], options={}
|
|
|
|
defaults = { 'output' => 'json' }
|
2015-03-07 19:32:13 -05:00
|
|
|
locs = trace.compact.map { |w| "loc=#{w.lat},#{w.lon}" }
|
2015-03-04 18:12:26 -05:00
|
|
|
ts = timestamps.compact.map { |t| "t=#{t}" }
|
2015-03-07 19:32:13 -05:00
|
|
|
if ts.length > 0
|
|
|
|
trace_params = locs.zip(ts).map { |a| a.join('&')}
|
|
|
|
else
|
|
|
|
trace_params = locs
|
|
|
|
end
|
|
|
|
params = (trace_params + defaults.merge(options).to_param).join('&')
|
2015-03-04 18:12:26 -05:00
|
|
|
params = nil if params==""
|
2015-06-04 11:39:54 -04:00
|
|
|
|
|
|
|
if options.has_key?("post")
|
|
|
|
request_method = "POST"
|
|
|
|
options.delete("post")
|
|
|
|
else
|
|
|
|
request_method = "GET"
|
|
|
|
end
|
|
|
|
if request_method.eql? "GET"
|
|
|
|
uri = URI.parse ["#{HOST}/match", params].compact.join('?')
|
|
|
|
elsif request_method.eql? "POST"
|
|
|
|
uri = URI.parse "#{HOST}/match"
|
|
|
|
end
|
2015-03-04 18:12:26 -05:00
|
|
|
@query = uri.to_s
|
|
|
|
Timeout.timeout(OSRM_TIMEOUT) do
|
2015-06-04 11:39:54 -04:00
|
|
|
if request_method.eql? "GET"
|
|
|
|
Net::HTTP.get_response uri
|
|
|
|
elsif request_method.eql? "POST"
|
|
|
|
datas = {}
|
|
|
|
datas[:loc] = trace.compact.map { |w| "#{w.lat},#{w.lon}" }
|
|
|
|
if ts.length > 0
|
|
|
|
datas[:t] = timestamps.compact.map { |t| "#{t}" }
|
|
|
|
end
|
|
|
|
datas.merge! options
|
|
|
|
Net::HTTP.post_form uri, datas
|
|
|
|
end
|
2015-03-04 18:12:26 -05:00
|
|
|
end
|
|
|
|
rescue Errno::ECONNREFUSED => e
|
|
|
|
raise "*** osrm-routed is not running."
|
|
|
|
rescue Timeout::Error
|
|
|
|
raise "*** osrm-routed did not respond."
|
|
|
|
end
|
|
|
|
|