class GeographicBoundingBox implements BoundingBox<GeographicPosition>, Comparable<GeographicBoundingBox>, Serializable {

    @Override
    public boolean overlaps(Quadrilateral<? extends GeographicPosition> other, double tolerance)
    {
        if (!(other instanceof GeographicBoundingBox))
        {
            if (other instanceof GeographicQuadrilateral)
            {
                return ((GeographicQuadrilateral)other).overlaps(this, tolerance);
            }
            return false;
        }

        GeographicBoundingBox otherGeo = (GeographicBoundingBox)other;
        if (contains(otherGeo.getLowerLeft(), tolerance) || contains(otherGeo.getUpperRight(), tolerance)
                || contains(otherGeo.getLowerRight(), tolerance) || contains(otherGeo.getUpperLeft(), tolerance)
                || contains(other.getCenter(), tolerance))
        {
            return true;
        }

        return other.contains(getLowerLeft(), tolerance) || other.contains(getUpperRight(), tolerance)
                || other.contains(getLowerRight(), tolerance) || other.contains(getUpperLeft(), tolerance)
                || other.contains(getCenter(), tolerance);
    }

    public  GeographicBoundingBox(GeographicPosition lowerLeftCorner, GeographicPosition upperRightCorner);
    public  GeographicBoundingBox(LatLonAlt lowerLeftCorner, LatLonAlt upperRightCorner);

}