void tst_QGeoLocation::isEmpty() { QGeoAddress address; address.setCity(QStringLiteral("Braunschweig")); QVERIFY(!address.isEmpty()); QGeoRectangle boundingBox; boundingBox.setTopLeft(QGeoCoordinate(1, -1)); boundingBox.setBottomRight(QGeoCoordinate(-1, 1)); QVERIFY(!boundingBox.isEmpty()); QGeoLocation location; QVERIFY(location.isEmpty()); // address location.setAddress(address); QVERIFY(!location.isEmpty()); location.setAddress(QGeoAddress()); QVERIFY(location.isEmpty()); // coordinate location.setCoordinate(QGeoCoordinate(1, 2)); QVERIFY(!location.isEmpty()); location.setCoordinate(QGeoCoordinate()); QVERIFY(location.isEmpty()); // bounding box location.setBoundingBox(boundingBox); QVERIFY(!location.isEmpty()); location.setBoundingBox(QGeoRectangle()); QVERIFY(location.isEmpty()); }
static bool addAtForBoundingArea(const QGeoShape &area, QUrlQuery *queryItems) { QGeoCoordinate center; switch (area.type()) { case QGeoShape::RectangleType: center = QGeoRectangle(area).center(); break; case QGeoShape::CircleType: center = QGeoCircle(area).center(); break; case QGeoShape::UnknownType: break; } if (!center.isValid()) { return false; } else { queryItems->addQueryItem(QLatin1String("at"), QString::number(center.latitude()) + QLatin1Char(',') + QString::number(center.longitude())); return true; } }
/*! \internal */ QVariant QDeclarativeSearchModelBase::searchArea() const { QGeoShape s = m_request.searchArea(); if (s.type() == QGeoShape::RectangleType) return QVariant::fromValue(QGeoRectangle(s)); else if (s.type() == QGeoShape::CircleType) return QVariant::fromValue(QGeoCircle(s)); else return QVariant::fromValue(s); }
QGeoShape QDeclarativeGeoMap::visibleRegion() const { if (!m_map || !width() || !height()) return m_region; QGeoCoordinate tl = m_map->itemPositionToCoordinate(QDoubleVector2D(0, 0)); QGeoCoordinate br = m_map->itemPositionToCoordinate(QDoubleVector2D(width(), height())); return QGeoRectangle(tl, br); }
void GeoRectangleValueType::setValue(const QVariant &value) { if (value.userType() == qMetaTypeId<QGeoRectangle>()) v = value.value<QGeoRectangle>(); else if (value.userType() == qMetaTypeId<QGeoShape>()) v = value.value<QGeoShape>(); else v = QGeoRectangle(); onLoad(); }
void tst_QGeoCircle::boxComparison_data() { QTest::addColumn<QGeoRectangle>("box"); QTest::addColumn<QGeoCircle>("circle"); QTest::addColumn<bool>("equal"); QGeoCircle c(QGeoCoordinate(10.0, 0.0), 10.0); QGeoRectangle b(QGeoCoordinate(10.0, 0.0), QGeoCoordinate(0.0, 10.0)); QTest::newRow("default constructed") << QGeoRectangle() << QGeoCircle() << false; QTest::newRow("b c") << b << c << false; }
bool QGeoCodeXmlParser::parseBoundingBox(QGeoRectangle *bounds) { /* <xsd:complexType name="GeoBox"> <xsd:sequence> <xsd:element name="topLeft" type="gc:GeoCoord"/> <xsd:element name="bottomRight" type="gc:GeoCoord"/> </xsd:sequence> </xsd:complexType> */ Q_ASSERT(m_reader->isStartElement() && m_reader->name() == "boundingBox"); if (!m_reader->readNextStartElement()) { m_reader->raiseError("The element \"boundingBox\" was expected to have 2 child elements (0 found)"); return false; } QGeoCoordinate nw; if (m_reader->name() == "topLeft") { if (!parseCoordinate(&nw, "topLeft")) return false; } else { m_reader->raiseError(QString("The element \"boundingBox\" expected this child element to be named \"topLeft\" (found an element named \"%1\")").arg(m_reader->name().toString())); return false; } if (!m_reader->readNextStartElement()) { m_reader->raiseError("The element \"boundingBox\" was expected to have 2 child elements (1 found)"); return false; } QGeoCoordinate se; if (m_reader->name() == "bottomRight") { if (!parseCoordinate(&se, "bottomRight")) return false; } else { m_reader->raiseError(QString("The element \"boundingBox\" expected this child element to be named \"bottomRight\" (found an element named \"%1\")").arg(m_reader->name().toString())); return false; } if (m_reader->readNextStartElement()) { m_reader->raiseError("The element \"boundingBox\" was expected to have 2 child elements (more than 2 found)"); return false; } *bounds = QGeoRectangle(nw, se); return true; }
void GeoRectangleValueType::writeVariantValue(QObject *obj, int idx, QQmlPropertyPrivate::WriteFlags flags, QVariant *from) { if (from->userType() == qMetaTypeId<QGeoRectangle>()) { writeProperty(obj, idx, flags, from); } else if (from->userType() == qMetaTypeId<QGeoShape>()) { QGeoRectangle r = from->value<QGeoShape>(); QVariant v = QVariant::fromValue(r); writeProperty(obj, idx, flags, &v); } else { QVariant v = QVariant::fromValue(QGeoRectangle()); writeProperty(obj, idx, flags, &v); } }
void tst_QGeoLocation::comparison() { QFETCH(QString, dataField); QGeoLocation location; //set address QGeoAddress address; address.setStreet("21 jump st"); address.setCountry("USA"); location.setAddress(address); //set coordinate location.setCoordinate(QGeoCoordinate(5,10)); //set viewport location.setBoundingBox(QGeoRectangle(QGeoCoordinate(5,5),0.4,0.4)); QGeoLocation otherLocation(location); if (dataField == "no change") { QCOMPARE(location, otherLocation); } else { if (dataField == "address") { QGeoAddress otherAddress; otherAddress.setStreet("42 evergreen tce"); otherAddress.setCountry("USA"); otherLocation.setAddress(otherAddress); } else if (dataField == "coordinate") { otherLocation.setCoordinate(QGeoCoordinate(12,13)); } else if (dataField == "viewport") { otherLocation.setBoundingBox(QGeoRectangle(QGeoCoordinate(1,2), 0.5,0.5)); } else { qFatal("Unknown data field to test"); } QVERIFY(location != otherLocation); } }
QPlace QPlaceManagerEngineJsonDb::compatiblePlace(const QPlace &original) const { QPlace place; place.setName(original.name()); QGeoLocation location = original.location(); QGeoCoordinate coord = original.location().coordinate(); coord.setAltitude(qQNaN()); location.setCoordinate(coord); location.setBoundingBox(QGeoRectangle()); place.setLocation(location); QList<QPlaceContactDetail> details; foreach (const QString &contactType, original.contactTypes()) place.setContactDetails(contactType, original.contactDetails(contactType)); place.setVisibility(QLocation::UnspecifiedVisibility); QStringList attributeTypes = original.extendedAttributeTypes(); foreach (const QString &attributeType, attributeTypes) place.setExtendedAttribute(attributeType, original.extendedAttribute(attributeType)); QString provider = original.extendedAttribute(QLatin1String("x_provider")).text(); if (!provider.isEmpty()) { QPlaceAttribute alternativeId; alternativeId.setText(original.placeId()); place.setExtendedAttribute(QString::fromLatin1("x_id_") + provider, alternativeId); if (provider == QLatin1String("nokia") || provider == QLatin1String("nokia_mos")) { QStringList nokiaCategoryIds; foreach (const QPlaceCategory &cat, original.categories()) { if (!cat.categoryId().isEmpty()) nokiaCategoryIds.append(cat.categoryId()); } if (!nokiaCategoryIds.isEmpty()) { QPlaceAttribute nokiaCatIds; nokiaCatIds.setText(nokiaCategoryIds.join(QLatin1String(","))); place.setExtendedAttribute(QString::fromLatin1("x_nokia_category_ids"), nokiaCatIds); } }
double GeoRectangleValueType::height() { return QGeoRectangle(v).height(); }
/*! \qmlmethod georectangle QtPositioning::rectangle() const Constructs an invalid georectangle. \sa {georectangle} */ QGeoRectangle LocationSingleton::rectangle() const { return QGeoRectangle(); }
QPlaceSearchReply *QPlaceManagerEngineOsm::search(const QPlaceSearchRequest &request) { bool unsupported = false; // Only public visibility supported unsupported |= request.visibilityScope() != QLocation::UnspecifiedVisibility && request.visibilityScope() != QLocation::PublicVisibility; unsupported |= request.searchTerm().isEmpty() && request.categories().isEmpty(); if (unsupported) return QPlaceManagerEngine::search(request); QUrlQuery queryItems; queryItems.addQueryItem(QStringLiteral("format"), QStringLiteral("jsonv2")); //queryItems.addQueryItem(QStringLiteral("accept-language"), QStringLiteral("en")); QGeoRectangle boundingBox; QGeoShape searchArea = request.searchArea(); switch (searchArea.type()) { case QGeoShape::CircleType: { QGeoCircle c(searchArea); qreal radius = c.radius(); if (radius < 0) radius = 50000; boundingBox = QGeoRectangle(c.center().atDistanceAndAzimuth(radius, -45), c.center().atDistanceAndAzimuth(radius, 135)); break; } case QGeoShape::RectangleType: boundingBox = searchArea; break; default: ; } if (!boundingBox.isEmpty()) { queryItems.addQueryItem(QStringLiteral("bounded"), QStringLiteral("1")); QString coordinates; coordinates = QString::number(boundingBox.topLeft().longitude()) + QLatin1Char(',') + QString::number(boundingBox.topLeft().latitude()) + QLatin1Char(',') + QString::number(boundingBox.bottomRight().longitude()) + QLatin1Char(',') + QString::number(boundingBox.bottomRight().latitude()); queryItems.addQueryItem(QStringLiteral("viewbox"), coordinates); } QStringList queryParts; if (!request.searchTerm().isEmpty()) queryParts.append(request.searchTerm()); foreach (const QPlaceCategory &category, request.categories()) { QString id = category.categoryId(); int index = id.indexOf(QLatin1Char('=')); if (index != -1) id = id.mid(index+1); queryParts.append(QLatin1Char('[') + id + QLatin1Char(']')); } queryItems.addQueryItem(QStringLiteral("q"), queryParts.join(QLatin1Char('+'))); QVariantMap parameters = request.searchContext().toMap(); QStringList placeIds = parameters.value(QStringLiteral("ExcludePlaceIds")).toStringList(); if (!placeIds.isEmpty()) queryItems.addQueryItem(QStringLiteral("exclude_place_ids"), placeIds.join(QLatin1Char(','))); queryItems.addQueryItem(QStringLiteral("addressdetails"), QStringLiteral("1")); QUrl requestUrl(m_urlPrefix); requestUrl.setQuery(queryItems); QNetworkReply *networkReply = m_networkManager->get(QNetworkRequest(requestUrl)); QPlaceSearchReplyOsm *reply = new QPlaceSearchReplyOsm(request, networkReply, this); connect(reply, SIGNAL(finished()), this, SLOT(replyFinished())); connect(reply, SIGNAL(error(QPlaceReply::Error,QString)), this, SLOT(replyError(QPlaceReply::Error,QString))); return reply; }
/*! \qmlmethod georectangle QtPositioning::rectangle(coordinate topLeft, coordinate bottomRight) const Constructs a georectangle with its top left corner positioned at \a topLeft and its bottom right corner positioned at \a {bottomLeft}. \sa {georectangle} */ QGeoRectangle LocationSingleton::rectangle(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight) const { return QGeoRectangle(topLeft, bottomRight); }
/*! \qmlmethod georectangle QtPositioning::rectangle(coordinate center, real width, real height) const Constructs a georectangle centered at \a center with a width of \a width degrees and a hight of \a height degrees. \sa {georectangle} */ QGeoRectangle LocationSingleton::rectangle(const QGeoCoordinate ¢er, double width, double height) const { return QGeoRectangle(center, width, height); }
QGeoCoordinate GeoRectangleValueType::bottomRight() { return QGeoRectangle(v).bottomRight(); }
QVariant GeoRectangleValueType::value() { return QVariant::fromValue(QGeoRectangle(v)); }
QGeoCoordinate GeoRectangleValueType::topRight() { return QGeoRectangle(v).topRight(); }
double GeoRectangleValueType::width() { return QGeoRectangle(v).width(); }
QGeoCoordinate GeoRectangleValueType::center() { return QGeoRectangle(v).center(); }