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