13QGeoRoutingManagerEngineOsm::QGeoRoutingManagerEngineOsm(
const QVariantMap ¶meters,
14 QGeoServiceProvider::Error *error,
16: QGeoRoutingManagerEngine(parameters), m_networkManager(
new QNetworkAccessManager(
this))
18 if (parameters.contains(QStringLiteral(
"osm.useragent")))
19 m_userAgent = parameters.value(QStringLiteral(
"osm.useragent")).toString().toLatin1();
21 m_userAgent =
"Qt Location based application";
23 if (parameters.contains(QStringLiteral(
"osm.routing.host")))
24 m_urlPrefix = parameters.value(QStringLiteral(
"osm.routing.host")).toString().toLatin1();
26 m_urlPrefix = QStringLiteral(
"http://router.project-osrm.org/route/v1/driving/");
29 if (parameters.contains(QStringLiteral(
"osm.routing.apiversion"))
30 && (parameters.value(QStringLiteral(
"osm.routing.apiversion")).toString().toLatin1() == QByteArray(
"v4")))
31 m_routeParser =
new QGeoRouteParserOsrmV4(
this);
33 m_routeParser =
new QGeoRouteParserOsrmV5(
this);
34 if (parameters.contains(QStringLiteral(
"osm.routing.traffic_side"))) {
35 QString trafficSide = parameters.value(QStringLiteral(
"mapbox.routing.traffic_side")).toString();
36 if (trafficSide == QStringLiteral(
"right"))
37 m_routeParser->setTrafficSide(QGeoRouteParser::RightHandTraffic);
38 else if (trafficSide == QStringLiteral(
"left"))
39 m_routeParser->setTrafficSide(QGeoRouteParser::LeftHandTraffic);
42 *error = QGeoServiceProvider::NoError;
52 QNetworkRequest networkRequest;
53 networkRequest.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
55 networkRequest.setUrl(routeParser()->requestUrl(request, m_urlPrefix));
57 QNetworkReply *reply = m_networkManager->get(networkRequest);
61 connect(routeReply, &QGeoRouteReplyOsm::finished,
62 this, &QGeoRoutingManagerEngineOsm::replyFinished);
63 connect(routeReply, &QGeoRouteReplyOsm::errorOccurred,
64 this, &QGeoRoutingManagerEngineOsm::replyError);