Class: Terraformer::MultiPoint
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
#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
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:
<<
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
34
35
36
|
# File 'lib/terraformer/multi_point.rb', line 34
def contains? obj
points.any? {|p| p.contains? obj}
end
|
#first_coordinate ⇒ Object
20
21
22
|
# File 'lib/terraformer/multi_point.rb', line 20
def first_coordinate
coordinates[0]
end
|
#insert_point(idx, p) ⇒ Object
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
|
#points ⇒ Object
24
25
26
|
# File 'lib/terraformer/multi_point.rb', line 24
def points
coordinates.map {|p| Point.new p}
end
|
#remove_point(p) ⇒ Object
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
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
|