Filtering posts by multiple taxonomies

First off, you should be using WP_Query vs query_posts.

Have a look at the Taxonomy Parameters.

Mainly tax_query and relation.

// Repost from link above
   $args = array(
        'post_type' => 'post',
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'movie_genre',
                'field' => 'slug',
                'terms' => array( 'action', 'comedy' )
            ),
            array(
                'taxonomy' => 'actor',
                'field' => 'id',
                'terms' => array( 103, 115, 206 ),
                'operator' => 'NOT IN'
            )
        )
    );

OR, if you’d prefer to declare it after, within the loop, have a look at array_key_exists. You could run the loop again but this time check each post for the matching terms.

// NO LONGER WORKS, WORDPRESS HAS CHANGED THE ARRAY STRUCTURE OF get_the_terms() -- OCT 2015
   /* if( array_key_exists( 111, get_the_terms($post->ID,'age') ) &&  array_key_exists( 222, get_the_terms($post->ID,'city') ) ) { 
      // output the post
    } */

OR, you could just do it all in jQuery (for example) if you’re already going to be loading every single post on the page anyways. You could output data attributes for each post containing the terms they are tagged with.

<!-- For example // Where 111 and 222 refers to the term id -->
<div class="person" data-age="id111" data-city="id222"></div>

And then simply .hide() the ones that don’t match the selected terms to be filtered.