dryade/georuby-ext

View on GitHub
lib/georuby-ext/georuby/envelope.rb

Summary

Maintainability
A
0 mins
Test Coverage
class GeoRuby::SimpleFeatures::Envelope

  def contains_point?(point)
    (lower_corner.x...upper_corner.x).include?(point.x) and
      (lower_corner.y...upper_corner.y).include?(point.y) 
  end

  def overlaps?(bound)
    contains_point?(bound.upper_corner) or contains_point?(bound.lower_corner) or bound.contains_point?(upper_corner) or bound.contains_point?(lower_corner)   
  end

  def self.bounds(geometries)
    return nil if geometries.blank?

    geometries.inject(geometries.first.envelope) do |envelope, geometry|
      envelope.extend!(geometry.envelope)
    end
  end

  alias_method :contains?, :contains_point?

  def sql_box
    "SetSRID('BOX3D(#{upper_corner.lng} #{upper_corner.lat}, #{lower_corner.lng} #{lower_corner.lat})'::box3d, #{srid})"
  end

  alias_method :to_sql, :sql_box

  def to_openlayers
    OpenLayers::Bounds.new lower_corner.x, lower_corner.y, upper_corner.x, upper_corner.y
  end

  def to_google
    GeoRuby::SimpleFeatures::Envelope.from_points [lower_corner.to_google, upper_corner.to_google], 900913, with_z
  end

  def to_polygon
    GeoRuby::SimpleFeatures::Polygon.from_coordinates( [ [ [lower_corner.x, lower_corner.y], [lower_corner.x, upper_corner.y], [upper_corner.x, upper_corner.y], [upper_corner.x, lower_corner.y] ] ] ) 
  end

  def to_rgeo
    self.to_polygon.to_rgeo
  end

end