+ # ----- putpoi (user token, id, x,y,tag array,visible,baselong,basey,masterscale)
+ # returns current id, new id
+ # if new: add new row to current_nodes and nodes
+ # if old: add new row to nodes, update current_nodes
+
+ def putpoi(args)
+ usertoken,id,x,y,tags,visible,baselong,basey,masterscale=args
+ uid=getuserid(usertoken)
+ return if !uid
+ db_now='@now'+uid.to_s+id.to_i.abs.to_s+Time.new.to_i.to_s # 'now' variable name, typically 51 chars
+ ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
+
+ id=id.to_i
+ visible=visible.to_i
+ x=coord2long(x.to_f,masterscale,baselong)
+ y=coord2lat(y.to_f,masterscale,basey)
+ tagsql="'"+sqlescape(array2tag(tags))+"'"
+
+ if (id>0) then
+ ActiveRecord::Base.connection.insert("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags) VALUES (#{id},#{y},#{x},#{db_now},#{uid},#{visible},#{tagsql})");
+ ActiveRecord::Base.connection.update("UPDATE current_nodes SET latitude=#{y},longitude=#{x},timestamp=#{db_now},user_id=#{uid},visible=#{visible},tags=#{tagsql} WHERE id=#{id}");
+ newid=id
+ else
+ newid=ActiveRecord::Base.connection.insert("INSERT INTO current_nodes (latitude,longitude,timestamp,user_id,visible,tags) VALUES (#{y},#{x},#{db_now},#{uid},#{visible},#{tagsql})");
+ ActiveRecord::Base.connection.update("INSERT INTO nodes (id,latitude,longitude,timestamp,user_id,visible,tags) VALUES (#{newid},#{y},#{x},#{db_now},#{uid},#{visible},#{tagsql})");
+ end
+ [id,newid]
+ end
+
+ # ----- getpoi (id,baselong,basey,masterscale)
+ # returns id,x,y,tag array
+
+ def getpoi(args)
+ id,baselong,basey,masterscale=args; id=id.to_i
+ poi=ActiveRecord::Base.connection.select_one("SELECT latitude,longitude,tags "+
+ "FROM current_nodes WHERE visible=1 AND id=#{id}")
+ if poi.nil? then return [nil,nil,nil,''] end
+ [id,
+ long2coord(poi['longitude'].to_f,baselong,masterscale),
+ lat2coord(poi['latitude'].to_f,basey,masterscale),
+ tag2array(poi['tags'])]
+ end
+