summaryrefslogtreecommitdiffstats
path: root/src/plugins/geoservices/osm
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2018-11-28 19:38:10 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-12-04 16:11:50 +0000
commit4919bb49039dd84bd58290fb66e2c272a920929c (patch)
tree79469376d4b2ec7c86194455f5d32c6c88126a9e /src/plugins/geoservices/osm
parent9ec2fa87650607337f1692b7bc52e16cc3f74860 (diff)
Provide extended, plugin dependent information for Geo Locations
This includes support for osm geojson and class fields. At the present, the content of the geojson field is returned as is. As soon as QGeoJson support is finalized, this will be integrated with a QGeoPolygon. Fixes: QTBUG-43401 Change-Id: Ifa7e24cf904a2c1e1e77ebfaa7948ac0ce81d265 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/plugins/geoservices/osm')
-rw-r--r--src/plugins/geoservices/osm/qgeocodereplyosm.cpp22
-rw-r--r--src/plugins/geoservices/osm/qgeocodereplyosm.h6
-rw-r--r--src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp6
-rw-r--r--src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h1
4 files changed, 29 insertions, 6 deletions
diff --git a/src/plugins/geoservices/osm/qgeocodereplyosm.cpp b/src/plugins/geoservices/osm/qgeocodereplyosm.cpp
index 11bdaa6c..0bdf4bf9 100644
--- a/src/plugins/geoservices/osm/qgeocodereplyosm.cpp
+++ b/src/plugins/geoservices/osm/qgeocodereplyosm.cpp
@@ -49,8 +49,8 @@
QT_BEGIN_NAMESPACE
-QGeoCodeReplyOsm::QGeoCodeReplyOsm(QNetworkReply *reply, QObject *parent)
-: QGeoCodeReply(*new QGeoCodeReplyOsmPrivate, parent)
+QGeoCodeReplyOsm::QGeoCodeReplyOsm(QNetworkReply *reply, bool includeExtraData, QObject *parent)
+: QGeoCodeReply(*new QGeoCodeReplyOsmPrivate, parent), m_includeExtraData(includeExtraData)
{
if (!reply) {
setError(UnknownError, QStringLiteral("Null reply"));
@@ -98,6 +98,20 @@ static QGeoAddress parseAddressObject(const QJsonObject &object)
return address;
}
+static void injectExtra(QGeoLocation &location, const QJsonObject &object)
+{
+ QVariantMap extra;
+ static const QList<QString> extraKeys = { QStringLiteral("geojson"),
+ QStringLiteral("class") };
+
+ for (const auto k: extraKeys) {
+ if (object.contains(k))
+ extra[k] = object.value(k).toVariant();
+ }
+
+ location.setExtendedAttributes(extra);
+}
+
void QGeoCodeReplyOsm::networkReplyFinished()
{
QNetworkReply *reply = static_cast<QNetworkReply *>(sender());
@@ -121,6 +135,8 @@ void QGeoCodeReplyOsm::networkReplyFinished()
location.setCoordinate(coordinate);
location.setAddress(parseAddressObject(object));
+ if (m_includeExtraData)
+ injectExtra(location, object);
locations.append(location);
setLocations(locations);
@@ -154,6 +170,8 @@ void QGeoCodeReplyOsm::networkReplyFinished()
location.setCoordinate(coordinate);
location.setBoundingBox(rectangle);
location.setAddress(parseAddressObject(object));
+ if (m_includeExtraData)
+ injectExtra(location, object);
locations.append(location);
}
diff --git a/src/plugins/geoservices/osm/qgeocodereplyosm.h b/src/plugins/geoservices/osm/qgeocodereplyosm.h
index b81b8b84..f00a8bb2 100644
--- a/src/plugins/geoservices/osm/qgeocodereplyosm.h
+++ b/src/plugins/geoservices/osm/qgeocodereplyosm.h
@@ -51,12 +51,15 @@ class QGeoCodeReplyOsm : public QGeoCodeReply
Q_OBJECT
public:
- explicit QGeoCodeReplyOsm(QNetworkReply *reply, QObject *parent = 0);
+ explicit QGeoCodeReplyOsm(QNetworkReply *reply, bool includeExtraData = false, QObject *parent = 0);
~QGeoCodeReplyOsm();
private Q_SLOTS:
void networkReplyFinished();
void networkReplyError(QNetworkReply::NetworkError error);
+
+private:
+ bool m_includeExtraData = false;
};
class QGeoCodeReplyOsmPrivate : public QGeoCodeReplyPrivate
@@ -66,7 +69,6 @@ public:
~QGeoCodeReplyOsmPrivate();
QVariantMap extraData() const override;
- bool m_includeGeometry = false;
QVariantMap m_extraData;
};
diff --git a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp
index 9403cfa8..b2744551 100644
--- a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp
+++ b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.cpp
@@ -88,6 +88,8 @@ QGeoCodingManagerEngineOsm::QGeoCodingManagerEngineOsm(const QVariantMap &parame
if (parameters.contains(QStringLiteral("osm.geocoding.debug_query")))
m_debugQuery = parameters.value(QStringLiteral("osm.geocoding.debug_query")).toBool();
+ if (parameters.contains(QStringLiteral("osm.geocoding.include_extended_data")))
+ m_includeExtraData = parameters.value(QStringLiteral("osm.geocoding.include_extended_data")).toBool();
*error = QGeoServiceProvider::NoError;
errorString->clear();
@@ -129,7 +131,7 @@ QGeoCodeReply *QGeoCodingManagerEngineOsm::geocode(const QString &address, int l
QNetworkReply *reply = m_networkManager->get(request);
- QGeoCodeReplyOsm *geocodeReply = new QGeoCodeReplyOsm(reply, this);
+ QGeoCodeReplyOsm *geocodeReply = new QGeoCodeReplyOsm(reply, m_includeExtraData, this);
if (m_debugQuery) {
QGeoCodeReplyOsmPrivate *replyPrivate
= static_cast<QGeoCodeReplyOsmPrivate *>(QGeoCodeReplyPrivate::get(*geocodeReply));
@@ -165,7 +167,7 @@ QGeoCodeReply *QGeoCodingManagerEngineOsm::reverseGeocode(const QGeoCoordinate &
QNetworkReply *reply = m_networkManager->get(request);
- QGeoCodeReplyOsm *geocodeReply = new QGeoCodeReplyOsm(reply, this);
+ QGeoCodeReplyOsm *geocodeReply = new QGeoCodeReplyOsm(reply, m_includeExtraData, this);
if (m_debugQuery) {
QGeoCodeReplyOsmPrivate *replyPrivate
= static_cast<QGeoCodeReplyOsmPrivate *>(QGeoCodeReplyPrivate::get(*geocodeReply));
diff --git a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h
index 2bc15715..7a54fa43 100644
--- a/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h
+++ b/src/plugins/geoservices/osm/qgeocodingmanagerengineosm.h
@@ -72,6 +72,7 @@ private:
QByteArray m_userAgent;
QString m_urlPrefix;
bool m_debugQuery = false;
+ bool m_includeExtraData = false;
};
QT_END_NAMESPACE