Class: Terraformer::MultiPoint

Inherits:
Geometry show all
Defined in:
lib/terraformer/multi_point.rb

Constant Summary

Constants inherited from Geometry

Geometry::MULTI_REGEX

Instance Attribute Summary

Attributes inherited from Geometry

#coordinates, #crs

Instance Method Summary collapse

Methods inherited from Geometry

#convex_hull, #each_coordinate, #geographic?, #get, #intersects?, iter_coordinate, #map_coordinate, #mercator?, #to_feature, #to_geographic, #to_hash, #to_mercator

Methods included from Geometry::ClassMethods

#arrays_intersect_arrays?, #coordinates_contain_point?, #edge_intersects_edge?, #line_contains_point?

Methods inherited from Primitive

#bbox, #envelope, #to_json, #type

Constructor Details

#initialize(*args) ⇒ MultiPoint

Returns a new instance of MultiPoint.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/terraformer/multi_point.rb', line 5

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

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

Instance Method Details

#==(obj) ⇒ Object



28
29
30
31
32
# File 'lib/terraformer/multi_point.rb', line 28

def == obj
  super obj do |o|
    self.coordinates.sort == obj.coordinates.sort
  end
end

#add_point(p) ⇒ Object Also known as: <<

Raises:

  • (ArgumentError)


55
56
57
58
59
# File 'lib/terraformer/multi_point.rb', line 55

def add_point p
  p = p.coordinates if Point === p
  raise ArgumentError unless Coordinate === p
  coordinates << p
end

#contains?(obj) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/terraformer/multi_point.rb', line 34

def contains? obj
  points.any? {|p| p.contains? obj}
end

#first_coordinateObject



20
21
22
# File 'lib/terraformer/multi_point.rb', line 20

def first_coordinate
  coordinates[0]
end

#insert_point(idx, p) ⇒ Object

Raises:

  • (ArgumentError)


62
63
64
65
66
# File 'lib/terraformer/multi_point.rb', line 62

def insert_point idx, p
  p = p.coordinates if Point === p
  raise ArgumentError unless Coordinate === p
  coordinates.insert idx, p
end

#pointsObject



24
25
26
# File 'lib/terraformer/multi_point.rb', line 24

def points
  coordinates.map {|p| Point.new p}
end

#remove_point(p) ⇒ Object

Raises:

  • (ArgumentError)


68
69
70
71
72
# File 'lib/terraformer/multi_point.rb', line 68

def remove_point p
  p = p.coordinates if Point === p
  raise ArgumentError unless Coordinate === p
  coordinates.delete p
end

#remove_point_at(idx) ⇒ Object



74
75
76
# File 'lib/terraformer/multi_point.rb', line 74

def remove_point_at idx
  coordinates.delete_at idx
end

#within?(obj) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/terraformer/multi_point.rb', line 38

def within? obj
  case obj
  when MultiPoint
    points.all? {|p| obj.contains? p}
  when LineString
    points.all? {|p| obj.contains? p}
  when MultiLineString
    points.all? {|p| obj.contains? p}
  when Polygon
    obj.contains? self
  when MultiPolygon
    points.all? {|p| obj.polygons.any? {|polygon| polygon.contains? p}}
  else
    raise ArgumentError.new "unsupported type: #{obj.type rescue obj.class}"
  end
end