Sha256: 9d59b5a9bd12eafba985cbe4060cc086ed6659be9f2310b2a7c91fae6ac88ac6

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

module Gull
  class Polygon
    attr_accessor :coordinates

    def initialize(polygon)
      self.coordinates = polygon.split(' ').collect do |coords|
        coords.split(',').collect(&:to_f)
      end
    end

    def centroid
      low_x = 0
      low_y = 0
      high_x = 0
      high_y = 0

      coordinates.each do |pair|
        x_bounds = bounds pair.first, low_x, high_x
        low_x = x_bounds.first
        high_x = x_bounds.last

        y_bounds = bounds pair.last, low_y, high_y
        low_y = y_bounds.first
        high_y = y_bounds.last
      end

      center_x = low_x + ((high_x - low_x) / 2)
      center_y = low_y + ((high_y - low_y) / 2)

      [center_x, center_y]
    end

    def image_url(api_key, options = {})
      options = {
        width: 640,
        height: 640,
        color: '0xff0000',
        weight: 3,
        fillcolor: '0xff000060',
        maptype: 'roadmap'
      }.merge(options)

      url_base = 'http://maps.googleapis.com/maps/api/staticmap'
      "#{url_base}?size=#{options[:width]}x#{options[:height]}" \
      "&maptype=#{options[:maptype]}&path=color:#{options[:color]}" \
      "|weight:#{options[:weight]}|fillcolor:#{options[:fillcolor]}" \
      "|#{coordinates_piped}&key=#{api_key}"
    end

    private

    def bounds(point, low, high)
      if point < low || low == 0
        low = point
      elsif point > high || high == 0
        high = point
      end

      [low, high]
    end

    def coordinates_piped
      coordinates.collect { |pair| pair.join ',' }.join '|'
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gull-0.2.10 lib/gull/polygon.rb