def at(time)
      if time.is_a?(String)
        time = Time.parse(time)
      end
      if time.is_a?(Integer)
        time = Time.at(time)
      end
      raise ArgumentError, "time must be a Time,String, or Fixnum" if ! time.is_a?(Time)

      return nil if ! in_time_range?(time)

      @interp ||= Interpolate::Points.new(@points)
      data = @interp.at(time.to_i)

      self.class.array_to_hash(data)
    end
def at(time)
      if time.is_a?(String)
        time = Time.parse(time)
      end
      if time.is_a?(Integer)
        time = Time.at(time)
      end
      raise ArgumentError, "time must be a Time,String, or Fixnum" if ! time.is_a?(Time)

      return nil if ! in_time_range?(time)

      @interp ||= Interpolate::Points.new(@points)
      data = @interp.at(time.to_i)

      self.class.array_to_hash(data)
    end
return the interpolated location for the given time
 or nil if time is outside the track's start..end

 @example
  track.at(time) => {lat:48, lon:98, elevation: 2100}
 @param time [String,Time,Fixnum]
 @return [Hash,nil]