class Terraformer::MultiPolygon
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
Terraformer::Geometry::new
# File lib/terraformer/multi_polygon.rb, line 5 def initialize *args case # arg is an array of arrays of polygon, holes when Array === args[0] && Array === args[0][0] && Array === args[0][0][0] && Array === args[0][0][0][0] self.coordinates = Coordinate.from_array(*args) when Coordinate === args[0] # only one self.coordinates = [[Coordinate.from_array(args)]] when Array === args[0] # multiple? self.coordinates = [Coordinate.from_array(args)] when Polygon === args[0] self.coordinates = args.map &:coordinates else super *args end # must be an array of arrays of arrays of coordinates (whew!) unless Array === coordinates && Array === coordinates[0] && Array === coordinates[0][0] && Terraformer::Coordinate === coordinates[0][0][0] raise ArgumentError.new 'invalid coordinates for Terraformer::MultiPolygon' end end
Public Instance Methods
==(obj)
click to toggle source
Calls superclass method
Terraformer::Geometry#==
# File lib/terraformer/multi_polygon.rb, line 42 def == obj super obj do |o| equal = true ps = polygons ops = o.polygons ps.each_with_index do |p, i| equal = p == ops[i] rescue false break unless equal end equal end end
contains?(obj)
click to toggle source
# File lib/terraformer/multi_polygon.rb, line 55 def contains? obj polygons.any? {|p| p.contains? obj} end
first_coordinate()
click to toggle source
# File lib/terraformer/multi_polygon.rb, line 34 def first_coordinate coordinates[0][0][0] end
polygons()
click to toggle source
# File lib/terraformer/multi_polygon.rb, line 38 def polygons coordinates.map {|p| Polygon.new *p} end
within?(obj)
click to toggle source
# File lib/terraformer/multi_polygon.rb, line 59 def within? obj case obj when Polygon polygons.all? {|p| p.within? obj} when MultiPolygon polygons.all? {|p| obj.polygons.any? {|op| op.contains? p}} else raise ArgumentError.new "unsupported type: #{obj.type rescue obj.class}" end end