Sha256: f2cd32a9e9380ab50e8e453f464302588f9d91b8621cb1b9d4fea986880f21d6
Contents?: true
Size: 1.8 KB
Versions: 2
Compression:
Stored size: 1.8 KB
Contents
# frozen_string_literal: true module GPX class Bounds < Base attr_accessor :min_lat, :max_lat, :max_lon, :min_lon # Creates a new bounds object with the passed-in min and max longitudes # and latitudes. def initialize(opts = { min_lat: 90.0, max_lat: -90.0, min_lon: 180.0, max_lon: -180.0 }) super() @min_lat = opts[:min_lat].to_f @max_lat = opts[:max_lat].to_f @min_lon = opts[:min_lon].to_f @max_lon = opts[:max_lon].to_f end # Returns the middle latitude. def center_lat distance = (max_lat - min_lat) / 2.0 (min_lat + distance) end # Returns the middle longitude. def center_lon distance = (max_lon - min_lon) / 2.0 (min_lon + distance) end # Returns true if the pt is within these bounds. def contains?(pt) ((pt.lat >= min_lat) && (pt.lat <= max_lat) && (pt.lon >= min_lon) && (pt.lon <= max_lon)) end # Adds an item to itself, expanding its min/max lat/lon as needed to # contain the given item. The item can be either another instance of # Bounds or a Point. def add(item) if item.respond_to?(:lat) && item.respond_to?(:lon) @min_lat = item.lat if item.lat < @min_lat @min_lon = item.lon if item.lon < @min_lon @max_lat = item.lat if item.lat > @max_lat @max_lon = item.lon if item.lon > @max_lon else @min_lat = item.min_lat if item.min_lat < @min_lat @min_lon = item.min_lon if item.min_lon < @min_lon @max_lat = item.max_lat if item.max_lat > @max_lat @max_lon = item.max_lon if item.max_lon > @max_lon end end # Returns the min_lat, min_lon, max_lat, and max_lon in a labeled string. def to_s "min_lat: #{min_lat} min_lon: #{min_lon} max_lat: #{max_lat} max_lon: #{max_lon}" end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
gpx-1.1.1 | lib/gpx/bounds.rb |
gpx-1.1.0 | lib/gpx/bounds.rb |