code: private static boolean polygonRelateEnvelope_(Polygon polygon_a,
  			Envelope envelope_b, double tolerance, int relation,
  			ProgressTracker progress_tracker) {
  		if (polygonDisjointEnvelope_(polygon_a, envelope_b, tolerance,
  				progress_tracker)) {
  			if (relation == Relation.disjoint)
  				return true;
  
  			return false;
  		} else if (relation == Relation.disjoint) {
  			return false;
  		}
  
  		switch (relation) {
  		case Relation.within:
  			return polygonWithinEnvelope_(polygon_a, envelope_b, tolerance,
  					progress_tracker);
  
  		case Relation.contains:
  			return polygonContainsEnvelope_(polygon_a, envelope_b, tolerance,
  					progress_tracker);
  
  		case Relation.equals:
  			return polygonEqualsEnvelope_(polygon_a, envelope_b, tolerance,
  					progress_tracker);
  
  		case Relation.touches:
  			return polygonTouchesEnvelope_(polygon_a, envelope_b, tolerance,
  					progress_tracker);
  
  		case Relation.overlaps:
  			return polygonOverlapsEnvelope_(polygon_a, envelope_b, tolerance,
  					progress_tracker);
  
  		case Relation.crosses:
  			return polygonCrossesEnvelope_(polygon_a, envelope_b, tolerance,
  					progress_tracker);
  
  		default:
  			break; // warning fix
  		}
  
  		return false;
  	}
docs: Returns true if the relation holds