further work on 0.6 history (not quite complete yet)
This commit is contained in:
parent
5143fbcd5b
commit
e827a04607
6 changed files with 271 additions and 126 deletions
|
@ -27,7 +27,10 @@
|
||||||
# return(-1,"message") <-- just puts up a dialogue
|
# return(-1,"message") <-- just puts up a dialogue
|
||||||
# return(-2,"message") <-- also asks the user to e-mail me
|
# return(-2,"message") <-- also asks the user to e-mail me
|
||||||
#
|
#
|
||||||
# To write to the Rails log, use RAILS_DEFAULT_LOGGER.info("message").
|
# To write to the Rails log, use logger.info("message").
|
||||||
|
|
||||||
|
# Remaining issues:
|
||||||
|
# * version conflict when POIs and ways are reverted
|
||||||
|
|
||||||
class AmfController < ApplicationController
|
class AmfController < ApplicationController
|
||||||
require 'stringio'
|
require 'stringio'
|
||||||
|
@ -75,7 +78,7 @@ class AmfController < ApplicationController
|
||||||
when 'whichways_deleted'; results[index]=AMF.putdata(index,whichways_deleted(*args))
|
when 'whichways_deleted'; results[index]=AMF.putdata(index,whichways_deleted(*args))
|
||||||
when 'getway'; results[index]=AMF.putdata(index,getway(args[0].to_i))
|
when 'getway'; results[index]=AMF.putdata(index,getway(args[0].to_i))
|
||||||
when 'getrelation'; results[index]=AMF.putdata(index,getrelation(args[0].to_i))
|
when 'getrelation'; results[index]=AMF.putdata(index,getrelation(args[0].to_i))
|
||||||
when 'getway_old'; results[index]=AMF.putdata(index,getway_old(args[0].to_i,args[1].to_i))
|
when 'getway_old'; results[index]=AMF.putdata(index,getway_old(args[0].to_i,args[1]))
|
||||||
when 'getway_history'; results[index]=AMF.putdata(index,getway_history(args[0].to_i))
|
when 'getway_history'; results[index]=AMF.putdata(index,getway_history(args[0].to_i))
|
||||||
when 'getnode_history'; results[index]=AMF.putdata(index,getnode_history(args[0].to_i))
|
when 'getnode_history'; results[index]=AMF.putdata(index,getnode_history(args[0].to_i))
|
||||||
when 'findgpx'; results[index]=AMF.putdata(index,findgpx(*args))
|
when 'findgpx'; results[index]=AMF.putdata(index,findgpx(*args))
|
||||||
|
@ -180,8 +183,9 @@ class AmfController < ApplicationController
|
||||||
# used in any way, rel is any relation which refers to either a way
|
# used in any way, rel is any relation which refers to either a way
|
||||||
# or node that we're returning.
|
# or node that we're returning.
|
||||||
def whichways(xmin, ymin, xmax, ymax) #:doc:
|
def whichways(xmin, ymin, xmax, ymax) #:doc:
|
||||||
xmin -= 0.01; ymin -= 0.01
|
enlarge = [(xmax-xmin)/8,0.01].min
|
||||||
xmax += 0.01; ymax += 0.01
|
xmin -= enlarge; ymin -= enlarge
|
||||||
|
xmax += enlarge; ymax += enlarge
|
||||||
|
|
||||||
# check boundary is sane and area within defined
|
# check boundary is sane and area within defined
|
||||||
# see /config/application.yml
|
# see /config/application.yml
|
||||||
|
@ -202,7 +206,7 @@ class AmfController < ApplicationController
|
||||||
|
|
||||||
# find the node ids in an area that aren't part of ways
|
# find the node ids in an area that aren't part of ways
|
||||||
nodes_not_used_in_area = nodes_in_area.select { |node| node.ways.empty? }
|
nodes_not_used_in_area = nodes_in_area.select { |node| node.ways.empty? }
|
||||||
points = nodes_not_used_in_area.collect { |n| [n.id, n.lon, n.lat, n.tags, n.version] }
|
points = nodes_not_used_in_area.collect { |n| [n.id, n.lon, n.lat, n.tags, n.version] }.uniq
|
||||||
|
|
||||||
# find the relations used by those nodes and ways
|
# find the relations used by those nodes and ways
|
||||||
relations = Relation.find_for_nodes(nodes_in_area.collect { |n| n.id }, :conditions => {:visible => true}) +
|
relations = Relation.find_for_nodes(nodes_in_area.collect { |n| n.id }, :conditions => {:visible => true}) +
|
||||||
|
@ -210,7 +214,7 @@ class AmfController < ApplicationController
|
||||||
relations = relations.collect { |relation| [relation.id,relation.version] }.uniq
|
relations = relations.collect { |relation| [relation.id,relation.version] }.uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
[0,ways, points, relations]
|
[0, ways, points, relations]
|
||||||
|
|
||||||
rescue Exception => err
|
rescue Exception => err
|
||||||
[-2,"Sorry - I can't get the map for that area."]
|
[-2,"Sorry - I can't get the map for that area."]
|
||||||
|
@ -220,8 +224,9 @@ class AmfController < ApplicationController
|
||||||
# with a deleted node only - not POIs or relations).
|
# with a deleted node only - not POIs or relations).
|
||||||
|
|
||||||
def whichways_deleted(xmin, ymin, xmax, ymax) #:doc:
|
def whichways_deleted(xmin, ymin, xmax, ymax) #:doc:
|
||||||
xmin -= 0.01; ymin -= 0.01
|
enlarge = [(xmax-xmin)/8,0.01].min
|
||||||
xmax += 0.01; ymax += 0.01
|
xmin -= enlarge; ymin -= enlarge
|
||||||
|
xmax += enlarge; ymax += enlarge
|
||||||
|
|
||||||
# check boundary is sane and area within defined
|
# check boundary is sane and area within defined
|
||||||
# see /config/application.yml
|
# see /config/application.yml
|
||||||
|
@ -284,23 +289,24 @@ class AmfController < ApplicationController
|
||||||
# 3. hash of tags,
|
# 3. hash of tags,
|
||||||
# 4. version,
|
# 4. version,
|
||||||
# 5. is this the current, visible version? (boolean)
|
# 5. is this the current, visible version? (boolean)
|
||||||
#
|
|
||||||
# *** FIXME:
|
|
||||||
# Should work by timestamp, not version (so that we can recover versions when
|
|
||||||
# a node has been changed, but not the enclosing way)
|
|
||||||
# Use strptime (http://www.ruby-doc.org/core/classes/DateTime.html) to
|
|
||||||
# to turn string back into timestamp.
|
|
||||||
|
|
||||||
def getway_old(id, version) #:doc:
|
def getway_old(id, timestamp) #:doc:
|
||||||
if version < 0
|
if timestamp == ''
|
||||||
|
# undelete
|
||||||
old_way = OldWay.find(:first, :conditions => ['visible = ? AND id = ?', true, id], :order => 'version DESC')
|
old_way = OldWay.find(:first, :conditions => ['visible = ? AND id = ?', true, id], :order => 'version DESC')
|
||||||
points = old_way.get_nodes_undelete unless old_way.nil?
|
points = old_way.get_nodes_undelete unless old_way.nil?
|
||||||
else
|
else
|
||||||
old_way = OldWay.find(:first, :conditions => ['id = ? AND version = ?', id, version])
|
# revert
|
||||||
points = old_way.get_nodes_revert unless old_way.nil?
|
timestamp = DateTime.strptime(timestamp, "%d %b %Y, %H:%M:%S")
|
||||||
|
old_way = OldWay.find(:first, :conditions => ['id = ? AND timestamp <= ?', id, timestamp], :order => 'timestamp DESC')
|
||||||
|
points = old_way.get_nodes_revert(timestamp) unless old_way.nil?
|
||||||
|
if !old_way.visible
|
||||||
|
return [-1, "Sorry, the way was deleted at that time - please revert to a previous version."]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if old_way.nil?
|
if old_way.nil?
|
||||||
|
# *** FIXME: shouldn't this be returning an error?
|
||||||
return [-1, id, [], {}, -1,0]
|
return [-1, id, [], {}, -1,0]
|
||||||
else
|
else
|
||||||
curway=Way.find(id)
|
curway=Way.find(id)
|
||||||
|
@ -309,67 +315,68 @@ class AmfController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Find history of a way. Returns 'way', id, and
|
# Find history of a way.
|
||||||
# an array of previous versions.
|
# Returns 'way', id, and an array of previous versions:
|
||||||
|
# - formerly [old_way.version, old_way.timestamp.strftime("%d %b %Y, %H:%M"), old_way.visible ? 1 : 0, user, uid]
|
||||||
|
# - now [timestamp,user,uid]
|
||||||
#
|
#
|
||||||
# *** FIXME:
|
# Heuristic: Find all nodes that have ever been part of the way;
|
||||||
# Should look for changes in constituent nodes as well,
|
|
||||||
# and return timestamps.
|
|
||||||
# Heuristic: Find all nodes that have ever been part of the way;
|
|
||||||
# get a list of their revision dates; add revision dates of the way;
|
# get a list of their revision dates; add revision dates of the way;
|
||||||
# sort and collapse list (to within 2 seconds); trim all dates before the
|
# sort and collapse list (to within 2 seconds); trim all dates before the
|
||||||
# start dateÊof the way.
|
# start date of the way.
|
||||||
|
|
||||||
def getway_history(wayid) #:doc:
|
def getway_history(wayid) #:doc:
|
||||||
|
|
||||||
# Find list of revision dates for way and all constituent nodes
|
begin
|
||||||
revdates=[]
|
# Find list of revision dates for way and all constituent nodes
|
||||||
Way.find(wayid).old_ways.collect do |a|
|
revdates=[]
|
||||||
revdates.push(a.timestamp)
|
revusers={}
|
||||||
a.nds.each do |n|
|
Way.find(wayid).old_ways.collect do |a|
|
||||||
Node.find(n).old_nodes.collect do |o|
|
revdates.push(a.timestamp)
|
||||||
revdates.push(o.timestamp)
|
unless revusers.has_key?(a.timestamp.to_i) then revusers[a.timestamp.to_i]=change_user(a) end
|
||||||
|
a.nds.each do |n|
|
||||||
|
Node.find(n).old_nodes.collect do |o|
|
||||||
|
revdates.push(o.timestamp)
|
||||||
|
unless revusers.has_key?(o.timestamp.to_i) then revusers[o.timestamp.to_i]=change_user(o) end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
waycreated=revdates[0]
|
||||||
|
revdates.uniq!
|
||||||
|
revdates.sort!
|
||||||
|
revdates.reverse!
|
||||||
|
|
||||||
|
# Remove any dates (from nodes) before first revision date of way
|
||||||
|
revdates.delete_if { |d| d<waycreated }
|
||||||
|
# Remove any elements where 2 seconds doesn't elapse before next one
|
||||||
|
revdates.delete_if { |d| revdates.include?(d+1) or revdates.include?(d+2) }
|
||||||
|
# Collect all in one nested array
|
||||||
|
revdates.collect! {|d| [d.strftime("%d %b %Y, %H:%M:%S")] + revusers[d.to_i] }
|
||||||
|
|
||||||
|
return ['way',wayid,revdates]
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
return ['way', wayid, []]
|
||||||
end
|
end
|
||||||
waycreated=revdates[0]
|
|
||||||
revdates.uniq!
|
|
||||||
revdates.sort!
|
|
||||||
|
|
||||||
# Remove any dates (from nodes) before first revision date of way
|
|
||||||
revdates.delete_if { |d| d<waycreated }
|
|
||||||
# Remove any elements where 2 seconds doesn't elapse before next one
|
|
||||||
revdates.delete_if { |d| revdates.include?(d+1) or revdates.include?(d+2) }
|
|
||||||
|
|
||||||
RAILS_DEFAULT_LOGGER.info("** revision dates: #{revdates.inspect}")
|
|
||||||
RAILS_DEFAULT_LOGGER.info("** range: #{revdates[-1]-revdates[0]}")
|
|
||||||
|
|
||||||
history = Way.find(wayid).old_ways.reverse.collect do |old_way|
|
|
||||||
user_object = old_way.changeset.user
|
|
||||||
user = user_object.data_public? ? user_object.display_name : 'anonymous'
|
|
||||||
uid = user_object.data_public? ? user_object.id : 0
|
|
||||||
[old_way.version, old_way.timestamp.strftime("%d %b %Y, %H:%M"), old_way.visible ? 1 : 0, user, uid]
|
|
||||||
end
|
|
||||||
|
|
||||||
return ['way',wayid,history]
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
return ['way', wayid, []]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Find history of a node. Returns 'node', id, and
|
# Find history of a node. Returns 'node', id, and an array of previous versions as above.
|
||||||
# an array of previous versions.
|
|
||||||
|
|
||||||
def getnode_history(nodeid) #:doc:
|
def getnode_history(nodeid) #:doc:
|
||||||
history = Node.find(nodeid).old_nodes.reverse.collect do |old_node|
|
begin
|
||||||
user_object = old_node.changeset.user
|
history = Node.find(nodeid).old_nodes.reverse.collect do |old_node|
|
||||||
user = user_object.data_public? ? user_object.display_name : 'anonymous'
|
[old_node.timestamp.strftime("%d %b %Y, %H:%M:%S")] + change_user(old_node)
|
||||||
uid = user_object.data_public? ? user_object.id : 0
|
end
|
||||||
[old_node.version, old_node.timestamp.strftime("%d %b %Y, %H:%M"), old_node.visible ? 1 : 0, user, uid]
|
return ['node', nodeid, history]
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
return ['node', nodeid, []]
|
||||||
end
|
end
|
||||||
|
end
|
||||||
return ['node',nodeid,history]
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
def change_user(obj)
|
||||||
return ['node', nodeid, []]
|
user_object = obj.changeset.user
|
||||||
|
user = user_object.data_public? ? user_object.display_name : 'anonymous'
|
||||||
|
uid = user_object.data_public? ? user_object.id : 0
|
||||||
|
[user,uid]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Find GPS traces with specified name/id.
|
# Find GPS traces with specified name/id.
|
||||||
|
@ -582,17 +589,6 @@ RAILS_DEFAULT_LOGGER.info("** range: #{revdates[-1]-revdates[0]}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# -- Delete any unique nodes no longer used
|
|
||||||
|
|
||||||
uniques=uniques-pointlist
|
|
||||||
uniques.each do |n|
|
|
||||||
node = Node.find(n)
|
|
||||||
new_node = Node.new
|
|
||||||
new_node.changeset_id = changeset
|
|
||||||
new_node.version = version
|
|
||||||
node.delete_with_history!(new_node, user)
|
|
||||||
end
|
|
||||||
|
|
||||||
# -- Save revised way
|
# -- Save revised way
|
||||||
|
|
||||||
pointlist.collect! {|a|
|
pointlist.collect! {|a|
|
||||||
|
@ -609,6 +605,18 @@ RAILS_DEFAULT_LOGGER.info("** range: #{revdates[-1]-revdates[0]}")
|
||||||
elsif way.tags!=attributes or way.nds!=pointlist or !way.visible?
|
elsif way.tags!=attributes or way.nds!=pointlist or !way.visible?
|
||||||
way.update_from(new_way, user)
|
way.update_from(new_way, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# -- Delete any unique nodes no longer used
|
||||||
|
|
||||||
|
uniques=uniques-pointlist
|
||||||
|
uniques.each do |n|
|
||||||
|
node = Node.find(n)
|
||||||
|
new_node = Node.new
|
||||||
|
new_node.changeset_id = changeset
|
||||||
|
new_node.version = node.version
|
||||||
|
node.delete_with_history!(new_node, user)
|
||||||
|
end
|
||||||
|
|
||||||
end # transaction
|
end # transaction
|
||||||
|
|
||||||
[0, originalway, way.id, renumberednodes, way.version, nodeversions]
|
[0, originalway, way.id, renumberednodes, way.version, nodeversions]
|
||||||
|
@ -697,11 +705,11 @@ RAILS_DEFAULT_LOGGER.info("** range: #{revdates[-1]-revdates[0]}")
|
||||||
#
|
#
|
||||||
# Returns array of id, long, lat, hash of tags, version.
|
# Returns array of id, long, lat, hash of tags, version.
|
||||||
|
|
||||||
def getpoi(id,version) #:doc:
|
def getpoi(id,timestamp) #:doc:
|
||||||
if version>0 then
|
if timestamp == '' then
|
||||||
n = OldNode.find(id, :conditions=>['version=?',version])
|
|
||||||
else
|
|
||||||
n = Node.find(id)
|
n = Node.find(id)
|
||||||
|
else
|
||||||
|
n = OldNode.find(id, :conditions=>['timestamp=?',DateTime.strptime(timestamp, "%d %b %Y, %H:%M:%S")])
|
||||||
end
|
end
|
||||||
|
|
||||||
if n
|
if n
|
||||||
|
@ -729,27 +737,29 @@ RAILS_DEFAULT_LOGGER.info("** range: #{revdates[-1]-revdates[0]}")
|
||||||
# Need a transaction so that if one item fails to delete, the whole delete fails.
|
# Need a transaction so that if one item fails to delete, the whole delete fails.
|
||||||
Way.transaction do
|
Way.transaction do
|
||||||
|
|
||||||
|
# delete the way
|
||||||
|
old_way = Way.find(way_id)
|
||||||
|
delete_way = Way.new
|
||||||
|
delete_way.version = way_version
|
||||||
|
delete_way.changeset_id = changeset_id
|
||||||
|
old_way.delete_with_history!(delete_way, user)
|
||||||
|
|
||||||
# FIXME: would be good not to make two history entries when removing
|
# FIXME: would be good not to make two history entries when removing
|
||||||
# two nodes from the same relation
|
# two nodes from the same relation
|
||||||
old_way = Way.find(way_id)
|
|
||||||
#old_way.unshared_node_ids.each do |n|
|
#old_way.unshared_node_ids.each do |n|
|
||||||
# deleteitemrelations(n, 'node')
|
# deleteitemrelations(n, 'node')
|
||||||
#end
|
#end
|
||||||
#deleteitemrelations(way_id, 'way')
|
#deleteitemrelations(way_id, 'way')
|
||||||
|
|
||||||
|
|
||||||
#way.delete_with_relations_and_nodes_and_history(changeset_id.to_i)
|
#way.delete_with_relations_and_nodes_and_history(changeset_id.to_i)
|
||||||
old_way.unshared_node_ids.each do |node_id|
|
old_way.unshared_node_ids.each do |node_id|
|
||||||
# delete the node
|
# delete the node
|
||||||
node = Node.find(node_id)
|
node = Node.find(node_id)
|
||||||
delete_node = Node.new
|
delete_node = Node.new
|
||||||
delete_node.version = node_id_version[node_id]
|
delete_node.changeset_id = changeset_id
|
||||||
|
delete_node.version = node_id_version[node_id.to_s]
|
||||||
node.delete_with_history!(delete_node, user)
|
node.delete_with_history!(delete_node, user)
|
||||||
end
|
end
|
||||||
# delete the way
|
|
||||||
delete_way = Way.new
|
|
||||||
delete_way.version = way_version
|
|
||||||
old_way.delete_with_history!(delete_way, user)
|
|
||||||
end # transaction
|
end # transaction
|
||||||
[0, way_id]
|
[0, way_id]
|
||||||
rescue OSM::APIChangesetAlreadyClosedError => ex
|
rescue OSM::APIChangesetAlreadyClosedError => ex
|
||||||
|
@ -770,11 +780,6 @@ RAILS_DEFAULT_LOGGER.info("** range: #{revdates[-1]-revdates[0]}")
|
||||||
# ====================================================================
|
# ====================================================================
|
||||||
# Support functions
|
# Support functions
|
||||||
|
|
||||||
# delete a way and its nodes that aren't part of other ways
|
|
||||||
# this functionality used to be in the model, however it is specific to amf
|
|
||||||
# controller
|
|
||||||
#def delete_unshared_nodes(changeset_id, way_id)
|
|
||||||
|
|
||||||
# Remove a node or way from all relations
|
# Remove a node or way from all relations
|
||||||
# FIXME needs version, changeset, and user
|
# FIXME needs version, changeset, and user
|
||||||
# Fixme make sure this doesn't depend on anything and delete this, as potlatch
|
# Fixme make sure this doesn't depend on anything and delete this, as potlatch
|
||||||
|
|
|
@ -134,10 +134,10 @@ class OldWay < ActiveRecord::Base
|
||||||
points
|
points
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_nodes_revert
|
def get_nodes_revert(timestamp)
|
||||||
points=[]
|
points=[]
|
||||||
self.nds.each do |n|
|
self.nds.each do |n|
|
||||||
oldnode=OldNode.find(:first, :conditions=>['id=? AND timestamp<=?',n,self.timestamp], :order=>"timestamp DESC")
|
oldnode=OldNode.find(:first, :conditions=>['id=? AND timestamp<=?',n,timestamp], :order=>"timestamp DESC")
|
||||||
curnode=Node.find(n)
|
curnode=Node.find(n)
|
||||||
id=n; v=curnode.visible ? 1 : 0
|
id=n; v=curnode.visible ? 1 : 0
|
||||||
if oldnode.lat!=curnode.lat or oldnode.lon!=curnode.lon or oldnode.tags!=curnode.tags then
|
if oldnode.lat!=curnode.lat or oldnode.lon!=curnode.lon or oldnode.tags!=curnode.tags then
|
||||||
|
|
|
@ -82,12 +82,31 @@ is_in/way -
|
||||||
note/point -
|
note/point -
|
||||||
note/POI -
|
note/POI -
|
||||||
note/way -
|
note/way -
|
||||||
source/point -
|
source/point survey,Yahoo,NPE,local_knowledge,GPS,cadastre
|
||||||
source/POI -
|
source/POI survey,Yahoo,NPE,local_knowledge,GPS,cadastre
|
||||||
source/way -
|
source/way survey,Yahoo,NPE,local_knowledge,GPS,cadastre
|
||||||
postal_code/point -
|
postal_code/point -
|
||||||
postal_code/POI -
|
postal_code/POI -
|
||||||
postal_code/way -
|
postal_code/way -
|
||||||
description/point -
|
description/point -
|
||||||
description/POI -
|
description/POI -
|
||||||
description/way -
|
description/way -
|
||||||
|
addr:housenumber/point -
|
||||||
|
addr:street/point -
|
||||||
|
addr:full/point -
|
||||||
|
addr:postcode/point -
|
||||||
|
addr:city/point -
|
||||||
|
addr:country/point -
|
||||||
|
addr:housenumber/POI -
|
||||||
|
addr:street/POI -
|
||||||
|
addr:full/POI -
|
||||||
|
addr:postcode/POI -
|
||||||
|
addr:city/POI -
|
||||||
|
addr:country/POI -
|
||||||
|
addr:housenumber/way -
|
||||||
|
addr:street/way -
|
||||||
|
addr:full/way -
|
||||||
|
addr:postcode/way -
|
||||||
|
addr:city/way -
|
||||||
|
addr:country/way -
|
||||||
|
addr:interpolation/way even,odd,all,alphabetic
|
||||||
|
|
|
@ -12,17 +12,16 @@ way/footway
|
||||||
public footpath: highway=footway,foot=yes,tracktype=
|
public footpath: highway=footway,foot=yes,tracktype=
|
||||||
permissive path: highway=footway,foot=permissive,tracktype=
|
permissive path: highway=footway,foot=permissive,tracktype=
|
||||||
bridleway: highway=bridleway,foot=yes,tracktype=
|
bridleway: highway=bridleway,foot=yes,tracktype=
|
||||||
paved track: highway=track,foot=,tracktype=grade1
|
paved track: highway=track,foot=,surface=paved
|
||||||
gravel track: highway=track,foot=,tracktype=grade2
|
gravel track: highway=track,foot=,surface=gravel
|
||||||
rough track: highway=track,foot=,tracktype=grade3
|
dirt track: highway=track,foot=,surface=dirt
|
||||||
dirt track: highway=track,foot=,tracktype=grade4
|
grass track: highway=track,foot=,surface=grass
|
||||||
grass track: highway=track,foot=,tracktype=grade5
|
|
||||||
|
|
||||||
way/cycleway
|
way/cycleway
|
||||||
cycle lane: highway=cycleway,cycleway=lane,ncn_ref=
|
cycle track: highway=cycleway,ncn_ref=,rcn_ref=,lcn_ref=
|
||||||
cycle track: highway=cycleway,cycleway=track,ncn_ref=
|
cycle track (national route): highway=cycleway,ncn_ref=(type route number)
|
||||||
cycle lane (NCN): highway=cycleway,cycleway=lane,name=(type name here),ncn_ref=(type route number)
|
cycle track (regional route): highway=cycleway,rcn_ref=(type route number)
|
||||||
cycle track (NCN): highway=cycleway,cycleway=track,name=(type name here),ncn_ref=(type route number)
|
cycle track (local route): highway=cycleway,lcn_ref=(type route number)
|
||||||
|
|
||||||
way/waterway
|
way/waterway
|
||||||
canal: waterway=canal,name=(type name here)
|
canal: waterway=canal,name=(type name here)
|
||||||
|
@ -42,9 +41,57 @@ disused railway tracks: railway=disused
|
||||||
course of old railway: railway=abandoned
|
course of old railway: railway=abandoned
|
||||||
railway platform: railway=platform
|
railway platform: railway=platform
|
||||||
|
|
||||||
|
way/tourism
|
||||||
|
archaeological: place=,tourism=,historic=archaeological_site,name=(type name here)
|
||||||
|
attraction: place=,tourism=attraction,historic=,amenity=,name=(type name here)
|
||||||
|
campsite: place=,tourism=camp_site,historic=,amenity=,name=(type name here)
|
||||||
|
caravan site: place=,tourism=camp_site,historic=,amenity=,name=(type name here)
|
||||||
|
castle: place=,tourism=,historic=castle,name=(type name here)
|
||||||
|
hotel: place=,tourism=hotel,historic=,amenity=,name=(type name here),operator=(type chain here)
|
||||||
|
museum: place=,tourism=museum,historic=,amenity=,name=(type name here)
|
||||||
|
ruins: place=,tourism=,historic=ruins,name=(type name here)
|
||||||
|
|
||||||
|
way/recreation
|
||||||
|
golf course: landuse=,leisure=golf_course
|
||||||
|
pitch: landuse=,leisure=pitch, sport=(type sport here)
|
||||||
|
playground: landuse=,leisure=playground
|
||||||
|
recreation ground: landuse=recreation_ground,leisure=
|
||||||
|
sports centre: landuse=,leisure=sports_centre
|
||||||
|
stadium: landuse=,leisure=stadium
|
||||||
|
|
||||||
|
way/utility
|
||||||
|
college: place=,tourism=,amenity=college,name=(type name here)
|
||||||
|
school: place=,tourism=,amenity=school,name=(type name here)
|
||||||
|
hospital: place=,tourism=,amenity=hospital,name=(type name here)
|
||||||
|
library: place=,tourism=,amenity=library,name=(type name here)
|
||||||
|
university: place=,tourism=,amenity=university,name=(type name here)
|
||||||
|
|
||||||
way/natural
|
way/natural
|
||||||
lake: natural=water,landuse=
|
coastline: natural=coastline,landuse=,leisure=
|
||||||
forest: landuse=forest,natural=
|
fell: natural=fell,landuse=,leisure=
|
||||||
|
heath: natural=heath,landuse=,leisure=
|
||||||
|
lake: natural=water,landuse=,leisure=
|
||||||
|
forest: landuse=forest,natural=,leisure=
|
||||||
|
marsh: natural=marsh,landuse=,leisure=
|
||||||
|
nature reserve: leisure=nature_reserve,landuse=,natural=
|
||||||
|
scree: natural=scree,landuse=,leisure=
|
||||||
|
woodland: natural=wood,landuse=,leisure=
|
||||||
|
|
||||||
|
way/landuse
|
||||||
|
allotments: landuse=allotments,leisure=
|
||||||
|
building site: landuse=construction,leisure=
|
||||||
|
commercial: landuse=commercial,leisure=
|
||||||
|
common: landuse=,leisure=common
|
||||||
|
farm: landuse=farm,leisure=
|
||||||
|
farmyard: landuse=farmyard,leisure=
|
||||||
|
industry: landuse=industrial,leisure=
|
||||||
|
landfill site: landuse=landfill,leisure=
|
||||||
|
park: leisure=park,landuse=
|
||||||
|
quarry: landuse=quarry,leisure=
|
||||||
|
reservoir: landuse=reservoir,leisure=
|
||||||
|
residential: landuse=residential,leisure=
|
||||||
|
retail: landuse=retail,leisure=
|
||||||
|
village green: landuse=village_green,leisure=
|
||||||
|
|
||||||
point/road
|
point/road
|
||||||
mini roundabout: place=,highway=mini_roundabout
|
mini roundabout: place=,highway=mini_roundabout
|
||||||
|
@ -57,20 +104,25 @@ stile: place=,highway=stile
|
||||||
cattle grid: place=,highway=cattle_grid
|
cattle grid: place=,highway=cattle_grid
|
||||||
|
|
||||||
point/cycleway
|
point/cycleway
|
||||||
gate: place=,highway=gate
|
bike park: place=,highway=,amenity=bicycle_parking,capacity=(type number of spaces)
|
||||||
|
gate: place=,highway=gate,amenity=,capacity=
|
||||||
|
|
||||||
point/waterway
|
point/waterway
|
||||||
lock gate: place=,waterway=lock_gate
|
lock: place=,waterway=,lock=yes,name=(type name here)
|
||||||
weir: place=,waterway=weir
|
single lockgate: place=,waterway=lock_gate,lock=
|
||||||
aqueduct: place=,waterway=aqueduct
|
weir: place=,waterway=weir,lock=
|
||||||
winding hole: place=,waterway=turning_point
|
aqueduct: place=,waterway=aqueduct,lock=
|
||||||
mooring: place=,waterway=mooring
|
winding hole: place=,waterway=turning_point,lock=
|
||||||
|
mooring: place=,waterway=mooring,lock=
|
||||||
|
|
||||||
point/railway
|
point/railway
|
||||||
station: place=,railway=station,name=(type name here)
|
station: place=,railway=station,name=(type name here)
|
||||||
viaduct: place=,railway=viaduct
|
viaduct: place=,railway=viaduct
|
||||||
level crossing: place=,railway=crossing
|
level crossing: place=,railway=crossing
|
||||||
|
|
||||||
|
point/landmark
|
||||||
|
pylon: man_made=,power=tower
|
||||||
|
|
||||||
point/natural
|
point/natural
|
||||||
peak: place=,natural=peak
|
peak: place=,natural=peak
|
||||||
|
|
||||||
|
@ -78,8 +130,13 @@ POI/road
|
||||||
car park: place=,amenity=parking
|
car park: place=,amenity=parking
|
||||||
petrol station: place=,amenity=fuel
|
petrol station: place=,amenity=fuel
|
||||||
|
|
||||||
|
POI/footway
|
||||||
|
bench: amenity=bench
|
||||||
|
|
||||||
POI/cycleway
|
POI/cycleway
|
||||||
bike park: place=,amenity=bicycle_parking
|
bike park: place=,shop=,amenity=bicycle_parking,capacity=(type number of spaces)
|
||||||
|
bike rental: place=,amenity=bicycle_rental,capacity=(type number of bikes)
|
||||||
|
bike shop: place=,shop=bicycle
|
||||||
|
|
||||||
POI/place
|
POI/place
|
||||||
city: place=city,name=(type name here),is_in=(type region or county)
|
city: place=city,name=(type name here),is_in=(type region or county)
|
||||||
|
@ -89,14 +146,78 @@ village: place=village,name=(type name here),is_in=(type region or county)
|
||||||
hamlet: place=hamlet,name=(type name here),is_in=(type region or county)
|
hamlet: place=hamlet,name=(type name here),is_in=(type region or county)
|
||||||
|
|
||||||
POI/tourism
|
POI/tourism
|
||||||
attraction: place=,tourism=attraction,amenity=,religion=,denomination=
|
archaeological: place=,tourism=,historic=archaeological_site,name=(type name here)
|
||||||
church: place=,tourism=,amenity=place_of_worship,name=(type name here),religion=christian,denomination=(type denomination here)
|
artwork: place=,tourism=artwork,historic=,amenity=
|
||||||
hotel: place=,tourism=hotel,amenity=,religion=,denomination=
|
attraction: place=,tourism=attraction,historic=,amenity=,name=(type name here)
|
||||||
other religious: place=,tourism=,amenity=place_of_worship,name=(type name here),religion=(type religion),denomination=
|
cafe: place=,tourism=,historic=,amenity=cafe,name=(type name here)
|
||||||
post box: place=,amenity=post_box,tourism=,name=,religion=,denomination=
|
campsite: place=,tourism=camp_site,historic=,amenity=,name=(type name here)
|
||||||
post office: place=,amenity=post_office,tourism=,name=,religion=,denomination=
|
caravan site: place=,tourism=camp_site,historic=,amenity=,name=(type name here)
|
||||||
pub: place=,tourism=,amenity=pub,name=(type name here),religion=,denomination=
|
castle: place=,tourism=,historic=castle,name=(type name here)
|
||||||
school: place=,tourism=,amenity=school,name=(type name here),religion=,denomination=
|
cinema: place=,tourism=,historic=,amenity=cinema,name=(type name here),operator=(type chain here)
|
||||||
|
fast food: place=,tourism=,historic=,amenity=fast_food,name=(type name here)
|
||||||
|
guesthouse: place=,tourism=guest_house,historic=,amenity=,name=(type name here)
|
||||||
|
hostel: place=,tourism=hostel,historic=,amenity=,name=(type name here),operator=(type chain here)
|
||||||
|
hotel: place=,tourism=hotel,historic=,amenity=,name=(type name here),operator=(type chain here)
|
||||||
|
monument: place=,tourism=,historic=monument,name=(type name here)
|
||||||
|
museum: place=,tourism=museum,historic=,amenity=,name=(type name here)
|
||||||
|
picnic site: place=,tourism=picnic_site,historic=
|
||||||
|
pub: place=,tourism=,historic=,amenity=pub,name=(type name here)
|
||||||
|
restaurant: place=,tourism=,historic=,amenity=restaurant,name=(type name here)
|
||||||
|
ruins: place=,tourism=,historic=ruins,name=(type name here)
|
||||||
|
viewpoint: place=,tourism=viewpoint,historic=
|
||||||
|
|
||||||
|
POI/landmark
|
||||||
|
church: man_made=,amenity=place_of_worship,name=(type name here),religion=christian,denomination=(type denomination here),power=
|
||||||
|
other religious: man_made=,amenity=place_of_worship,name=(type name here),religion=(type religion),denomination=,power=
|
||||||
|
lighthouse: man_made=lighthouse,power=,amenity=,name=,religion=,denomination=
|
||||||
|
pylon: man_made=,power=tower,amenity=,name=,religion=,denomination=
|
||||||
|
windmill: man_made=windmill,power=,amenity=,name=,religion=,denomination=
|
||||||
|
|
||||||
|
POI/recreation
|
||||||
|
golf course: leisure=golf_course
|
||||||
|
pitch: leisure=pitch, sport=(type sport here)
|
||||||
|
playground: leisure=playground
|
||||||
|
recreation ground: landuse=recreation_ground,leisure=
|
||||||
|
sports centre: leisure=sports_centre
|
||||||
|
stadium: leisure=stadium
|
||||||
|
|
||||||
|
POI/shop
|
||||||
|
bank: amenity=bank,shop=,operator=(type bank name)
|
||||||
|
bike shop: amenity=,shop=bicycle,name=(type name here),operator=(type chain here)
|
||||||
|
bookshop: amenity=,shop=books,name=(type name here),operator=(type chain here)
|
||||||
|
butchers: amenity=,shop=butcher,name=(type name here),operator=(type chain here)
|
||||||
|
chemists: amenity=,shop=chemist,name=(type name here),operator=(type chain here)
|
||||||
|
convenience store: amenity=,shop=convenience,operator=(type chain here)
|
||||||
|
department store: amenity=,shop=department_store,operator=(type chain here)
|
||||||
|
DIY: amenity=,shop=doityourself,operator=(type chain here)
|
||||||
|
garden centre: amenity=,shop=garden_centre,name=(type name here),operator=(type chain here)
|
||||||
|
laundry: amenity=,shop=laundry,name=(type name here),operator=(type chain here)
|
||||||
|
off-licence: amenity=,shop=alcohol,name=(type name here),operator=(type chain here)
|
||||||
|
outdoor: amenity=,shop=outdoor,name=(type name here),operator=(type chain here)
|
||||||
|
pharmacy: amenity=pharmacy,shop=,name=(type name here),operator=(type chain here)
|
||||||
|
post office: amenity=post_office,shop=,name=(type name here)
|
||||||
|
supermarket: amenity=,shop=supermarket,operator=(type chain here)
|
||||||
|
|
||||||
|
POI/utility
|
||||||
|
college: place=,tourism=,amenity=college,name=(type name here)
|
||||||
|
post box: place=,amenity=post_box,tourism=,name=,ref=(type code here)
|
||||||
|
recycling: place=,amenity=recycling,tourism=,name=,ref=(type code here)
|
||||||
|
school: place=,tourism=,amenity=school,name=(type name here)
|
||||||
|
surgery: place=,tourism=,amenity=doctors,name=(type name here)
|
||||||
|
hospital: place=,tourism=,amenity=hospital,name=(type name here)
|
||||||
|
library: place=,tourism=,amenity=library,name=(type name here)
|
||||||
|
phone box: place=,tourism=,amenity=telephone,name=(type name here)
|
||||||
|
toilets: place=,tourism=,amenity=toilets,name=(type name here)
|
||||||
|
university: place=,tourism=,amenity=university,name=(type name here)
|
||||||
|
|
||||||
POI/natural
|
POI/natural
|
||||||
peak: place=,natural=peak
|
peak: place=,natural=peak
|
||||||
|
|
||||||
|
point/address
|
||||||
|
address: addr:housenumber=(type house number),addr:street=(type street name),addr:postcode=(type postcode),addr:city=(type town name)
|
||||||
|
|
||||||
|
POI/address
|
||||||
|
address: addr:housenumber=(type house number),addr:street=(type street name),addr:postcode=(type postcode),addr:city=(type town name)
|
||||||
|
|
||||||
|
way/address
|
||||||
|
address: addr:housenumber=(type house number),addr:street=(type street name),addr:interpolation=(type pattern of house numbers),addr:postcode=(type postcode),addr:city=(type town name)
|
||||||
|
|
|
@ -147,7 +147,7 @@ module Potlatch
|
||||||
presetcategory=$2
|
presetcategory=$2
|
||||||
presetmenus[presettype].push(presetcategory)
|
presetmenus[presettype].push(presetcategory)
|
||||||
presetnames[presettype][presetcategory]=["(no preset)"]
|
presetnames[presettype][presetcategory]=["(no preset)"]
|
||||||
elsif (t=~/^(.+):\s?(.+)$/) then
|
elsif (t=~/^([\w\s]+):\s?(.+)$/) then
|
||||||
pre=$1; kv=$2
|
pre=$1; kv=$2
|
||||||
presetnames[presettype][presetcategory].push(pre)
|
presetnames[presettype][presetcategory].push(pre)
|
||||||
presets[pre]={}
|
presets[pre]={}
|
||||||
|
@ -191,7 +191,7 @@ module Potlatch
|
||||||
File.open("#{RAILS_ROOT}/config/potlatch/autocomplete.txt") do |file|
|
File.open("#{RAILS_ROOT}/config/potlatch/autocomplete.txt") do |file|
|
||||||
file.each_line {|line|
|
file.each_line {|line|
|
||||||
t=line.chomp
|
t=line.chomp
|
||||||
if (t=~/^(\w+)\/(\w+)\s+(.+)$/) then
|
if (t=~/^([\w:]+)\/(\w+)\s+(.+)$/) then
|
||||||
tag=$1; type=$2; values=$3
|
tag=$1; type=$2; values=$3
|
||||||
if values=='-' then autotags[type][tag]=[]
|
if values=='-' then autotags[type][tag]=[]
|
||||||
else autotags[type][tag]=values.split(',').sort.reverse end
|
else autotags[type][tag]=values.split(',').sort.reverse end
|
||||||
|
|
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue