class ArcServer::Util::LegendImage
Constants
- DEFAULT_LEGEND_WIDTH
Public Class Methods
new(map_server)
click to toggle source
# File lib/arcserver/util/legend_image.rb, line 8 def initialize(map_server) @map_server = map_server end
Public Instance Methods
get_image()
click to toggle source
# File lib/arcserver/util/legend_image.rb, line 12 def get_image legend_image = Magick::Image.new(*determine_legend_size) gc = Magick::Draw.new gc.stroke_antialias(false) gc.text_antialias = false gc.density = "96x96" y = 0 legend_info.each do |legend| name = legend[:name] gc.text(10, y+=30, name) gc.draw(legend_image) y -= 15 legend_classes = legend[:legend_groups][0][:legend_classes] legend_classes.each do |legend_class| img = Magick::Image.read_inline(legend_class[:symbol_image][:image_data]).first legend_image.composite!(img, 20, y+=25, Magick::OverCompositeOp) gc.text(50, y+14, legend_class[:label]) unless legend_class[:label].nil? gc.draw(legend_image) img.destroy! end y += 5 end legend_image end
Private Instance Methods
determine_legend_size()
click to toggle source
# File lib/arcserver/util/legend_image.rb, line 44 def determine_legend_size width = DEFAULT_LEGEND_WIDTH height = legend_info.inject(0) do |h, legend| legend_classes = legend[:legend_groups][0][:legend_classes] # expand the legend width if labels are present legend_classes.each do |legend_class| if label = legend_class[:label] label_width = label.length * 10 width = width > label_width ? width : label_width end end h += (20 + (25 * legend_classes.length)) end [width, height + 20] end
legend_info()
click to toggle source
# File lib/arcserver/util/legend_image.rb, line 64 def legend_info @legend_info ||= @map_server.get_legend_info end