175bool QGeoCirclePrivate::contains(
const QGeoCoordinate &coordinate)
const
177 if (!isValid() || !coordinate.isValid())
181 qreal distance = m_center.distanceTo(coordinate);
182 if (qFuzzyCompare(distance, m_radius) || distance <= m_radius)
198void QGeoCirclePrivate::updateBoundingBox()
201 if (m_center.isValid()) {
202 m_bbox.setTopLeft(m_center);
203 m_bbox.setBottomRight(m_center);
208 bool crossNorth = crossNorthPole();
209 bool crossSouth = crossSouthPole();
211 if (crossNorth && crossSouth) {
213 m_bbox = QGeoRectangle(QGeoCoordinate(90.0, -180.0), QGeoCoordinate(-90.0, 180.0));
214 }
else if (crossNorth) {
216 m_bbox = QGeoRectangle(QGeoCoordinate(90.0, -180.0), QGeoCoordinate(m_center.atDistanceAndAzimuth(m_radius, 180.0).latitude(), 180.0));
217 }
else if (crossSouth) {
218 m_bbox = QGeoRectangle(QGeoCoordinate(m_center.atDistanceAndAzimuth(m_radius, 0.0).latitude(), -180.0), QGeoCoordinate(-90, 180.0));
242 double r_in_rad = m_radius / QLocationUtils::earthMeanRadius();
243 double lat_delta_in_deg = QLocationUtils::degrees(r_in_rad);
244 double lon_delta_in_deg = QLocationUtils::degrees(std::asin(
246 std::cos(QLocationUtils::radians(m_center.latitude()))
249 QGeoCoordinate topLeft;
250 topLeft.setLatitude(QLocationUtils::clipLat(m_center.latitude() + lat_delta_in_deg));
251 topLeft.setLongitude(QLocationUtils::wrapLong(m_center.longitude() - lon_delta_in_deg));
252 QGeoCoordinate bottomRight;
253 bottomRight.setLatitude(QLocationUtils::clipLat(m_center.latitude() - lat_delta_in_deg));
254 bottomRight.setLongitude(QLocationUtils::wrapLong(m_center.longitude() + lon_delta_in_deg));
256 m_bbox = QGeoRectangle(topLeft, bottomRight);
272bool QGeoCirclePrivate::crossNorthPole()
const
274 const QGeoCoordinate northPole(90.0, m_center.longitude());
275 qreal distanceToPole = m_center.distanceTo(northPole);
276 if (distanceToPole < m_radius)
281bool QGeoCirclePrivate::crossSouthPole()
const
283 const QGeoCoordinate southPole(-90.0, m_center.longitude());
284 qreal distanceToPole = m_center.distanceTo(southPole);
285 if (distanceToPole < m_radius)
307void QGeoCircle::translate(
double degreesLatitude,
double degreesLongitude)
313 double lat = d->m_center.latitude();
314 double lon = d->m_center.longitude();
316 lat += degreesLatitude;
317 lon += degreesLongitude;
318 lon = QLocationUtils::wrapLong(lon);
337 d->setCenter(QGeoCoordinate(lat, lon));
394QGeoCirclePrivate::QGeoCirclePrivate(
const QGeoCoordinate ¢er, qreal radius)
395: QGeoShapePrivate(QGeoShape::CircleType), m_center(center), m_radius(radius)
400QGeoCirclePrivate::QGeoCirclePrivate(
const QGeoCirclePrivate &other)
401: QGeoShapePrivate(QGeoShape::CircleType), m_center(other.m_center),
402 m_radius(other.m_radius), m_bbox(other.m_bbox)
413bool QGeoCirclePrivate::operator==(
const QGeoShapePrivate &other)
const
415 if (!QGeoShapePrivate::operator==(other))
418 const QGeoCirclePrivate &otherCircle =
static_cast<
const QGeoCirclePrivate &>(other);
420 return m_radius == otherCircle.m_radius && m_center == otherCircle.m_center;