class Terraformer::MultiLineString

Public Class Methods

new(*args) click to toggle source
Calls superclass method Terraformer::Geometry::new
# File lib/terraformer/multi_line_string.rb, line 5
def initialize *args

  case
  when LineString === args[0]
    self.coordinates = args.map &:coordinates
  else
    super *args
  end

  # must be an array of arrays of coordinates
  unless Array === coordinates &&
         Array === coordinates[0] &&
         Terraformer::Coordinate === coordinates[0][0]
    raise ArgumentError.new 'invalid coordinates for Terraformer::MultiLineString'
  end
end

Public Instance Methods

==(obj) click to toggle source
Calls superclass method Terraformer::Geometry#==
# File lib/terraformer/multi_line_string.rb, line 30
def == obj
  super obj do |o|
    lses = line_strings.sort {|a,b| a.first_coordinate <=> b.first_coordinate }
    olses = o.line_strings.sort {|a,b| a.first_coordinate <=> b.first_coordinate }
    lses == olses
  end
end
contains?(obj) click to toggle source
# File lib/terraformer/multi_line_string.rb, line 38
def contains? obj
  case obj
  when Point
    line_strings.any? {|ls| ls.contains? obj}
  when MultiPoint
    obj.points.all? {|p| line_strings.any? {|ls| ls.contains? p}}
  when LineString
    line_strings.any? {|ls| ls == obj or ls.coordinates.slice_exists? obj.coordinates}
  when MultiLineString
    obj.line_strings.all? do |ols|
      line_strings.any? do |ls|
        ls == ols or ls.coordinates.slice_exists? ols.coordinates
      end
    end
  else
    raise ArgumentError.new "unsupported type: #{obj.type rescue obj.class}"
  end
end
first_coordinate() click to toggle source
# File lib/terraformer/multi_line_string.rb, line 22
def first_coordinate
  coordinates[0][0]
end
line_strings() click to toggle source
# File lib/terraformer/multi_line_string.rb, line 26
def line_strings
  coordinates.map {|ls| LineString.new ls}
end
within?(obj) click to toggle source
# File lib/terraformer/multi_line_string.rb, line 57
def within? obj
  case obj
  when MultiLineString
    obj.contains? self
  when Polygon
    obj.contains? self
  when MultiPolygon
    obj.contains? self
  else
    raise ArgumentError.new "unsupported type: #{obj.type rescue obj.class}"
  end
end