- sql=<<-EOF
- SELECT DISTINCT current_ways.id
- FROM current_nodes,way_nodes,current_ways
- WHERE #{OSM.sql_for_area(ymin, xmin, ymax, xmax, "current_nodes.")}
- AND way_nodes.node_id=current_nodes.id
- AND way_nodes.id=current_ways.id
- AND current_nodes.visible=0
- AND current_ways.visible=0
- EOF
- waylist = ActiveRecord::Base.connection.select_all(sql)
- ways = waylist.collect {|a| a['id'].to_i }
- [ways]
- end
-
- # ----- getway
- # in: [0] SWF object name, [1] way id, [2] baselong, [3] basey,
- # [4] masterscale
- # does: gets way and all nodes
- # out: [0] SWF object name (unchanged),
- # [1] array of points
- # (where each point is an array containing
- # [0] projected long, [1] projected lat, [2] node id,
- # [3] null, [4] hash of node tags),
- # [2] xmin, [3] xmax, [4] ymin, [5] ymax (unprojected bbox)
-
- def getway(args)
- objname,wayid,baselong,basey,masterscale=args
- wayid = wayid.to_i
- points = []
- xmin = ymin = 999999
- xmax = ymax = -999999
-
- RAILS_DEFAULT_LOGGER.info(" Message: getway, id=#{wayid}")
-
- readwayquery(wayid,true).each {|row|
- points<<[long2coord(row['longitude'].to_f,baselong,masterscale),lat2coord(row['latitude'].to_f,basey,masterscale),row['id'].to_i,nil,tag2array(row['tags'])]
- xmin = [xmin,row['longitude'].to_f].min
- xmax = [xmax,row['longitude'].to_f].max
- ymin = [ymin,row['latitude'].to_f].min
- ymax = [ymax,row['latitude'].to_f].max
- }
-
- attributes={}
- attrlist=ActiveRecord::Base.connection.select_all "SELECT k,v FROM current_way_tags WHERE id=#{wayid}"
- attrlist.each {|a| attributes[a['k'].gsub(':','|')]=a['v'] }
-
- [objname,points,attributes,xmin,xmax,ymin,ymax]
- end
-
- # ----- getway_old
- # returns old version of way
-
- # in: [0] SWF object name, [1] way id,
- # [2] way version to get (or -1 for "last deleted version")
- # [3] baselong, [4] basey, [5] masterscale
- # does: gets old version of way and all constituent nodes
- # for undelete, always uses the most recent version of each node
- # (even if it's moved)
- # for revert, uses the historic version of each node, but if that node is
- # still visible and has been changed since, generates a new node id
- # out: [0] 0 (code for success), [1] SWF object name,
- # [2] array of points (as getway _except_ [3] is node.visible?, 0 or 1),
- # [4] xmin, [5] xmax, [6] ymin, [7] ymax (unprojected bbox),
- # [8] way version
-
- def getway_old(args)
- RAILS_DEFAULT_LOGGER.info(" Message: getway_old (server is #{SERVER_URL})")
-# if SERVER_URL=="www.openstreetmap.org" then return -1,"Revert is not currently enabled on the OpenStreetMap server." end
-
- objname,wayid,version,baselong,basey,masterscale=args
- wayid = wayid.to_i
- version = version.to_i
- xmin = ymin = 999999
- xmax = ymax = -999999
- points=[]
- if version<0
- historic=false
- version=getlastversion(wayid,version)