14QGeoRoutingManagerEngineOsm::QGeoRoutingManagerEngineOsm(
const QVariantMap ¶meters,
15 QGeoServiceProvider::Error *error,
17: QGeoRoutingManagerEngine(parameters), m_networkManager(
new QNetworkAccessManager(
this))
19 if (parameters.contains(QStringLiteral(
"osm.useragent")))
20 m_userAgent = parameters.value(QStringLiteral(
"osm.useragent")).toString().toLatin1();
22 m_userAgent =
"Qt Location based application";
24 if (parameters.contains(QStringLiteral(
"osm.routing.host")))
25 m_urlPrefix = parameters.value(QStringLiteral(
"osm.routing.host")).toString().toLatin1();
27 m_urlPrefix = QStringLiteral(
"http://router.project-osrm.org/route/v1/driving/");
30 if (parameters.contains(QStringLiteral(
"osm.routing.apiversion"))
31 && (parameters.value(QStringLiteral(
"osm.routing.apiversion")).toString().toLatin1() == QByteArray(
"v4")))
32 m_routeParser =
new QGeoRouteParserOsrmV4(
this);
34 m_routeParser =
new QGeoRouteParserOsrmV5(
this);
35 if (parameters.contains(QStringLiteral(
"osm.routing.traffic_side"))) {
36 QString trafficSide = parameters.value(QStringLiteral(
"mapbox.routing.traffic_side")).toString();
37 if (trafficSide == QStringLiteral(
"right"))
38 m_routeParser->setTrafficSide(QGeoRouteParser::RightHandTraffic);
39 else if (trafficSide == QStringLiteral(
"left"))
40 m_routeParser->setTrafficSide(QGeoRouteParser::LeftHandTraffic);
43 *error = QGeoServiceProvider::NoError;
53 QNetworkRequest networkRequest;
54 networkRequest.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
56 networkRequest.setUrl(routeParser()->requestUrl(request, m_urlPrefix));
58 QNetworkReply *reply = m_networkManager->get(networkRequest);
60 QGeoRouteReplyOsm *routeReply =
new QGeoRouteReplyOsm(reply, request,
this);
62 connect(routeReply, &QGeoRouteReplyOsm::finished,
63 this, &QGeoRoutingManagerEngineOsm::replyFinished);
64 connect(routeReply, &QGeoRouteReplyOsm::errorOccurred,
65 this, &QGeoRoutingManagerEngineOsm::replyError);