void tst_QGeoAddress::districtTest() { QGeoAddress testObj; QVERIFY2(testObj.district() == QString(), "Wrong default value"); testObj.setDistrict("testText"); QVERIFY2(testObj.district() == "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; }
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_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); }
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; }
bool QLandmarkFileHandlerLmx::readAddressInfo(QLandmark &landmark) { /* <xsd:complexType name="addressInfoType"> <xsd:all> <xsd:element name="country" type="xsd:string" minOccurs="0" /> <xsd:element name="countryCode" minOccurs="0"> <xsd:simpleType> <xsd:restriction base="xsd:token"> <xsd:length value="2"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="state" type="xsd:string" minOccurs="0" /> <xsd:element name="county" type="xsd:string" minOccurs="0" /> <xsd:element name="city" type="xsd:string" minOccurs="0" /> <xsd:element name="district" type="xsd:string" minOccurs="0" /> <xsd:element name="postalCode" type="xsd:string" minOccurs="0" /> <xsd:element name="crossing1" type="xsd:string" minOccurs="0" /> <xsd:element name="crossing2" type="xsd:string" minOccurs="0" /> <xsd:element name="street" type="xsd:string" minOccurs="0" /> <xsd:element name="buildingName" type="xsd:string" minOccurs="0" /> <xsd:element name="buildingZone" type="xsd:string" minOccurs="0" /> <xsd:element name="buildingFloor" type="xsd:string" minOccurs="0" /> <xsd:element name="buildingRoom" type="xsd:string" minOccurs="0" /> <xsd:element name="extension" type="xsd:string" minOccurs="0" /> <xsd:element name="phoneNumber" type="xsd:string" minOccurs="0" /> </xsd:all> </xsd:complexType> */ Q_ASSERT(m_reader->isStartElement() && (m_reader->name() == "addressInfo")); QHash<QString, int> counts; counts["country"] = 0; counts["countryCode"] = 0; counts["state"] = 0; counts["county"] = 0; counts["city"] = 0; counts["district"] = 0; counts["postalCode"] = 0; counts["crossing1"] = 0; counts["crossing2"] = 0; counts["street"] = 0; counts["buildingName"] = 0; counts["buildingZone"] = 0; counts["buildingFloor"] = 0; counts["buildingRoom"] = 0; counts["extension"] = 0; counts["phoneNumber"] = 0; QGeoAddress address; while (m_reader->readNextStartElement()) { QString name = m_reader->name().toString(); if (counts.keys().contains(name)) { if (counts.value(name) == 1) { m_reader->raiseError(QString("The element \"addressInfo\" did not expect more then one occurrence of the child element named \"%1\".").arg(m_reader->name().toString())); return false; } counts[name] = 1; if (name == "county") { address.setCounty(m_reader->readElementText()); } else if (name == "country") { address.setCountry(m_reader->readElementText()); } else if (name == "state") { address.setState(m_reader->readElementText()); } else if (name == "city") { address.setCity(m_reader->readElementText()); } else if (name == "district") { address.setDistrict(m_reader->readElementText()); } else if (name == "postalCode") { address.setPostcode(m_reader->readElementText()); } else if (name == "street") { QString street = m_reader->readElementText(); address.setStreet(street); } else if (name == "phoneNumber") { landmark.setPhoneNumber(m_reader->readElementText()); } else { m_reader->skipCurrentElement(); } } else { m_reader->raiseError(QString("The element \"addressInfo\" did not expect a child element named \"%1\".").arg(m_reader->name().toString())); return false; } } landmark.setAddress(address); return true; }