Class: Terraformer::Point
Constant Summary
collapse
- DEFAULT_RANDOM_POINTS =
10
- DEFAULT_RANDOM_DELTA =
0.05
- DEFAULT_RANDOM_ROUND =
5
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) ⇒ Point
Returns a new instance of Point.
9
10
11
12
13
14
15
16
|
# File 'lib/terraformer/point.rb', line 9
def initialize *args
super
unless Terraformer::Coordinate === coordinates
raise ArgumentError.new 'invalid coordinates for Terraformer::Point'
end
end
|
Instance Method Details
#contains?(obj) ⇒ Boolean
63
64
65
66
67
68
69
70
|
# File 'lib/terraformer/point.rb', line 63
def contains? obj
case obj
when Point
self == obj
else
raise ArgumentError.new "unsupported type: #{obj.type rescue obj.class}"
end
end
|
#distance_and_bearing_to(obj) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/terraformer/point.rb', line 22
def distance_and_bearing_to obj
dabt = case obj
when Point
[first_coordinate.distance_and_bearing_to(obj.first_coordinate)]
when MultiPoint
obj.coordinates.map {|c| first_coordinate.distance_and_bearing_to c}
when LineString
obj.coordinates.map {|c| first_coordinate.distance_and_bearing_to c}
when MultiLineString
obj.line_strings.map {|ls| distance_and_bearing_to ls}
when Polygon
obj.line_strings[0].coordinates.map {|c| first_coordinate.distance_and_bearing_to c}
when MultiPolygon
obj.polygons.map {|p| distance_and_bearing_to p}
else
raise ArgumentError.new "unsupported type: #{obj.type rescue obj.class}"
end
dabt.flatten!
dabt.minmax_by {|db| db[:distance]}
end
|
#distance_to(obj, minmax = :min) ⇒ Object
51
52
53
|
# File 'lib/terraformer/point.rb', line 51
def distance_to obj, minmax = :min
distance_and_bearing_to(obj)[minmax == :min ? 0 : 1][:distance]
end
|
#final_bearing_to(obj) ⇒ Object
59
60
61
|
# File 'lib/terraformer/point.rb', line 59
def final_bearing_to obj
distance_and_bearing_to(obj)[0][:bearing][:final]
end
|
#first_coordinate ⇒ Object
18
19
20
|
# File 'lib/terraformer/point.rb', line 18
def first_coordinate
coordinates
end
|
#initial_bearing_to(obj) ⇒ Object
55
56
57
|
# File 'lib/terraformer/point.rb', line 55
def initial_bearing_to obj
distance_and_bearing_to(obj)[0][:bearing][:initial]
end
|
#random_points(n = DEFAULT_RANDOM_POINTS, delta = DEFAULT_RANDOM_DELTA, round = DEFAULT_RANDOM_ROUND) ⇒ Object
#within?(obj) ⇒ Boolean
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/terraformer/point.rb', line 72
def within? obj
case obj
when Point
self == obj
when MultiPoint
obj.coordinates.any? {|c| self.coordinates == c}
when LineString
obj.coordinates.any? {|c| self.coordinates == c}
when MultiLineString
obj.line_strings.any? {|ls| within? ls}
when Polygon
obj.contains? self
when MultiPolygon
obj.polygons.any? {|p| p.contains? self}
else
raise ArgumentError unless Geometry === obj
end
end
|