Class: Visualization
- Inherits:
-
Object
- Object
- Visualization
- Defined in:
- lib/ip-world-map/visualization.rb
Instance Attribute Summary collapse
-
#circle_radius ⇒ Object
Returns the value of attribute circle_radius.
-
#position_quantization_in_degrees ⇒ Object
Returns the value of attribute position_quantization_in_degrees.
Instance Method Summary collapse
- #circle_parameters(center_x, center_y) ⇒ Object
- #display ⇒ Object
- #draw_positions(positions_lon_lat) ⇒ Object
-
#initialize ⇒ Visualization
constructor
A new instance of Visualization.
- #map_size ⇒ Object
- #new_frame ⇒ Object
- #quantize_position(*position) ⇒ Object
- #scale ⇒ Object
- #select_visible_points(points) ⇒ Object
- #x_y_from_longitude_latitude(longitude, latitude) ⇒ Object
Constructor Details
#initialize ⇒ Visualization
Returns a new instance of Visualization.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/ip-world-map/visualization.rb', line 6 def initialize @map_filename = $visualization_config.map_filename @raw_image = Magick::ImageList.new(@map_filename).first if $visualization_config.map_width || $visualization_config.map_height width = $visualization_config.map_width || @raw_image.columns height = $visualization_config.map_height || @raw_image.rows @raw_image.resize! width, height end new_frame @position_quantization_in_degrees = 0 @opacity_visibility_threshold = 0.1 @circle_radius = (map_size[:width] ** 1.25) / (map_size[:width] * $visualization_config.fill_dot_scale).to_f @points = {} end |
Instance Attribute Details
#circle_radius ⇒ Object
Returns the value of attribute circle_radius.
4 5 6 |
# File 'lib/ip-world-map/visualization.rb', line 4 def circle_radius @circle_radius end |
#position_quantization_in_degrees ⇒ Object
Returns the value of attribute position_quantization_in_degrees.
4 5 6 |
# File 'lib/ip-world-map/visualization.rb', line 4 def position_quantization_in_degrees @position_quantization_in_degrees end |
Instance Method Details
#circle_parameters(center_x, center_y) ⇒ Object
33 34 35 |
# File 'lib/ip-world-map/visualization.rb', line 33 def circle_parameters center_x, center_y [ center_x, center_y, center_x + circle_radius, center_y ] end |
#display ⇒ Object
71 72 73 |
# File 'lib/ip-world-map/visualization.rb', line 71 def display @frame.display end |
#draw_positions(positions_lon_lat) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/ip-world-map/visualization.rb', line 48 def draw_positions positions_lon_lat @draw.fill($visualization_config.fill_dot_color) new_points = {} positions_lon_lat.each do |longitude, latitude| x, y = x_y_from_longitude_latitude(longitude, latitude) x, y = quantize_position(x, y) new_points[[x,y]] = PointInTime.new(x, y, $visualization_config.fill_dot_opacity, $visualization_config.fill_dot_lifetime) end @points = select_visible_points(@points) @points.merge!(new_points) @points.each do |key, point| @draw.fill_opacity(point.opacity) @draw.circle(*circle_parameters(point.x, point.y)) point.age end @draw.draw(@frame) @frame end |
#map_size ⇒ Object
21 22 23 |
# File 'lib/ip-world-map/visualization.rb', line 21 def map_size @map_size ||= { :width => @frame.columns, :height => @frame.rows } end |
#new_frame ⇒ Object
75 76 77 78 |
# File 'lib/ip-world-map/visualization.rb', line 75 def new_frame @draw = Magick::Draw.new @frame = @raw_image.clone end |
#quantize_position(*position) ⇒ Object
37 38 39 40 |
# File 'lib/ip-world-map/visualization.rb', line 37 def quantize_position *position return position if @position_quantization_in_degrees == 0 position.collect{ |element| element - element.remainder(@position_quantization_in_degrees) } end |
#scale ⇒ Object
25 26 27 |
# File 'lib/ip-world-map/visualization.rb', line 25 def scale @scale ||= { :x => 360.0 / map_size[:width], :y => 180.0 / map_size[:height] } end |
#select_visible_points(points) ⇒ Object
42 43 44 45 46 |
# File 'lib/ip-world-map/visualization.rb', line 42 def select_visible_points points #points.select{ |point| point.opacity >= @opacity_visibility_threshold } selected_points = {} points.each{ |key, point| selected_points[key] = point if point.opacity >= @opacity_visibility_threshold } end |
#x_y_from_longitude_latitude(longitude, latitude) ⇒ Object
29 30 31 |
# File 'lib/ip-world-map/visualization.rb', line 29 def x_y_from_longitude_latitude longitude, latitude [ (180 + longitude) / scale[:x], (90 - latitude) / scale[:y] ] end |