void tst_QGeoAddress::countryCodeTest() { QGeoAddress testObj; QVERIFY2(testObj.countryCode() == QString(), "Wrong default value"); testObj.setCountryCode("testText"); QVERIFY2(testObj.countryCode() == "testText", "Wrong value returned"); }
static QGeoAddress parseAddressObject(const QJsonObject &object) { QGeoAddress address; address.setText(object.value(QStringLiteral("display_name")).toString()); QJsonObject ao = object.value(QStringLiteral("address")).toObject(); // setCountry address.setCountry(ao.value(QStringLiteral("country")).toString()); // setCountryCode address.setCountryCode(ao.value(QStringLiteral("country_code")).toString()); // setState address.setState(ao.value(QStringLiteral("state")).toString()); // setCity if (ao.contains(QLatin1String("city"))) address.setCity(ao.value(QStringLiteral("city")).toString()); else if (ao.contains(QLatin1String("town"))) address.setCity(ao.value(QLatin1String("town")).toString()); else if (ao.contains(QLatin1String("village"))) address.setCity(ao.value(QLatin1String("village")).toString()); else address.setCity(ao.value(QLatin1String("hamlet")).toString()); // setDistrict address.setDistrict(ao.value(QStringLiteral("suburb")).toString()); // setPostalCode address.setPostalCode(ao.value(QStringLiteral("postcode")).toString()); // setStreet address.setStreet(ao.value(QStringLiteral("road")).toString()); return address; }
void tst_QGeoAddress::generatedText() { QFETCH(QString, countryCode); QFETCH(QString, expectedPostalCodeOnly); QFETCH(QString, expectedFullAddress); QGeoAddress streetOnly; streetOnly.setStreet("street"); streetOnly.setCountryCode(countryCode); QCOMPARE(streetOnly.text(), QLatin1String("street")); QGeoAddress cityOnly; cityOnly.setCity("city"); cityOnly.setCountryCode(countryCode); if (countryCode == QLatin1String("CYM") || countryCode == QLatin1String("IRL")) QCOMPARE(cityOnly.text(), QString()); else QCOMPARE(cityOnly.text(), QLatin1String("city")); QGeoAddress postalCodeOnly; postalCodeOnly.setPostalCode("postcode"); postalCodeOnly.setCountryCode(countryCode); QCOMPARE(postalCodeOnly.text(), expectedPostalCodeOnly); QGeoAddress fullAddress; fullAddress.setStreet("street"); fullAddress.setDistrict("district"); fullAddress.setPostalCode("postcode"); fullAddress.setCity("city"); fullAddress.setState("state"); fullAddress.setCountry("country"); fullAddress.setCountryCode(countryCode); QCOMPARE(fullAddress.text(), expectedFullAddress); }
bool QGeoCodeParser::parsePlace(QGeoPlace *place) { Q_ASSERT(m_reader->isStartElement() && (m_reader->name() == "place" || m_reader->name() == "addressparts")); if (m_reader->name() == "place") { QGeoBoundingBox bounds; if (!parseBoundingBox(&bounds,m_reader->attributes().value("boundingbox").toString())) return false; place->setViewport(bounds); place->setCoordinate( QGeoCoordinate(m_reader->attributes().value("lat").toString().toDouble(), m_reader->attributes().value("lon").toString().toDouble()) ); } QGeoAddress address; m_reader->readNext(); while (!(m_reader->tokenType() == QXmlStreamReader::EndElement && (m_reader->name() == "place" || m_reader->name() == "addressparts"))) { if (m_reader->tokenType() == QXmlStreamReader::StartElement) { if (m_reader->name() == "house") { } else if (m_reader->name() == "road") { address.setStreet(m_reader->readElementText()); } else if (m_reader->name() == "village") { address.setDistrict(m_reader->readElementText()); } else if (m_reader->name() == "state") { address.setState(m_reader->readElementText()); } else if (m_reader->name() == "town") { } else if (m_reader->name() == "city") { address.setCity(m_reader->readElementText()); } else if (m_reader->name() == "county") { address.setCounty(m_reader->readElementText()); } else if (m_reader->name() == "postcode") { address.setPostcode(m_reader->readElementText()); } else if (m_reader->name() == "country") { address.setCountry(m_reader->readElementText()); } else if (m_reader->name() == "country_code") { address.setCountryCode(m_reader->readElementText()); } else { m_reader->skipCurrentElement(); } } m_reader->readNext(); } place->setAddress(address); return true; }
void tst_QGeoAddress::emptyClearTest() { QGeoAddress testObj; QVERIFY(testObj.isEmpty()); testObj.setCountry(QLatin1String("country")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setCountryCode(QLatin1String("countryCode")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setState(QLatin1String("state")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setCounty(QLatin1String("county")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setCity(QLatin1String("city")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setDistrict(QLatin1String("district")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setPostalCode(QLatin1String("postalCode")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setStreet(QLatin1String("street")); QVERIFY(!testObj.isEmpty()); testObj.clear(); testObj.setText(QLatin1String("formatted address")); QVERIFY(!testObj.isEmpty()); testObj.clear(); QVERIFY(testObj.isEmpty()); }
void tst_QGeoLocation::operators() { QGeoAddress qgeoaddresscopy; qgeoaddresscopy.setCity("Berlin"); qgeoaddresscopy.setCountry("Germany"); qgeoaddresscopy.setCountryCode("DEU"); QGeoCoordinate qgeocoordinatecopy (32.324 , 41.324 , 24.55); m_address.setCity("Madrid"); m_address.setCountry("Spain"); m_address.setCountryCode("SPA"); m_coordinate.setLatitude(21.3434); m_coordinate.setLongitude(38.43443); m_coordinate.setAltitude(634.21); m_location.setAddress(m_address); m_location.setCoordinate(m_coordinate); //Create a copy and see that they are the same QGeoLocation qgeolocationcopy(m_location); QVERIFY(m_location == qgeolocationcopy); QVERIFY(!(m_location != qgeolocationcopy)); //Modify one and test if they are different qgeolocationcopy.setAddress(qgeoaddresscopy); QVERIFY(!(m_location == qgeolocationcopy)); QVERIFY(m_location != qgeolocationcopy); qgeolocationcopy.setCoordinate(qgeocoordinatecopy); QVERIFY(!(m_location == qgeolocationcopy)); QVERIFY(m_location != qgeolocationcopy); //delete qgeolocationcopy; //Asign and test that they are the same qgeolocationcopy = m_location; QVERIFY(m_location ==qgeolocationcopy); QVERIFY(!(m_location != qgeolocationcopy)); }
void QPlaceDetailsReplyImpl::replyFinished() { if (m_reply->error() != QNetworkReply::NoError) { switch (m_reply->error()) { case QNetworkReply::OperationCanceledError: setError(CancelError, "Request canceled."); break; case QNetworkReply::ContentNotFoundError: setError(PlaceDoesNotExistError, QString::fromLatin1("The id, %1, does not reference an existing place") .arg(m_placeId)); break; default: setError(CommunicationError, "Network error."); } return; } QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll()); if (!document.isObject()) { setError(ParseError, QCoreApplication::translate(NOKIA_PLUGIN_CONTEXT_NAME, PARSE_ERROR)); return; } QJsonObject object = document.object(); QPlace place; place.setPlaceId(object.value(QLatin1String("placeId")).toString()); //const QUrl view = object.value(QLatin1String("view")).toString(); place.setName(object.value(QLatin1String("name")).toString()); //if (object.contains(QLatin1String("distance"))) // double distance = object.value(QLatin1String("distance")).toDouble(); //if (object.contains(QLatin1String("alternativeNames"))) { // QJsonArray alternativeNames = object.value(QLatin1String("alternativeNames")).toArray(); //} QGeoLocation location; QJsonObject locationObject = object.value(QLatin1String("location")).toObject(); //if (locationObject.contains(QLatin1String("locationId"))) // const QString locationId = locationObject.value(QLatin1String("locationId")).toString(); QJsonArray position = locationObject.value(QLatin1String("position")).toArray(); location.setCoordinate(QGeoCoordinate(position.at(0).toDouble(), position.at(1).toDouble())); QGeoAddress address; QJsonObject addressObject = locationObject.value(QLatin1String("address")).toObject(); address.setText(addressObject.value(QLatin1String("text")).toString()); address.setCountry(addressObject.value(QLatin1String("country")).toString()); address.setCountryCode(addressObject.value(QLatin1String("countryCode")).toString()); QString house; QString street; if (addressObject.contains(QLatin1String("house"))) house = addressObject.value(QLatin1String("house")).toString(); if (addressObject.contains(QLatin1String("street"))) street = addressObject.value(QLatin1String("street")).toString(); if (countryTableContains(address.countryCode())) { if (!house.isEmpty() && !street.startsWith(house)) street = house + QLatin1Char(' ') + street; } else { if (!house.isEmpty() && !street.endsWith(house)) street += QLatin1Char(' ') + house; } address.setStreet(street); if (addressObject.contains(QLatin1String("city"))) address.setCity(addressObject.value(QLatin1String("city")).toString()); if (addressObject.contains(QLatin1String("district"))) address.setDistrict(addressObject.value(QLatin1String("district")).toString()); if (addressObject.contains(QLatin1String("state"))) address.setState(addressObject.value(QLatin1String("state")).toString()); if (addressObject.contains(QLatin1String("county"))) address.setCounty(addressObject.value(QLatin1String("county")).toString()); if (addressObject.contains(QLatin1String("postalCode"))) address.setPostalCode(addressObject.value(QLatin1String("postalCode")).toString()); location.setAddress(address); if (locationObject.contains(QLatin1String("bbox"))) { QJsonArray bbox = locationObject.value(QLatin1String("bbox")).toArray(); QGeoRectangle box(QGeoCoordinate(bbox.at(3).toDouble(), bbox.at(0).toDouble()), QGeoCoordinate(bbox.at(1).toDouble(), bbox.at(2).toDouble())); location.setBoundingBox(box); } place.setLocation(location); place.setCategories(parseCategories(object.value(QLatin1String("categories")).toArray(), m_engine)); place.setIcon(m_engine->icon(object.value(QLatin1String("icon")).toString(), place.categories())); if (object.contains(QLatin1String("contacts"))) { QJsonObject contactsObject = object.value(QLatin1String("contacts")).toObject(); if (contactsObject.contains(QLatin1String("phone"))) { place.setContactDetails(QPlaceContactDetail::Phone, parseContactDetails(contactsObject.value(QLatin1String("phone")).toArray())); } if (contactsObject.contains(QLatin1String("fax"))) { place.setContactDetails(QPlaceContactDetail::Fax, parseContactDetails(contactsObject.value(QLatin1String("fax")).toArray())); } if (contactsObject.contains(QLatin1String("website"))) { place.setContactDetails(QPlaceContactDetail::Website, parseContactDetails(contactsObject.value(QLatin1String("website")).toArray())); } if (contactsObject.contains(QLatin1String("email"))) { place.setContactDetails(QPlaceContactDetail::Email, parseContactDetails(contactsObject.value(QLatin1String("email")).toArray())); } } //if (object.contains(QLatin1String("verifiedByOwner"))) // bool verifiedByOwner = object.value(QLatin1String("verifiedByOwner")).toBool(); if (object.contains(QLatin1String("attribution"))) place.setAttribution(object.value(QLatin1String("attribution")).toString()); if (object.contains(QLatin1String("supplier"))) { place.setSupplier(parseSupplier(object.value(QLatin1String("supplier")).toObject(), m_engine)); } if (object.contains(QLatin1String("ratings"))) { QJsonObject ratingsObject = object.value(QLatin1String("ratings")).toObject(); QPlaceRatings ratings; ratings.setAverage(ratingsObject.value(QLatin1String("average")).toDouble()); ratings.setCount(ratingsObject.value(QLatin1String("count")).toDouble()); ratings.setMaximum(5.0); place.setRatings(ratings); } if (object.contains(QLatin1String("extended"))) { QJsonObject extendedObject = object.value(QLatin1String("extended")).toObject(); foreach (const QString &key, extendedObject.keys()) { QJsonObject attributeObject = extendedObject.value(key).toObject(); QPlaceAttribute attribute; attribute.setLabel(attributeObject.value(QLatin1String("label")).toString()); attribute.setText(attributeObject.value(QLatin1String("text")).toString()); if (key == QLatin1String("payment")) place.setExtendedAttribute(QPlaceAttribute::Payment, attribute); else if (key == QLatin1String("openingHours")) place.setExtendedAttribute(QPlaceAttribute::OpeningHours, attribute); else place.setExtendedAttribute(key, attribute); } }
void QGeoCodeReplyQGC::networkReplyFinished() { if (!m_reply) return; if (m_reply->error() != QNetworkReply::NoError) return; QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll()); QJsonObject object = document.object(); if (object.value(QStringLiteral("status")) != QStringLiteral("OK")) { QString error = object.value(QStringLiteral("status")).toString(); qWarning() << m_reply->url() << "returned" << error; setError(QGeoCodeReply::CommunicationError, error); m_reply->deleteLater(); m_reply = 0; return; } QList<QGeoLocation> locations; QJsonArray results = object.value(QStringLiteral("results")).toArray(); for (int i=0; i<results.size(); ++i) { if (!results[i].isObject()) continue; QJsonObject geocode = results[i].toObject(); QGeoAddress address; if (geocode.contains(QStringLiteral("formatted_address"))) { address.setText(geocode.value(QStringLiteral("formatted_address")).toString()); } if (geocode.contains(QStringLiteral("address_components"))) { QJsonArray ac = geocode.value(QStringLiteral("address_components")).toArray(); for (int j=0; j<ac.size(); ++j) { if (!ac[j].isObject()) continue; QJsonObject c = ac[j].toObject(); if (!c.contains(QStringLiteral("types"))) continue; QSet<int> types = kMonger.json2QGCGeoCodeType(c[QStringLiteral("types")].toArray()); QString long_name = c[QStringLiteral("long_name")].toString(); QString short_name = c[QStringLiteral("short_name")].toString(); if (types.contains(Country)) { address.setCountry(long_name); address.setCountryCode(short_name); } else if (types.contains(AdministrativeAreaLevel1)) { address.setState(long_name); } else if (types.contains(AdministrativeAreaLevel2)) { address.setCounty(long_name); } else if (types.contains(Locality)) { address.setCity(long_name); } else if (types.contains(Sublocality)) { address.setDistrict(long_name); } else if (types.contains(PostalCode)) { address.setPostalCode(long_name); } else if (types.contains(StreetAddress) || types.contains(Route) || types.contains(Intersection)) { address.setStreet(long_name); } } } QGeoCoordinate coordinate; QGeoRectangle boundingBox; if (geocode.contains(QStringLiteral("geometry"))) { QJsonObject geom = geocode.value(QStringLiteral("geometry")).toObject(); if (geom.contains(QStringLiteral("location"))) { QJsonObject location = geom.value(QStringLiteral("location")).toObject(); coordinate.setLatitude(location.value(QStringLiteral("lat")).toDouble()); coordinate.setLongitude(location.value(QStringLiteral("lng")).toDouble()); } if (geom.contains(QStringLiteral("bounds"))) { QJsonObject bounds = geom.value(QStringLiteral("bounds")).toObject(); QJsonObject northeast = bounds.value(QStringLiteral("northeast")).toObject(); QJsonObject southwest = bounds.value(QStringLiteral("southwest")).toObject(); QGeoCoordinate topRight(northeast.value(QStringLiteral("lat")).toDouble(), northeast.value(QStringLiteral("lng")).toDouble()); QGeoCoordinate bottomLeft(southwest.value(QStringLiteral("lat")).toDouble(), southwest.value(QStringLiteral("lng")).toDouble()); boundingBox.setTopRight(topRight); boundingBox.setBottomLeft(bottomLeft); } } QGeoLocation location; location.setAddress(address); location.setCoordinate(coordinate); location.setBoundingBox(boundingBox); locations << location; } setLocations(locations); setFinished(true); m_reply->deleteLater(); m_reply = 0; }
void QGeoCodeReplyOsm::networkReplyFinished() { if (!m_reply) return; if (m_reply->error() != QNetworkReply::NoError) return; QJsonDocument document = QJsonDocument::fromJson(m_reply->readAll()); if (document.isObject()) { QJsonObject object = document.object(); QGeoCoordinate coordinate; coordinate.setLatitude(object.value(QStringLiteral("lat")).toString().toDouble()); coordinate.setLongitude(object.value(QStringLiteral("lon")).toString().toDouble()); QJsonObject ao = object.value(QStringLiteral("address")).toObject(); QGeoAddress address; address.setText(object.value(QStringLiteral("display_name")).toString()); address.setCountry(ao.value(QStringLiteral("country")).toString()); address.setCountryCode(ao.value(QStringLiteral("country_code")).toString()); address.setState(ao.value(QStringLiteral("state")).toString()); address.setCity(ao.value(QStringLiteral("city")).toString()); address.setDistrict(ao.value(QStringLiteral("suburb")).toString()); address.setPostalCode(ao.value(QStringLiteral("postcode")).toString()); address.setStreet(ao.value(QStringLiteral("road")).toString()); QGeoLocation location; location.setCoordinate(coordinate); location.setAddress(address); QList<QGeoLocation> locations; locations.append(location); setLocations(locations); setFinished(true); } else if (document.isArray()) { QJsonArray results = document.array(); QList<QGeoLocation> locations; for (int i = 0; i < results.count(); ++i) { if (!results.at(i).isObject()) continue; QJsonObject object = results.at(i).toObject(); QGeoCoordinate coordinate; coordinate.setLatitude(object.value(QStringLiteral("lat")).toString().toDouble()); coordinate.setLongitude(object.value(QStringLiteral("lon")).toString().toDouble()); QGeoRectangle rectangle; if (object.contains(QStringLiteral("boundingbox"))) { QJsonArray a = object.value(QStringLiteral("boundingbox")).toArray(); if (a.count() == 4) { rectangle.setTopLeft(QGeoCoordinate(a.at(1).toString().toDouble(), a.at(2).toString().toDouble())); rectangle.setBottomRight(QGeoCoordinate(a.at(0).toString().toDouble(), a.at(3).toString().toDouble())); } } QJsonObject ao = object.value(QStringLiteral("address")).toObject(); QGeoAddress address; address.setText(object.value(QStringLiteral("display_name")).toString()); address.setCountry(ao.value(QStringLiteral("country")).toString()); address.setCountryCode(ao.value(QStringLiteral("country_code")).toString()); address.setState(ao.value(QStringLiteral("state")).toString()); address.setCity(ao.value(QStringLiteral("city")).toString()); address.setDistrict(ao.value(QStringLiteral("suburb")).toString()); address.setPostalCode(ao.value(QStringLiteral("postcode")).toString()); address.setStreet(ao.value(QStringLiteral("road")).toString()); QGeoLocation location; location.setCoordinate(coordinate); location.setBoundingBox(rectangle); location.setAddress(address); locations.append(location); } setLocations(locations); setFinished(true); } m_reply->deleteLater(); m_reply = 0; }