/* This property holds the bottom left coordinate of this georectangle. */ void GeoRectangleValueType::setBottomLeft(const QGeoCoordinate &coordinate) { QGeoRectangle r = v; if (r.bottomLeft() == coordinate) return; r.setBottomLeft(coordinate); v = r; }
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; }