/*! Returns whether the geo rectangle \a rectangle intersects this geo rectangle. If the top or bottom edges of both geo rectangles are at one of the poles the geo rectangles are considered to be intersecting, since the longitude is irrelevant when the edges are at the pole. */ bool QGeoRectangle::intersects(const QGeoRectangle &rectangle) const { Q_D(const QGeoRectangle); double left1 = d->topLeft.longitude(); double right1 = d->bottomRight.longitude(); double top1 = d->topLeft.latitude(); double bottom1 = d->bottomRight.latitude(); double left2 = rectangle.d_func()->topLeft.longitude(); double right2 = rectangle.d_func()->bottomRight.longitude(); double top2 = rectangle.d_func()->topLeft.latitude(); double bottom2 = rectangle.d_func()->bottomRight.latitude(); if (top1 < bottom2) return false; if (bottom1 > top2) return false; if ((top1 == 90.0) && (top1 == top2)) return true; if ((bottom1 == -90.0) && (bottom1 == bottom2)) return true; if (left1 < right1) { if (left2 < right2) { if ((left1 > right2) || (right1 < left2)) return false; } else { if ((left1 > right2) && (right1 < left2)) return false; } } else { if (left2 < right2) { if ((left2 > right1) && (right2 < left1)) return false; } else { // if both wrap then they have to intersect } } return true; }
/*! Returns whether this geo rectangle is not equal to \a other. */ bool QGeoRectangle::operator!=(const QGeoRectangle &other) const { Q_D(const QGeoRectangle); return !(*d == *other.d_func()); }