cuke: keep number nodes locally, not in osm file
This commit is contained in:
parent
1fc11a6b06
commit
5eecd0a57d
@ -18,12 +18,13 @@ Given /^the node map$/ do |table|
|
|||||||
unless name.empty?
|
unless name.empty?
|
||||||
raise "*** node invalid name '#{name}', must be single characters" unless name.size == 1
|
raise "*** node invalid name '#{name}', must be single characters" unless name.size == 1
|
||||||
raise "*** invalid node name '#{name}', must me alphanumeric" unless name.match /[a-z0-9]/
|
raise "*** invalid node name '#{name}', must me alphanumeric" unless name.match /[a-z0-9]/
|
||||||
|
if name.match /[a-z]/
|
||||||
raise "*** duplicate node '#{name}'" if name_node_hash[name]
|
raise "*** duplicate node '#{name}'" if name_node_hash[name]
|
||||||
node = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+ci*@zoom, ORIGIN[1]-ri*@zoom
|
add_osm_node name, *table_coord_to_lonlat(ci,ri)
|
||||||
node << { :name => name }
|
else
|
||||||
node.uid = OSM_UID
|
raise "*** duplicate node '#{name}'" if location_hash[name]
|
||||||
osm_db << node
|
add_location name, *table_coord_to_lonlat(ci,ri)
|
||||||
name_node_hash[name] = node
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -32,21 +33,18 @@ end
|
|||||||
Given /^the node locations$/ do |table|
|
Given /^the node locations$/ do |table|
|
||||||
table.hashes.each do |row|
|
table.hashes.each do |row|
|
||||||
name = row['node']
|
name = row['node']
|
||||||
raise "*** node invalid name '#{name}', must be single characters" unless name.size == 1
|
raise "*** duplicate node '#{name}'" if find_node_by_name name
|
||||||
raise "*** invalid node name '#{name}', must me alphanumeric" unless name.match /[a-z0-9]/
|
if name.match /[a-z]/
|
||||||
raise "*** duplicate node '#{name}'" if name_node_hash[name]
|
add_osm_node name, row['lon'].to_f, row['lat'].to_f
|
||||||
node = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, row['lon'].to_f, row['lat'].to_f
|
else
|
||||||
node << { :name => name }
|
add_location name, row['lon'].to_f, row['lat'].to_f
|
||||||
node.uid = OSM_UID
|
end
|
||||||
osm_db << node
|
|
||||||
name_node_hash[name] = node
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Given /^the nodes$/ do |table|
|
Given /^the nodes$/ do |table|
|
||||||
table.hashes.each do |row|
|
table.hashes.each do |row|
|
||||||
name = row.delete 'node'
|
name = row.delete 'node'
|
||||||
raise "***invalid node name '#{c}', must be single characters" unless name.size == 1
|
|
||||||
node = find_node_by_name(name)
|
node = find_node_by_name(name)
|
||||||
raise "*** unknown node '#{c}'" unless node
|
raise "*** unknown node '#{c}'" unless node
|
||||||
node << row
|
node << row
|
||||||
@ -61,8 +59,7 @@ Given /^the ways$/ do |table|
|
|||||||
nodes = row.delete 'nodes'
|
nodes = row.delete 'nodes'
|
||||||
raise "*** duplicate way '#{nodes}'" if name_way_hash[nodes]
|
raise "*** duplicate way '#{nodes}'" if name_way_hash[nodes]
|
||||||
nodes.each_char do |c|
|
nodes.each_char do |c|
|
||||||
raise "***invalid node name '#{c}', must be single characters" unless c.size == 1
|
raise "*** ways can only use names a-z, '#{name}'" unless c.match /[a-z]/
|
||||||
raise "*** ways cannot use numbered nodes, '#{name}'" unless c.match /[a-z]/
|
|
||||||
node = find_node_by_name(c)
|
node = find_node_by_name(c)
|
||||||
raise "*** unknown node '#{c}'" unless node
|
raise "*** unknown node '#{c}'" unless node
|
||||||
way << node
|
way << node
|
||||||
|
@ -3,10 +3,10 @@ When /^I request nearest I should get$/ do |table|
|
|||||||
actual = []
|
actual = []
|
||||||
OSRMLauncher.new do
|
OSRMLauncher.new do
|
||||||
table.hashes.each_with_index do |row,ri|
|
table.hashes.each_with_index do |row,ri|
|
||||||
in_node = @name_node_hash[ row['in'] ]
|
in_node = find_node_by_name row['in']
|
||||||
raise "*** unknown in-node '#{row['in']}" unless in_node
|
raise "*** unknown in-node '#{row['in']}" unless in_node
|
||||||
|
|
||||||
out_node = @name_node_hash[ row['out'] ]
|
out_node = find_node_by_name row['out']
|
||||||
raise "*** unknown out-node '#{row['out']}" unless out_node
|
raise "*** unknown out-node '#{row['out']}" unless out_node
|
||||||
|
|
||||||
response = request_nearest("#{in_node.lat},#{in_node.lon}")
|
response = request_nearest("#{in_node.lat},#{in_node.lon}")
|
||||||
|
@ -3,9 +3,9 @@ When /^I route I should get$/ do |table|
|
|||||||
actual = []
|
actual = []
|
||||||
OSRMLauncher.new do
|
OSRMLauncher.new do
|
||||||
table.hashes.each_with_index do |row,ri|
|
table.hashes.each_with_index do |row,ri|
|
||||||
from_node = @name_node_hash[ row['from'] ]
|
from_node = find_node_by_name row['from']
|
||||||
raise "*** unknown from-node '#{row['from']}" unless from_node
|
raise "*** unknown from-node '#{row['from']}" unless from_node
|
||||||
to_node = @name_node_hash[ row['to'] ]
|
to_node = find_node_by_name row['to']
|
||||||
raise "*** unknown to-node '#{row['to']}" unless to_node
|
raise "*** unknown to-node '#{row['to']}" unless to_node
|
||||||
|
|
||||||
got = {'from' => row['from'], 'to' => row['to'] }
|
got = {'from' => row['from'], 'to' => row['to'] }
|
||||||
|
@ -17,6 +17,15 @@ PROFILES_PATH = '../profiles'
|
|||||||
|
|
||||||
ORIGIN = [1,1]
|
ORIGIN = [1,1]
|
||||||
|
|
||||||
|
class Location
|
||||||
|
attr_accessor :lon,:lat
|
||||||
|
|
||||||
|
def initialize lon,lat
|
||||||
|
@lat = lat
|
||||||
|
@lon = lon
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def sanitized_scenario_title
|
def sanitized_scenario_title
|
||||||
@sanitized_scenario_title ||= @scenario_title.gsub /[^0-9A-Za-z.\-]/, '_'
|
@sanitized_scenario_title ||= @scenario_title.gsub /[^0-9A-Za-z.\-]/, '_'
|
||||||
end
|
end
|
||||||
@ -110,8 +119,30 @@ def build_ways_from_table table
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def table_coord_to_lonlat ci,ri
|
||||||
|
[ORIGIN[0]+ci*@zoom, ORIGIN[1]-ri*@zoom]
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_osm_node name,lon,lat
|
||||||
|
node = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, lon, lat
|
||||||
|
node << { :name => name }
|
||||||
|
node.uid = OSM_UID
|
||||||
|
osm_db << node
|
||||||
|
name_node_hash[name] = node
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_location name,lon,lat
|
||||||
|
location_hash[name] = Location.new(lon,lat)
|
||||||
|
end
|
||||||
|
|
||||||
def find_node_by_name s
|
def find_node_by_name s
|
||||||
name_node_hash[s.to_s]
|
raise "***invalid node name '#{s}', must be single characters" unless s.size == 1
|
||||||
|
raise "*** invalid node name '#{s}', must be alphanumeric" unless s.match /[a-z0-9]/
|
||||||
|
if s.match /[a-z]/
|
||||||
|
from_node = name_node_hash[ s.to_s ]
|
||||||
|
else
|
||||||
|
from_node = location_hash[ s.to_s ]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_way_by_name s
|
def find_way_by_name s
|
||||||
@ -135,6 +166,7 @@ end
|
|||||||
def reset_osm
|
def reset_osm
|
||||||
osm_db.clear
|
osm_db.clear
|
||||||
name_node_hash.clear
|
name_node_hash.clear
|
||||||
|
location_hash.clear
|
||||||
name_way_hash.clear
|
name_way_hash.clear
|
||||||
@osm_str = nil
|
@osm_str = nil
|
||||||
@osm_hash = nil
|
@osm_hash = nil
|
||||||
@ -157,6 +189,10 @@ def name_node_hash
|
|||||||
@name_node_hash ||= {}
|
@name_node_hash ||= {}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def location_hash
|
||||||
|
@location_hash ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
def name_way_hash
|
def name_way_hash
|
||||||
@name_way_hash ||= {}
|
@name_way_hash ||= {}
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user