summaryrefslogtreecommitdiff
path: root/src/plugins/geoservices/osm/qgeoroutingmanagerengineosm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/geoservices/osm/qgeoroutingmanagerengineosm.cpp')
-rw-r--r--src/plugins/geoservices/osm/qgeoroutingmanagerengineosm.cpp31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/plugins/geoservices/osm/qgeoroutingmanagerengineosm.cpp b/src/plugins/geoservices/osm/qgeoroutingmanagerengineosm.cpp
index df3351c2..4e18049a 100644
--- a/src/plugins/geoservices/osm/qgeoroutingmanagerengineosm.cpp
+++ b/src/plugins/geoservices/osm/qgeoroutingmanagerengineosm.cpp
@@ -33,6 +33,8 @@
#include "qgeoroutingmanagerengineosm.h"
#include "qgeoroutereplyosm.h"
+#include "QtLocation/private/qgeorouteparserosrmv4_p.h"
+#include "QtLocation/private/qgeorouteparserosrmv5_p.h"
#include <QtCore/QUrlQuery>
@@ -51,7 +53,14 @@ QGeoRoutingManagerEngineOsm::QGeoRoutingManagerEngineOsm(const QVariantMap &para
if (parameters.contains(QStringLiteral("osm.routing.host")))
m_urlPrefix = parameters.value(QStringLiteral("osm.routing.host")).toString().toLatin1();
else
- m_urlPrefix = QStringLiteral("http://router.project-osrm.org/viaroute");
+ m_urlPrefix = QStringLiteral("http://router.project-osrm.org/route/v1/driving/");
+ // for v4 it was "http://router.project-osrm.org/viaroute"
+
+ if (parameters.contains(QStringLiteral("osm.routing.apiversion"))
+ && (parameters.value(QStringLiteral("osm.routing.apiversion")).toString().toLatin1() == QByteArray("v4")))
+ m_routeParser = new QGeoRouteParserOsrmV4(this);
+ else
+ m_routeParser = new QGeoRouteParserOsrmV5(this);
*error = QGeoServiceProvider::NoError;
errorString->clear();
@@ -64,20 +73,9 @@ QGeoRoutingManagerEngineOsm::~QGeoRoutingManagerEngineOsm()
QGeoRouteReply* QGeoRoutingManagerEngineOsm::calculateRoute(const QGeoRouteRequest &request)
{
QNetworkRequest networkRequest;
- networkRequest.setRawHeader("User-Agent", m_userAgent);
-
- QUrl url(m_urlPrefix);
- QUrlQuery query;
-
- query.addQueryItem(QStringLiteral("instructions"), QStringLiteral("true"));
+ networkRequest.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
- foreach (const QGeoCoordinate &c, request.waypoints()) {
- query.addQueryItem(QStringLiteral("loc"), QString::number(c.latitude()) + QLatin1Char(',') +
- QString::number(c.longitude()));
- }
-
- url.setQuery(query);
- networkRequest.setUrl(url);
+ networkRequest.setUrl(routeParser()->requestUrl(request, m_urlPrefix));
QNetworkReply *reply = m_networkManager->get(networkRequest);
@@ -90,6 +88,11 @@ QGeoRouteReply* QGeoRoutingManagerEngineOsm::calculateRoute(const QGeoRouteReque
return routeReply;
}
+const QGeoRouteParser *QGeoRoutingManagerEngineOsm::routeParser() const
+{
+ return m_routeParser;
+}
+
void QGeoRoutingManagerEngineOsm::replyFinished()
{
QGeoRouteReply *reply = qobject_cast<QGeoRouteReply *>(sender());