move potlatch presets to only be generated once, and allow pulling in way_tags in a way via a false primary key

This commit is contained in:
Steve Coast 2008-01-24 10:52:10 +00:00
parent 602b7b6d3f
commit 3bd92c1670
6 changed files with 88 additions and 66 deletions

View file

@ -85,75 +85,15 @@ class AmfController < ApplicationController
private
# Return presets (default tags and crap) to potlatch
# Global is set up in config/environment.rb on startup, code is in lib/osm.rb
def getpresets
return POTLATCH_PRESETS
end
# ====================================================================
# Remote calls
# ----- getpresets
# in: none
# does: reads tag preset menus, colours, and autocomplete config files
# out: [0] presets, [1] presetmenus, [2] presetnames,
# [3] colours, [4] casing, [5] areas, [6] autotags
# (all hashes)
def getpresets
RAILS_DEFAULT_LOGGER.info(" Message: getpresets")
# Read preset menus
presets={}
presetmenus={}; presetmenus['point']=[]; presetmenus['way']=[]; presetmenus['POI']=[]
presetnames={}; presetnames['point']={}; presetnames['way']={}; presetnames['POI']={}
presettype=''
presetcategory=''
# StringIO.open(txt) do |file|
File.open("#{RAILS_ROOT}/config/potlatch/presets.txt") do |file|
file.each_line {|line|
t=line.chomp
if (t=~/(\w+)\/(\w+)/) then
presettype=$1
presetcategory=$2
presetmenus[presettype].push(presetcategory)
presetnames[presettype][presetcategory]=["(no preset)"]
elsif (t=~/^(.+):\s?(.+)$/) then
pre=$1; kv=$2
presetnames[presettype][presetcategory].push(pre)
presets[pre]={}
kv.split(',').each {|a|
if (a=~/^(.+)=(.*)$/) then presets[pre][$1]=$2 end
}
end
}
end
# Read colours/styling
colours={}; casing={}; areas={}
File.open("#{RAILS_ROOT}/config/potlatch/colours.txt") do |file|
file.each_line {|line|
t=line.chomp
if (t=~/(\w+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)/) then
tag=$1
if ($2!='-') then colours[tag]=$2.hex end
if ($3!='-') then casing[tag]=$3.hex end
if ($4!='-') then areas[tag]=$4.hex end
end
}
end
# Read auto-complete
autotags={}; autotags['point']={}; autotags['way']={}; autotags['POI']={};
File.open("#{RAILS_ROOT}/config/potlatch/autocomplete.txt") do |file|
file.each_line {|line|
t=line.chomp
if (t=~/^(\w+)\/(\w+)\s+(.+)$/) then
tag=$1; type=$2; values=$3
if values=='-' then autotags[type][tag]=[]
else autotags[type][tag]=values.split(',').sort.reverse end
end
}
end
[presets,presetmenus,presetnames,colours,casing,areas,autotags]
end
# ----- whichways
@ -208,6 +148,8 @@ class AmfController < ApplicationController
basey = args[5]
masterscale = args[6]
sql=<<-EOF
SELECT DISTINCT current_ways.id
FROM current_nodes,way_nodes,current_ways

View file

@ -49,9 +49,10 @@ class Way < ActiveRecord::Base
# Find a way given it's ID, and in a single SQL call also grab its nodes
#
# You can't pull in all the tags too unless we put a sequence_id on the way_tags table and have a multipart key
def self.find_eager(id)
way = Way.find(id, :include => {:way_nodes => :node})
way = Way.find(id, :include => [:way_tags, {:way_nodes => :node}])
end
# Find a way given it's ID, and in a single SQL call also grab its nodes and tags

View file

@ -3,4 +3,6 @@ class WayNode < ActiveRecord::Base
set_primary_keys :id, :sequence_id
belongs_to :node
belongs_to :way, :foreign_key => :id
end

View file

@ -1,5 +1,8 @@
class WayTag < ActiveRecord::Base
set_table_name 'current_way_tags'
# false multipart key
set_primary_keys :id, :k, :v
belongs_to :way, :foreign_key => 'id'
end