From 3bd92c16704823e79ac61f27d05c1a9be52858f5 Mon Sep 17 00:00:00 2001 From: Steve Coast Date: Thu, 24 Jan 2008 10:52:10 +0000 Subject: [PATCH] move potlatch presets to only be generated once, and allow pulling in way_tags in a way via a false primary key --- app/controllers/amf_controller.rb | 72 +++---------------------------- app/models/way.rb | 3 +- app/models/way_node.rb | 2 + app/models/way_tag.rb | 3 ++ config/environment.rb | 5 +++ lib/osm.rb | 69 +++++++++++++++++++++++++++++ 6 files changed, 88 insertions(+), 66 deletions(-) diff --git a/app/controllers/amf_controller.rb b/app/controllers/amf_controller.rb index 60b7ab443..4b92db11c 100644 --- a/app/controllers/amf_controller.rb +++ b/app/controllers/amf_controller.rb @@ -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 diff --git a/app/models/way.rb b/app/models/way.rb index 1fe628171..2c9ce9f72 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -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 diff --git a/app/models/way_node.rb b/app/models/way_node.rb index 7f7789303..957016b9d 100644 --- a/app/models/way_node.rb +++ b/app/models/way_node.rb @@ -3,4 +3,6 @@ class WayNode < ActiveRecord::Base set_primary_keys :id, :sequence_id belongs_to :node + + belongs_to :way, :foreign_key => :id end diff --git a/app/models/way_tag.rb b/app/models/way_tag.rb index 101085f12..3f6ac8ce3 100644 --- a/app/models/way_tag.rb +++ b/app/models/way_tag.rb @@ -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 diff --git a/config/environment.rb b/config/environment.rb index be3cf2a8f..bf80499f7 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -68,3 +68,8 @@ Rails::Initializer.run do |config| # Make Active Record use UTC-base instead of local time # config.active_record.default_timezone = :utc end + +# This has to be after the above block for some reason (doesnt pull in /lib/osm.rb?) +POTLATCH_PRESETS = OSM::Potlatch.get_presets() + + diff --git a/lib/osm.rb b/lib/osm.rb index de5e73d29..6e9346bb4 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -424,4 +424,73 @@ module OSM return "#{tilesql} AND #{prefix}latitude BETWEEN #{minlat} AND #{maxlat} AND #{prefix}longitude BETWEEN #{minlon} AND #{maxlon}" end + + class Potlatch # crazy shit + + # ----- 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 self.get_presets + 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 + end + end -- 2.39.5