lib/gpsutils.rb in gpsutils-0.1.1 vs lib/gpsutils.rb in gpsutils-0.1.2
- old
+ new
@@ -1,10 +1,20 @@
module GpsUtils
class Point
- attr_accessor :lat, :lng
+ # @!attribute [r] lat
+ # @return [Float, Integer] Latitude
+ attr_reader :lat
+ # @!attribute [r] lng
+ # @return [Float, Integer] Longitude
+ attr_reader :lng
+
+ # Initialize Point.
+ #
+ # @param lat [Integer, Float] Latitude
+ # @param lng [Integer, Float] Langitude
def initialize(lat, lng)
unless lat.is_a? Float or lat.is_a? Integer
raise ArgumentError.new 'lat must be float or integer.'
end
@@ -14,41 +24,62 @@
@lat = lat
@lng = lng
end
+ # @return [Array] Array with latitude and longitude as Float or Integer
+ # values, as used when object was initialized
def to_a
[@lat, @lng]
end
def to_s
"#{@lat},#{@lng}"
end
end
class BoundingBox
- attr_accessor :se, :nw
+ # @!attribute [r] nw
+ # @return [Point] North-West corner
+ attr_reader :nw
+ # @!attribute [r] nw
+ # @return [Point] South-East corner
+ attr_reader :se
+
+ # Initialize BoundingBox.
+ #
+ # @param nw_point [Point] North-West corner
+ # @param se_point [Point] South-East corner
def initialize(nw_point, se_point)
+ unless nw_point.is_a? Point
+ raise ArgumentError.new 'nw_point must be a Point.'
+ end
+
+ unless se_point.is_a? Point
+ raise ArgumentError.new 'se_point must be a Point.'
+ end
+
@nw = nw_point
@se = se_point
@p21 = @se.lat - @nw.lat
@p41 = @nw.lng - @se.lng
@p21ms = @p21 ** 2
@p41ms = @p41 ** 2
end
+ # Determine whether point is inside bounding box.
+ #
+ # @param point [Point]
def cover?(point)
- return false if @nw.lat == @se.lat and @nw.lng == @se.lng
-
p = [point.lat - @nw.lat, point.lng - @se.lng]
p21x = p[0] * @p21
p41x = p[1] * @p41
- 0 <= p21x and p21x <= @p21ms and 0 <= p41x and p41x <= @p41ms
+ 0 < p21x and p21x < @p21ms and 0 <= p41x and p41x <= @p41ms
end
end
end