- # Find all the way ids and nodes (including tags and projected lat/lng) which aren't part of those ways in an are
- #
- # The argument is an array containing the following, in order:
- # 0. minimun longitude
- # 1. minimum latitude
- # 2. maximum longitude
- # 3. maximum latitude
- # 4. baselong ??
- # 5. basey ??
- # 6. masterscale ??
- def whichways(args)
- xmin = args[0].to_f-0.01
- ymin = args[1].to_f-0.01
- xmax = args[2].to_f+0.01
- ymax = args[3].to_f+0.01
- baselong = args[4]
- basey = args[5]
- masterscale = args[6]
-
- RAILS_DEFAULT_LOGGER.info(" Message: whichways, bbox=#{xmin},#{ymin},#{xmax},#{ymax}")
-
- # find the way id's in an area
- nodes_in_area = Node.find_by_area(ymin, xmin, ymax, xmax,:conditions => "visible = 1", :include => :way_nodes)
- waynodes_in_area = nodes_in_area.collect {|node| node.way_nodes }.flatten
- ways = waynodes_in_area.collect {|way_node| way_node.id[0]}.uniq
-
- # find the node ids in an area that aren't part of ways
- node_ids_in_area = nodes_in_area.collect {|node| node.id}.uniq
- node_ids_used_in_ways = waynodes_in_area.collect {|way_node| way_node.node_id}.uniq
- node_ids_not_used_in_area = node_ids_in_area - node_ids_used_in_ways
- nodes_not_used_in_area = Node.find(node_ids_not_used_in_area)
- points = nodes_not_used_in_area.collect {|n| [n.id, n.lon_potlatch(baselong,masterscale), n.lat_potlatch(basey,masterscale), n.tags_as_hash] }
-
- [ways,points]
- end
-
- # ----- whichways_deleted
- # return array of deleted ways in current bounding box
- # in: as whichways
- # does: finds all deleted ways with a deleted node in bounding box
- # out: [0] array of way ids
- def whichways_deleted(args)
- xmin = args[0].to_f-0.01
- ymin = args[1].to_f-0.01
- xmax = args[2].to_f+0.01
- ymax = args[3].to_f+0.01
- baselong = args[4]
- basey = args[5]
- masterscale = args[6]
-
- 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
-
- # Get a way with all of it's nodes and tags
- # The input is an array with the following components, in order:
- # 0. SWF object name (String?) - fuck knows
- # 1. wayid (String?) - the ID of the way to get
- # 2. baselong - fuck knows
- # 3. basey - fuck knows
- # 4. masterscale - fuck knows
- #
- # The output is an array which contains all the nodes (with projected latitude and longitude) and tags for a way (and all the nodes tags). It also has the way's unprojected (WGS84) bbox.
- #
- # FIXME: The server really shouldn't be figuring out a ways bounding box and doing projection for potlatch
- # FIXME: the argument splitting should be done in the 'talk' method, not here
- #
- def getway(args)
- objname,wayid,baselong,basey,masterscale = args
- wayid = wayid.to_i
-
- RAILS_DEFAULT_LOGGER.info(" Message: getway, id=#{wayid}")
-
- way = Way.find_eager(wayid)
- long_array = []
- lat_array = []
- points = []
-
- way.way_nodes.each do |way_node|
- node = way_node.node # get the node record
- projected_longitude = node.lon_potlatch(baselong,masterscale) # do projection for potlatch
- projected_latitude = node.lat_potlatch(basey,masterscale)
- id = node.id
- tags_hash = node.tags_as_hash
-
- points << [projected_longitude, projected_latitude, id, nil, tags_hash] # FIXME remove the nil in potlatch. performance matters y'know!
- long_array << projected_longitude
- lat_array << projected_latitude
- end